{"version":3,"file":"js/common/utils.js","mappings":"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","sources":["webpack://ReLondon.Web/./src/js/utils/alerts.js","webpack://ReLondon.Web/./src/js/utils/htmlUtils.js","webpack://ReLondon.Web/./src/js/utils/justValidateDefaults.js","webpack://ReLondon.Web/./src/js/utils/notFoundImage.js","webpack://ReLondon.Web/./src/js/utils/pagination.js","webpack://ReLondon.Web/./src/js/utils/request.js"],"sourcesContent":["import Swal from \"sweetalert2\";\n\nexport function loadingPopup(title = \"Loading...\", text) {\n Swal.fire({\n icon: \"info\",\n title: title,\n text: text,\n showConfirmButton: false,\n allowOutsideClick: false,\n allowEscapeKey: false,\n allowEnterKey: false,\n didOpen: () => Swal.showLoading()\n });\n}\n\n/**\n * /\n * @param {string} title \"Success\" default\n * @param {string} position \"bottom-end\" default\n * @param {string} text\n */\nexport function successToast(text, title = \"Success\", position = \"bottom-end\") {\n Swal.fire({\n icon: \"success\",\n title: title,\n text: text,\n toast: true,\n timer: 4000,\n timerProgressBar: true,\n position: position,\n showConfirmButton: false,\n backdrop: false\n });\n}\n\n/**\n *\n * @param {HttpStatusCode} err\n */\nexport function genericErrorPopup(err) {\n Swal.fire({\n icon: \"error\",\n title: \"Something went wrong...\",\n html: `(code: ${err.status})

${err.statusText}

`\n });\n}\n\nexport function ajaxErrorPopUp(status, error, title = undefined) {\n switch (status) {\n case 404:\n Swal.fire({\n title: title || \"Not found\",\n icon: \"error\",\n text: error\n });\n break;\n case 403:\n Swal.fire({\n title: title || \"Not authorised\",\n icon: \"error\",\n text: error\n });\n break;\n case 500:\n Swal.fire({\n title: title || \"Internal server error\",\n icon: \"error\",\n text: error\n });\n break;\n case 400:\n Swal.fire({\n title: title || \"Something went wrong\",\n icon: \"error\",\n text: error\n });\n break;\n case 409:\n Swal.fire({\n title: title || \"Server conflict\",\n icon: \"error\",\n text: error\n });\n break;\n case 402:\n Swal.fire({\n title: title || \"Payment required\",\n icon: \"error\",\n text: error\n });\n break;\n default:\n Swal.fire({\n title: title || \"Unknown Error\",\n icon: \"error\",\n text: \"An unknown error has occurred, please contact us\"\n });\n }\n}\n\n\nexport function confirmationPopup(confirmCallback, deniedCallback, opts = { title: \"Are you sure?\", text: \"You won't be able to revert this!\", confirmText: \"Confirm!\" }) {\n\n opts = Object.assign({ title: \"Are you sure?\", text: \"You won't be able to revert this!\", confirmText: \"Confirm!\" }, opts);\n\n Swal.fire({\n title: opts.title,\n text: opts.text,\n icon: \"warning\",\n showCancelButton: true,\n confirmButtonColor: \"#d33\",\n // cancelButtonColor: '#3085d6',\n confirmButtonText: opts.confirmText\n }).then((result) => {\n if (result.isConfirmed) {\n\n confirmCallback(result);\n\n // $.ajax({\n // url: url,\n // method: 'DELETE',\n // success: () => {\n // Swal.fire({\n // title: 'Successfully unfollowed!',\n // icon: 'success',\n // position: 'top-end',\n // timer: 3000,\n // toast: true,\n // showConfirmButton: false,\n // backdrop: false\n // });\n // $(row).addClass('line-through bg-secondary');\n // setTimeout(function () { table.ajax.reload(); }, 3000);\n // },\n // error: function (xhr, type, error) {\n // ajaxErrorPopUp(xhr.status, error);\n // }\n // });\n } else {\n deniedCallback(result);\n }\n })\n}","// https://stackoverflow.com/a/34064434\nexport function htmlDecode(str){\n var doc = new DOMParser().parseFromString(str, \"text/html\");\n return doc.documentElement.textContent;\n}\n\n/**\n * \n * @param {string} tagname \n * @param {...string} classes \n * @returns HTMLElementTagNameMap\n */\nexport function createElementWithInitalClasses(tagname, ...classes){\n const d = document.createElement(tagname);\n if (classes.length > 0) d.classList.add(...classes);\n return d;\n}\n\n/**\n * \n * @param {HTMLElement} element \n * @param {Object} attributes \n */\nexport function setMultipleAttributes(element, attributes){\n if(typeof(attributes) !== \"object\") return;\n \n for (const key in attributes) {\n element.setAttribute(key, attributes[key]);\n }\n}","export const justValidateGlobalDefaults = {\n errorFieldCssClass: ['is-invalid'],\n errorLabelCssClass: ['invalid-feedback', 'd-block'],\n successFieldCssClass: ['is-valid'],\n successLabelCssClass: ['valid-feedback', 'd-block'],\n};\n\nexport default justValidateGlobalDefaults;","export const notFound = \"data:image/png;base64,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\";","// Returns an array of maxLength (or less) page numbers\n// where a 0 in the returned array denotes a gap in the series.\n// Parameters:\n// totalPages: total number of pages\n// page: current page\n// maxLength: maximum size of returned array\nfunction getPageList(totalPages, page, maxLength) {\n if (maxLength < 5) throw \"maxLength must be at least 5\";\n\n function range(start, end) {\n return Array.from(Array(end - start + 1), (_, i) => i + start);\n }\n\n let sideWidth = maxLength < 9 ? 1 : 2;\n let leftWidth = (maxLength - sideWidth * 2 - 3) >> 1;\n let rightWidth = (maxLength - sideWidth * 2 - 2) >> 1;\n if (totalPages <= maxLength) {\n // no breaks in list\n return range(1, totalPages);\n }\n if (page <= maxLength - sideWidth - 1 - rightWidth) {\n // no break on left of page\n return range(1, maxLength - sideWidth - 1)\n .concat([0])\n .concat(range(totalPages - sideWidth + 1, totalPages));\n }\n if (page >= totalPages - sideWidth - 1 - rightWidth) {\n // no break on right of page\n return range(1, sideWidth)\n .concat([0])\n .concat(\n range(totalPages - sideWidth - 1 - rightWidth - leftWidth, totalPages)\n );\n }\n // Breaks on both sides\n return range(1, sideWidth)\n .concat([0])\n .concat(range(page - leftWidth, page + rightWidth))\n .concat([0])\n .concat(range(totalPages - sideWidth + 1, totalPages));\n}\nclass JsPaginationController {\n\n constructor(selector, onPageSelected, totalPages = 10, maxLength = 9) {\n this.page = 1;\n this.totalPages = totalPages;\n this.maxLength = maxLength;\n\n this.onPageSelected = onPageSelected;\n\n let paginationElements = Array.from(document.querySelectorAll(selector)).filter(e => e.dataset.js && e.dataset.js == \"true\");\n\n if (paginationElements.length == 0) {\n throw \"No JS controlled pagination found in document\";\n }\n\n this.elements = paginationElements;\n }\n\n updateTotal(t) {\n this.totalPages = t;\n this.refresh();\n }\n\n /**\n * \n * @param {HTMLElement} el \n */\n _disableElement(el) {\n el.setAttribute(\"aria-disabled\", \"true\");\n el.setAttribute(\"tabindex\", -1);\n }\n\n /**\n * \n * @param {HTMLElement} el \n */\n _enableElement(el) {\n el.removeAttribute(\"aria-disabled\");\n el.removeAttribute(\"tabindex\");\n }\n\n _createNumberElement(num) {\n const li = document.createElement(\"li\");\n li.classList.add(\"page-item\");\n\n if (num == this.page) {\n li.setAttribute(\"aria-current\", \"page\");\n li.classList.add(\"active\");\n } else if (num == 0) {\n li.classList.add(\"disabled\");\n }\n\n const btn = document.createElement(\"button\");\n btn.classList.add(\"page-link\");\n btn.setAttribute(\"data-page\", num);\n\n if (num != 0) btn.setAttribute(\"aria-label\", \"Page number \" + num);\n else this._disableElement(btn);\n\n btn.innerText = num == 0 ? \"...\" : num;\n li.appendChild(btn);\n return li;\n }\n\n /**\n * \n * @param {HTMLElement} ele \n */\n refreshPagination(ele) {\n let nums = getPageList(this.totalPages, this.page, this.maxLength);\n\n let currentNumbers = Array.from(ele.querySelectorAll(\"li:not([data-nav='true'])\"));\n currentNumbers.forEach(e => ele.removeChild(e));\n\n // Prev and next should be the only two elements left after the purge above.\n\n const prev = ele.children[0].cloneNode(true);\n if (this.page == 1) {\n prev.classList.add(\"disabled\");\n this._disableElement(prev.children[0]);\n prev.children[0].removeAttribute(\"data-page\");\n } else {\n prev.classList.remove(\"disabled\");\n this._enableElement(prev.children[0]);\n prev.children[0].setAttribute(\"data-page\", this.page -1);\n }\n\n const next = ele.children[1].cloneNode(true);\n if (this.page == this.totalPages) {\n next.classList.add(\"disabled\");\n this._disableElement(next.children[0]);\n next.children[0].removeAttribute(\"data-page\");\n } else {\n next.classList.remove(\"disabled\");\n this._enableElement(next.children[0]);\n next.children[0].setAttribute(\"data-page\", this.page +1);\n }\n\n // Replace it\n ele.replaceChild(prev, ele.children[0]);\n ele.replaceChild(next, ele.children[1]);\n\n //ele.children[0].classList.toggle(\"disabled\", this.page == 1);\n //ele.children[1].classList.toggle(\"disabled\", this.page == this.totalPages);\n\n var eles = nums.map(num => this._createNumberElement(num));\n ele.children[0].after(...eles); // Insert all the number li's after the \"prev\" element\n\n // Attach the event handler\n Array.from(ele.children).forEach(e => {\n e.addEventListener(\"click\", this._onPageClick.bind(this));\n });\n }\n\n updateOnPageSelect(f){\n this.onPageSelected = f;\n }\n\n async _onPageClick(event) {\n /** @type HTMLElement */\n const ele = event.target;\n\n const newPageNumber = ele.dataset.page;\n if(!newPageNumber){\n console.error(\"Cannot update page... No page number\");\n return;\n }\n \n if(newPageNumber == this.page || newPageNumber < 0 || newPageNumber > this.totalPages){\n event.preventDefault();\n return;\n }\n\n const parentEle = ele.closest(\".pagination[data-js='true']\");\n\n await this.onPageSelected(newPageNumber, parentEle);\n this.page = Number(newPageNumber);\n this.refresh();\n }\n\n refresh() {\n this.elements.forEach(e => this.refreshPagination(e));\n }\n}\n\nexport { JsPaginationController };","import parseISO from \"date-fns/parseISO\";\nimport { ajaxErrorPopUp } from \"./alerts\";\n\nconst getToken = async () => {\n if (!localStorage.getItem(\"jwt\")) {\n await getNewToken();\n } else {\n if (localStorage.getItem(\"jwt_expires\")) {\n\n // Let date-fns parse the UTC date into a local time and compare them..\n var expireDate = parseISO(localStorage.getItem(\"jwt_expires\"));\n var now = new Date();\n\n if (expireDate <= now) {\n await getNewToken();\n }\n }\n }\n\n return localStorage.getItem(\"jwt\");\n}\n\nconst getNewToken = async () => {\n var tokenResp = await fetch(\"/api/security/gettoken\");\n var t = await tokenResp.json();\n\n if (!tokenResp.ok) {\n console.error(\"Error getting token...\");\n ajaxErrorPopUp(tokenResp.status, t.detail, t.title);\n return false;\n }\n\n localStorage.setItem(\"jwt\", t.token);\n localStorage.setItem(\"jwt_expires\", t.expires);\n};\n\nconst authenticatedFetch = async (url, opts = {}) => {\n \n var token = await getToken();\n console.log(\"Token: \" + token);\n\n const headers = Object.assign(opts.headers || {}, {\n \"Authorization\": `Bearer ${token}`\n });\n\n var optsWithHeader = Object.assign(opts, { headers });\n\n try {\n return fetch(url, optsWithHeader);\n } catch (e) {\n console.error(\"Error sending authenticated request:\");\n console.error(e);\n }\n};\n\nexport { authenticatedFetch, getToken };"],"names":["loadingPopup","title","text","Swal","icon","showConfirmButton","allowOutsideClick","allowEscapeKey","allowEnterKey","didOpen","successToast","position","toast","timer","timerProgressBar","backdrop","ajaxErrorPopUp","status","error","undefined","htmlDecode","str","DOMParser","parseFromString","documentElement","textContent","createElementWithInitalClasses","tagname","d","document","createElement","classes","length","classList","add","setMultipleAttributes","element","attributes","key","setAttribute","justValidateGlobalDefaults","errorFieldCssClass","errorLabelCssClass","successFieldCssClass","successLabelCssClass","notFound","JsPaginationController","selector","onPageSelected","totalPages","maxLength","this","page","paginationElements","Array","from","querySelectorAll","filter","e","dataset","js","elements","t","refresh","el","removeAttribute","num","li","btn","_disableElement","innerText","appendChild","ele","nums","range","start","end","_","i","sideWidth","leftWidth","rightWidth","concat","getPageList","forEach","removeChild","prev","children","cloneNode","remove","_enableElement","next","replaceChild","eles","map","_createNumberElement","after","addEventListener","_onPageClick","bind","f","event","target","newPageNumber","console","preventDefault","parentEle","closest","Number","refreshPagination","getToken","localStorage","getItem","getNewToken","expireDate","parseISO","now","Date","fetch","tokenResp","json","ok","detail","setItem","token","expires","authenticatedFetch","url","opts","log","headers","Object","assign","optsWithHeader"],"sourceRoot":""}