{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../Scripts/shared/utils.ts","../../../Scripts/shared/ajax.ts","../../../Scripts/app.ts","../../../Scripts/shared/modal.ts","../../../Scripts/strings/string-edit.ts","../../../Scripts/strings/string-search.ts","../../../Scripts/strings/strings.ts","../../../Scripts/users/notifications.ts","../../../Scripts/users/user-edit.ts"],"names":[],"mappings":"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","sourcesContent":["export function clone(obj: object) {\n return JSON.parse(JSON.stringify(obj));\n}\n\nexport function spinner(show: boolean) {\n const spinnerObj = document.getElementById(\"spinner\");\n if (!spinnerObj) {\n throw Error(\"Could not find a spinner object\");\n }\n spinnerObj.style.display = show ? \"block\" : \"none\";\n}\n\nexport function dynamicEventHook(events: string[] | string, selector: string, handler: (e: Event) => void) {\n if (!Array.isArray(events)) {\n events = [events];\n }\n\n for (const event of events) {\n document.addEventListener(event, e => {\n if (e.target && Array.from(document.querySelectorAll(selector)).indexOf(e.target as Element) !== -1) {\n handler.call(e.target, e);\n }\n });\n }\n}\n\nexport function toCamelCase(s: string) {\n return s.replace(/([-_][a-z])/ig, ($1: string) => {\n return $1.toUpperCase()\n .replace(\"-\", \"\")\n .replace(\"_\", \"\");\n });\n}\n\nexport function urlBase64ToUint8Array(base64String: string) {\n const padding = \"=\".repeat((4 - base64String.length % 4) % 4);\n const base64 = (base64String + padding)\n .replace(/\\-/g, \"+\")\n .replace(/_/g, \"/\");\n const rawData = window.atob(base64);\n return Uint8Array.from([...rawData].map(char => char.charCodeAt(0)));\n}\n","import { spinner } from \"./utils\";\n\nlet csrfToken: string;\n\nexport function init(token: string) {\n csrfToken = token;\n}\n\nexport function ajaxGet(url: string, queryString?: string, onSuccess?: (_: string) => void, onErrorResponse?: (_: Response) => void, onFailure?: (_: Error) => void) {\n ajax(\"GET\", url, queryString, undefined, onSuccess, onErrorResponse, onFailure);\n}\n\nexport function ajaxPost(url: string, body: object, onSuccess?: (_: string) => void, onErrorResponse?: (_: Response) => void, onFailure?: (_: Error) => void) {\n ajax(\"POST\", url, undefined, body, onSuccess, onErrorResponse, onFailure);\n}\n\nasync function ajax(method: \"GET\" | \"POST\", url: string, queryString?: string, body?: object, onSuccess?: (_: string) => void, onErrorResponse?: (_: Response) => void, onFailure?: (_: Error) => void) {\n spinner(true);\n\n const headers: Record<string, string> = body ? { \"Content-Type\": \"application/json\" } : {};\n\n if (method === \"POST\") {\n headers[\"X-CSRF-TOKEN\"] = csrfToken;\n }\n\n try {\n const requestInit: RequestInit = { method, headers };\n if (body) {\n requestInit.body = JSON.stringify(body);\n }\n\n const response = await fetch(url + (queryString || \"\"), requestInit);\n spinner(false);\n if (response.ok) {\n const value = await response.text();\n onSuccess?.(value);\n } else {\n const errorHandler = onErrorResponse ?? defaultAjaxOnErrorResponse;\n errorHandler(response);\n }\n } catch (error: any) {\n spinner(false);\n const errorHandler = (onFailure || defaultAjaxOnFailure);\n errorHandler(error);\n }\n}\n\nexport function queryStringFromObject(obj: Record<string, string | number>) {\n if (!obj) {\n return \"\";\n }\n\n let query = Object\n .keys(obj)\n .filter(k => !!obj[k])\n .map(k => encodeURIComponent(k) + \"=\" + encodeURIComponent(obj[k]))\n .join(\"&\");\n\n if (query) {\n query = \"?\" + query;\n }\n\n return query;\n}\n\nexport function defaultAjaxOnErrorResponse(response: Response) {\n alert(`Error returned by server:\\r\\n${response.status} - ${response.statusText}`);\n}\n\nfunction defaultAjaxOnFailure(error: Error) {\n alert(error);\n}\n","import { init as initAjax } from \"./shared/ajax\";\n\nexport function init(csrfToken: string) {\n initAjax(csrfToken);\n initLogInLogOutLinks();\n}\n\nfunction initLogInLogOutLinks() {\n const elements = Array.from(document.getElementsByClassName(\"js-add-return-url\"));\n for (const element of elements) {\n element.addEventListener(\"click\", e => {\n const target = e.target as HTMLAnchorElement;\n window.location.href = `${target.href}?returnUrl=${encodeURIComponent(document.location.href)}`;\n return false;\n });\n }\n}\n","interface ModalContent {\n content: string;\n}\n\ndeclare class Modal {\n constructor(container: HTMLElement, content: ModalContent);\n public show(): void;\n public hide(): void;\n}\n\nconst modal = (() => {\n let currentModal: Modal | undefined;\n let onClose: (() => void) | undefined;\n\n function modalContainer(): HTMLElement {\n const container = document.getElementById(\"modal-container\");\n if (container) {\n return container;\n }\n throw new Error(\"Could not find container for modal\");\n }\n\n function showModal(title: string, contents: string, closeCallback?: () => void) {\n hideModal();\n\n const modalHtml =\n `<div class=\"modal-header\">\n <h5 class=\"modal-title\">${title}</h5>\n <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">\n <span aria-hidden=\"true\">×</span>\n </button>\n </div>\n <div class=\"modal-body\" id=\"modal-body\">\n ${contents}\n </div>`;\n\n currentModal = new Modal(modalContainer(), { content: modalHtml });\n onClose = closeCallback;\n\n modalContainer().addEventListener(\"hidden.bs.modal\", _ => {\n onClose?.();\n currentModal = undefined;\n onClose = undefined;\n }, false);\n\n currentModal.show();\n }\n\n function modalContents() {\n modalContainer().querySelector(\".modal-body\");\n }\n\n function hideModal() {\n currentModal?.hide();\n }\n\n return {\n show: showModal,\n hide: hideModal,\n contents: modalContents\n };\n})();\n\nexport default modal;\n","import { ajaxGet, ajaxPost, queryStringFromObject, defaultAjaxOnErrorResponse } from \"../shared/ajax\";\nimport { dynamicEventHook, toCamelCase } from \"../shared/utils\";\nimport modal from \"../shared/modal\";\n\nexport function showString(stringId: string, reuseModal?: boolean) {\n ajaxGet(\n \"/string_edit_ui\",\n queryStringFromObject({ stringId }),\n html => {\n if (reuseModal) {\n const content = document.getElementById(\"modal-body\");\n if (!content) {\n throw Error(\"Couldn't find the modal-body element\");\n }\n content.innerHTML = html;\n } else {\n // when people visit the string url by doing a request, we don't need to pushState\n const newPath = `/strings/${stringId}`;\n if (window.location.pathname !== newPath) {\n history.pushState({ stringId, prevUrl: window.location.href, prevState: history.state }, \"\", newPath);\n }\n\n modal.show(\"Suggestions\", html, () => {\n history.pushState(history.state?.prevState, \"\", history.state?.prevUrl ?? \"/\");\n });\n }\n }\n );\n}\n\nexport function init() {\n const suggestionCreationErrors: Record<number, string> = {\n 2: \"We couldn't find the id you send, did you need to refresh your page?\",\n 3: \"The suggestion you are sending is the same as the actual translation\",\n 4: \"You sent an empty suggestion, please try to send a suggestion next time\",\n 5: \"The suggestion you are sending is already suggested. Maybe you need to refresh?\",\n 6: \"Failed sending the suggestion. You are missing some variables\",\n 7: \"Failed sending the suggestion. You have included unrecognized variables\",\n 8: \"A database error has ocurred, please try again.\"\n };\n\n dynamicEventHook(\"click\", \".string-list tr td:first-of-type\", (e: Event) => {\n const tgt = e.target as HTMLElement;\n if (tgt && tgt.parentElement) {\n loadStringEditorFor(tgt.parentElement);\n }\n });\n\n function loadStringEditorFor(searchResultsRow: HTMLElement) {\n const stringId = searchResultsRow.getAttribute(\"data-string-id\");\n if (!stringId) {\n throw Error(\"Could not find the string id to load\");\n }\n showString(stringId);\n }\n\n dynamicEventHook(\"click\", \"button[data-string-action]\", (e: Event) => {\n executeStringActionFor(e.target as HTMLElement);\n });\n\n // TODO: Find a better way to hook the thumb up/down icon clicks\n dynamicEventHook(\"click\", \"button[data-string-action] *\", (e: Event) => {\n if (e.target) {\n const tgt = e.target as HTMLElement;\n const action = tgt.closest(\"[data-string-action]\");\n if (!action) {\n throw Error(\"Could not find the action to perform\");\n }\n\n executeStringActionFor(action);\n }\n });\n\n dynamicEventHook([\"change\", \"keyup\", \"paste\"], \"textarea[data-string-action]\", (e: Event) => {\n if (e.target) {\n executeStringActionFor(e.target as HTMLElement);\n }\n });\n\n function executeStringActionFor(element: Element) {\n const stringContainer = element.closest(\"[data-string-id]\");\n if (!stringContainer) {\n throw Error(\"Could not find the string id container\");\n }\n\n const stringId = stringContainer.getAttribute(\"data-string-id\");\n if (!stringId) {\n throw Error(\"Could not find the string id\");\n }\n\n const actionNameAttr = element.getAttribute(\"data-string-action\");\n if (!actionNameAttr) {\n throw Error(\"Could not find the action name attribute\");\n }\n\n const actionName = toCamelCase(actionNameAttr);\n const action = getAction(actionName);\n\n action(stringId, element);\n }\n\n function getAction(actionName: string): (a: string, b: Element) => void {\n switch (actionName) {\n case \"copyAsSuggestion\": return (_: string, button: Element) => {\n const buttonTargetId = button.getAttribute(\"data-string-action-target\");\n if (!buttonTargetId) {\n throw Error(\"Could not find the target id\");\n }\n\n const target = document.getElementById(buttonTargetId);\n if (!target) {\n throw Error(\"Could not find the target\");\n }\n\n const text = target.innerText;\n const suggestionBox = document.getElementById(\"suggestion\") as HTMLTextAreaElement;\n suggestionBox.value = text;\n };\n case \"manageIgnore\": return (stringId: string, button: Element) => {\n const doIgnore = button.getAttribute(\"data-string-action-argument\") === \"ignore\";\n\n ajaxPost(\n \"/manage-ignore\",\n {\n stringId: parseInt(stringId, 10),\n ignored: doIgnore\n },\n text => {\n const stringContainer = button.closest(\"[data-string-id]\");\n if (!stringContainer) {\n throw Error(\"Could not find the string id container\");\n }\n\n stringContainer.outerHTML = text;\n }\n );\n };\n case \"manageUrgency\": return (stringId: string, button: Element) => {\n const mustBeUrgent = button.getAttribute(\"data-string-action-argument\") === \"make-urgent\";\n\n ajaxForStringAction(\n stringId,\n \"/manage-urgency\",\n {\n stringId: parseInt(stringId, 10),\n isUrgent: mustBeUrgent\n },\n undefined,\n true\n );\n };\n case \"handleSuggestionTextChanged\": return (_: string, element: Element) => {\n const textarea = element as HTMLTextAreaElement;\n const replaceButtons = document.querySelectorAll(\".js-replace-suggestion\") as NodeListOf<HTMLButtonElement>;\n for (const button of replaceButtons) {\n button.disabled = !textarea.value.trim();\n }\n };\n case \"replaceSuggestion\": return (stringId: string, button: Element) => {\n const suggestionElement = button.closest(\"[data-suggestion-id]\");\n if (!suggestionElement) {\n throw Error(\"Could not find the suggestion\");\n }\n\n const suggestionId = suggestionElement.getAttribute(\"data-suggestion-id\");\n if (!suggestionId) {\n throw Error(\"Could not find suggestion id\");\n }\n\n const newSuggestion = (document.getElementById(\"suggestion\") as HTMLTextAreaElement).value.trim();\n\n ajaxForStringAction(\n stringId,\n \"/replace-suggestion\",\n {\n suggestionId: parseInt(suggestionId, 10),\n newSuggestion\n }\n );\n };\n case \"deleteSuggestion\": return (stringId: string, button: Element) => {\n const suggestionElement = button.closest(\"[data-suggestion-id]\");\n if (!suggestionElement) {\n throw Error(\"Could not find the suggestion\");\n }\n const suggestionId = suggestionElement.getAttribute(\"data-suggestion-id\");\n if (!suggestionId) {\n throw Error(\"Could not find the suggestion id\");\n }\n\n ajaxForStringAction(\n stringId,\n \"/delete-suggestion\",\n {\n suggestionId: parseInt(suggestionId, 10)\n }\n );\n };\n case \"reviewSuggestion\": return (stringId: string, button: Element) => {\n const suggestionElement = button.closest(\"[data-suggestion-id]\");\n if (!suggestionElement) {\n throw Error(\"Could not find the suggestion\");\n }\n\n const suggestionId = suggestionElement.getAttribute(\"data-suggestion-id\");\n if (!suggestionId) {\n throw Error(\"Could not find the suggestion id\");\n }\n\n const approve = button.getAttribute(\"data-review-action\") === \"approve\";\n\n ajaxForStringAction(\n stringId,\n \"/review-suggestion\",\n {\n suggestionId: parseInt(suggestionId, 10),\n approve\n }\n );\n };\n case \"createSuggestion\": return (stringId: string, button: Element) => {\n const rawStringCheckbox = document.getElementById(\"is-raw-string\") as HTMLInputElement;\n const suggestionElement = document.getElementById(\"suggestion\") as HTMLTextAreaElement;\n const body = {\n stringId: parseInt(stringId, 10),\n suggestion: suggestionElement.value.trim(),\n approve: button.getAttribute(\"data-create-approved-suggestion\") === \"yes\",\n rawString: rawStringCheckbox ? !!rawStringCheckbox.checked : false\n };\n\n ajaxForStringAction(\n stringId,\n \"/create-suggestion\",\n body,\n errorResponse => {\n if (errorResponse.status !== 400) {\n defaultAjaxOnErrorResponse(errorResponse);\n return;\n }\n\n errorResponse.text().then(errorCode => {\n const errorMessage = suggestionCreationErrors[parseInt(errorCode, 10)] ?? \"The server encountered an error, but we don't know what happened\";\n alert(errorMessage);\n });\n }\n );\n };\n }\n\n throw Error(\"Unknown action: \" + actionName);\n }\n\n function ajaxForStringAction(stringId: string, url: string, body: object, onErrorResponse?: (_: Response) => void, keepModalOpen?: boolean) {\n ajaxPost(\n url,\n body,\n text => {\n const stringSummaryContainer = document.querySelector(`.js-string-summary[data-string-id='${stringId}']`);\n if (stringSummaryContainer) {\n stringSummaryContainer.outerHTML = text;\n }\n if (keepModalOpen) {\n showString(stringId, true);\n } else {\n modal.hide();\n }\n },\n onErrorResponse\n );\n }\n}\n","import { ajaxGet, queryStringFromObject } from \"../shared/ajax\";\nimport { clone, spinner } from \"../shared/utils\";\n\ndeclare var stringQueryFilters: any;\n\nexport default function initializeStringSearch() {\n const queryDropdowns = document.querySelectorAll(\"select.js-string-query-filter\") as NodeListOf<HTMLSelectElement>;\n const queryTextInputs = document.querySelectorAll(\"input[type=text].js-string-query-filter\") as NodeListOf<HTMLInputElement>;\n const queryLinks = document.querySelectorAll(\"a.js-string-query-filter\") as NodeListOf<HTMLAnchorElement>;\n\n hookDropdowns();\n hookTextboxes();\n hookQuickLinks();\n hookHistoryPopState();\n\n function hookDropdowns() {\n for (const dropdown of queryDropdowns) {\n dropdown.onchange = e => { updateList(e.target as Element, true); };\n }\n }\n\n function hookTextboxes() {\n let textInputTimeout: number | undefined;\n for (const input of queryTextInputs) {\n input.onkeyup = e => {\n clearTimeout(textInputTimeout);\n textInputTimeout = setTimeout(() => { updateList(e.target as Element); }, 500);\n };\n }\n }\n\n function hookQuickLinks() {\n for (let i = 0; i < queryLinks.length; i++) {\n const link = queryLinks.item(i);\n link.onclick = e => {\n const target = e.target as HTMLElement;\n const queryKey = target.getAttribute(\"data-string-query-key\");\n const queryValue = target.getAttribute(\"data-string-query-value\");\n if (queryValue == null) {\n throw Error(\"Could not get a queryValue\");\n }\n\n const dropdown = document.querySelector(`select[data-string-query-key=${queryKey}`) as HTMLSelectElement;\n if (!dropdown) {\n throw Error(\"Could not find the dropdown\");\n }\n dropdown.value = queryValue;\n updateList(e.target as Element, true);\n e.preventDefault();\n };\n }\n }\n\n function hookHistoryPopState() {\n window.onpopstate = (_: PopStateEvent) => {\n location.reload();\n };\n }\n\n function updateList(triggeringElement: Element, valueIsNumber?: boolean) {\n spinner(true);\n\n if (triggeringElement) {\n const queryKey = triggeringElement.getAttribute(\"data-string-query-key\");\n if (!queryKey) {\n throw Error(\"Could not find the queryKey\");\n }\n\n // TODO: Check what things are passed here that have a value\n let value = null;\n const elementAsAny = triggeringElement as any;\n if (elementAsAny.value) {\n value = elementAsAny.value;\n }\n\n let queryValue = triggeringElement.getAttribute(\"data-string-query-value\") ?? value;\n if (valueIsNumber) {\n queryValue = parseInt(queryValue, 10);\n }\n stringQueryFilters[queryKey] = queryValue;\n }\n\n const queryString = queryStringFromObject(stringQueryFilters);\n\n if (triggeringElement) {\n history.pushState(clone(stringQueryFilters), \"\", queryString ? \"filters\" + queryString : \"/\");\n }\n\n ajaxGet(\n \"/strings_list\",\n queryString,\n html => {\n const stringsList = document.getElementById(\"strings_list\");\n if (!stringsList) {\n throw Error(\"Could not get the strings list DOM element\");\n }\n\n stringsList.innerHTML = html;\n },\n response => {\n console.error(`Error returned by server: ${response.status} - ${response.statusText}`)\n }\n );\n }\n}\n","import InitStringSearch from \"./string-search\";\nimport { init as initStringEdit } from \"./string-edit\";\n\nexport function init() {\n InitStringSearch();\n initStringEdit();\n}\n\nexport { showString as show } from \"./string-edit\";\n","declare var notificationSettings: any;\n\nimport { ajaxPost, defaultAjaxOnErrorResponse } from \"../shared/ajax\";\nimport { urlBase64ToUint8Array } from \"../shared/utils\";\n\nexport default function run() {\n initializeNotifications();\n}\n\nfunction initializeNotifications() {\n const supportsPush = (\"serviceWorker\" in navigator) && (\"PushManager\" in window);\n if (!supportsPush) {\n const container = document.getElementById(\"main-container\");\n if (!container) {\n throw Error(\"Could not get the container DOM element\");\n }\n\n container.outerHTML = \"<div class='sorry-no-push'>Your browser doesn't support push notifications</div>\";\n return;\n }\n\n document.querySelectorAll(\"[data-notification-name]\").forEach(element => {\n element.addEventListener(\"click\", e => {\n handleNotificationChange(e.target as Element);\n });\n });\n\n function handleNotificationChange(element: Element) {\n const notificationName = element.getAttribute(\"data-notification-name\");\n if (!notificationName) {\n throw Error(\"Could not get the notification name\");\n }\n\n notificationSettings[notificationName] = !notificationSettings[notificationName];\n\n if (notificationSettings[notificationName]) {\n element.classList.add(\"active\");\n } else {\n element.classList.remove(\"active\");\n }\n }\n\n const intervalValueSelector = document.getElementById(\"notifications-interval-value\") as HTMLInputElement;\n intervalValueSelector.addEventListener(\"change\", () => {\n notificationSettings.notificationsIntervalValue = parseInt(intervalValueSelector.value, 10);\n });\n\n const intervalSelector = document.getElementById(\"notifications-interval\") as HTMLInputElement;\n intervalSelector.addEventListener(\"change\", () => {\n notificationSettings.notificationsInterval = parseInt(intervalSelector.value, 10);\n });\n\n const saveButton = document.getElementById(\"save-and-add-browser\");\n if (!saveButton) {\n throw Error(\"Could not find the save button\");\n }\n saveButton.addEventListener(\"click\", saveAndAddBrowser);\n\n const stopNotificationsButton = document.getElementById(\"stop-receiving-notifications\");\n if (!stopNotificationsButton) {\n throw Error(\"Could not find the stop notifications button\");\n }\n stopNotificationsButton.addEventListener(\"click\", wipeNotifications);\n\n async function saveAndAddBrowser(): Promise<void> {\n const subscription = await subscribeUserToPush();\n ajaxPost(\n \"/users/me/notifications/update\",\n { notifications: notificationSettings, subscription },\n undefined,\n response => {\n if (response.status === 401) {\n history.pushState(null, \"\", \"/\");\n } else {\n defaultAjaxOnErrorResponse(response);\n }\n }\n );\n }\n\n async function subscribeUserToPush(): Promise<PushSubscription> {\n try {\n await navigator.serviceWorker.register(\"/service-worker.js\");\n const registration = await navigator.serviceWorker.ready;\n\n const subscribeOptions = {\n applicationServerKey: urlBase64ToUint8Array(notificationSettings.vapidPublic),\n userVisibleOnly: true\n };\n\n return registration.pushManager.subscribe(subscribeOptions);\n } catch (e: any) {\n alert(\"Error asking for permission: \" + e.message);\n throw e;\n }\n }\n\n function wipeNotifications() {\n ajaxPost(\"/delete-notifications\", {}, () => location.reload(), response => {\n if (response.status === 401) {\n history.pushState(null, \"\", \"/\");\n } else {\n defaultAjaxOnErrorResponse(response);\n }\n });\n }\n}\n","import { ajaxPost } from \"../shared/ajax\";\nimport { dynamicEventHook } from \"../shared/utils\";\n\nexport default function run() {\n initializeUserEdit();\n}\n\nfunction initializeUserEdit() {\n dynamicEventHook(\"click\", \"[data-change-to-user-type]\", (e: Event) => {\n changeUserTypeFor(e.target as HTMLElement);\n });\n\n function changeUserTypeFor(element: HTMLElement) {\n const userSummaryContainer = element.closest(\"[data-user-id]\");\n if (!userSummaryContainer) {\n throw Error(\"Could not get the summary container DOM element\");\n }\n\n const userId = userSummaryContainer.getAttribute(\"data-user-id\");\n if (!userId) {\n throw Error(\"Could not get the user Id\");\n }\n\n const newUserType = element.getAttribute(\"data-change-to-user-type\");\n if (!newUserType) {\n throw Error(\"Could not get the new user type\");\n\n }\n\n ajaxPost(\n \"/users/change-type\",\n {\n userId: parseInt(userId, 10),\n userType: parseInt(newUserType, 10)\n },\n html => userSummaryContainer.outerHTML = html\n );\n }\n}\n"]}