1 line
21 KiB
Plaintext
1 line
21 KiB
Plaintext
{"version":3,"file":"utility.min.js","sources":["../../../../../../UILib/ui-lib/lib/utility/cookie.js","../../../../../../UILib/ui-lib/lib/utility/request.js","../../../../../../UILib/ui-lib/lib/utility/strings.js","../../../../../../UILib/ui-lib/lib/utility/lgres.js","../../../../../../UILib/ui-lib/lib/utility.js"],"sourcesContent":["export function setCookie(name, value, expireDays) {\r\n if (name == null) {\r\n return;\r\n }\r\n let extra = `; domain=${location.host}; path=/`;\r\n if (expireDays != null) {\r\n const d = new Date();\r\n d.setTime(d.getTime() + (expireDays * 24 * 60 * 60 * 1000));\r\n extra += `; expires=${d.toGMTString()}`;\r\n }\r\n if (/^(https|wss):$/.test(location.protocol)) {\r\n extra += '; secure';\r\n }\r\n document.cookie = `${name}=${encodeURIComponent(value)}${extra}`;\r\n}\r\n\r\nexport function getCookie(name) {\r\n if (name == null) {\r\n return null;\r\n }\r\n name += '=';\r\n const cookies = document.cookie.split(';');\r\n for (let cookie of cookies) {\r\n cookie = cookie.trim();\r\n if (cookie.startsWith(name)) {\r\n return decodeURIComponent(cookie.substring(name.length));\r\n }\r\n }\r\n return null;\r\n}\r\n\r\nexport function deleteCookie(name) {\r\n setCookie(name, '', -1);\r\n}","function combineUrl(url) {\r\n if (/^(https?|wss?|ftp):/.test(url)) {\r\n return url;\r\n }\r\n if (typeof consts === 'undefined') {\r\n return url;\r\n }\r\n return (consts.path || '') + url;\r\n}\r\n\r\nexport function get(url, options = {}) {\r\n return fetch(combineUrl(url), {\r\n method: options.method || 'GET',\r\n headers: {\r\n ...options.customHeaders,\r\n 'Accept': options.accept ?? 'application/json'\r\n },\r\n mode: options.mode,\r\n signal: options.signal,\r\n cache: 'default'\r\n });\r\n}\r\n\r\nexport function post(url, data, options = {}) {\r\n // let contentType;\r\n if (data instanceof FormData) {\r\n // contentType = 'multipart/form-data';\r\n } else {\r\n if (typeof data !== 'string') {\r\n data = JSON.stringify(data);\r\n }\r\n // contentType = 'application/json';\r\n if (options.customHeaders == null) {\r\n options.customHeaders = {};\r\n }\r\n if (options.customHeaders['Content-Type'] == null) {\r\n options.customHeaders['Content-Type'] = 'application/json';\r\n }\r\n }\r\n return fetch(combineUrl(url), {\r\n method: options.method || 'POST',\r\n headers: options.customHeaders,\r\n body: data,\r\n signal: options.signal,\r\n cache: 'no-cache'\r\n });\r\n}\r\n\r\nexport function upload(url, data, options = {}) {\r\n return new Promise((resolve, reject) => {\r\n const request = new XMLHttpRequest();\r\n request.onreadystatechange = function () {\r\n if (this.readyState === XMLHttpRequest.DONE) {\r\n if (this.status === 200) {\r\n resolve(this);\r\n } else {\r\n reject(`${this.status} ${this.statusText}: ${this.responseText}`);\r\n }\r\n }\r\n };\r\n if (typeof options.progress === 'function') {\r\n request.upload.addEventListener('progress', function (ev) {\r\n if (ev.lengthComputable) {\r\n options.progress.call(this, ev);\r\n }\r\n }, false);\r\n }\r\n request.open('POST', combineUrl(url));\r\n if (options.customHeaders != null) {\r\n for (let header of Object.entries(options.customHeaders)) {\r\n request.setRequestHeader(header[0], header[1]);\r\n }\r\n }\r\n request.send(data);\r\n });\r\n}","export function nullOrEmpty(s) {\r\n return s == null || typeof s !== 'string' || s.length === 0;\r\n}\r\n\r\nexport function contains(s, key, ignoreCase) {\r\n if (nullOrEmpty(s) || key == null) {\r\n return false;\r\n }\r\n if (typeof key !== 'string') {\r\n key = String(key);\r\n }\r\n if (ignoreCase) {\r\n return s.toLowerCase().includes(key.toLowerCase());\r\n }\r\n return s.includes(key);\r\n}\r\n\r\nexport function endsWith(s, suffix) {\r\n if (nullOrEmpty(s) || nullOrEmpty(suffix)) {\r\n return false;\r\n }\r\n return s.endsWith(suffix); // === s.length - suffix.length;\r\n}\r\n\r\nexport function padStart(s, num, char) {\r\n if (nullOrEmpty(s) || isNaN(num) || num <= s.length) {\r\n return s;\r\n }\r\n return (char ?? ' ').repeat(num - s.length);\r\n}\r\n\r\nexport function formatUrl(msg) {\r\n //const urlReg = /(https?:\\/\\/)?([\\da-z\\.-]+)\\.([a-z\\.]{2,6})([\\/\\w \\.-]*)*\\/?/ig;\r\n //const urlArrray = str.match(urlReg);\r\n const p = /(http|ftp|https):\\/\\/.+?(\\s|\\r\\n|\\r|\\n|\\\"|\\'|\\*|$)/g;\r\n const r = msg.match(p);\r\n msg = escapeHtml(msg);\r\n\r\n if (r?.length > 0) {\r\n const rs = [];\r\n for (let t of r) {\r\n t = t.replace(/[\"'\\r\\n ]/g, '');\r\n if (rs.indexOf(t) < 0) {\r\n rs.push(t);\r\n }\r\n }\r\n\r\n let path;\r\n if (typeof consts !== 'undefined') {\r\n path = consts.path;\r\n } else if (typeof _network !== 'undefined') {\r\n path = _network.root;\r\n } else if (typeof _net !== 'undefined') {\r\n path = _net.root;\r\n }\r\n for (let r of rs) {\r\n msg = msg.replaceAll(r, `<a target=\"_blank\" href=\"${r}\"><svg><use xlink:href=\"${path || ''}fonts/fa-regular.svg#link\"></use></svg></a>`);\r\n }\r\n }\r\n\r\n return msg;\r\n}\r\n\r\nexport function escapeHtml(text) {\r\n if (text == null) {\r\n return '';\r\n }\r\n return String(text)\r\n .replaceAll('&', '&')\r\n .replaceAll('<', '<')\r\n .replaceAll('>', '>')\r\n .replaceAll('\\r\\n', '<br/>')\r\n .replaceAll('\\n', '<br/>')\r\n .replaceAll(' ', ' ');\r\n}\r\n\r\nexport function escapeEmoji(text) {\r\n if (text == null) {\r\n return '';\r\n }\r\n if (typeof text !== 'string') {\r\n text = String(text);\r\n }\r\n return text\r\n .replace(/(=[A-Fa-f0-9]{2}){4}/g, s => decodeURIComponent(s.replaceAll('=', '%')))\r\n .replace(/&#x([0-9a-fA-F]{2,6});/g, (_, h) => String.fromCodePoint(parseInt(h, 16)));\r\n}","import { getCookie } from \"./cookie\";\r\nimport { get } from \"./request\";\r\nimport { nullOrEmpty } from \"./strings\";\r\n\r\nlet cache;\r\n\r\nfunction getCurrentLgId() {\r\n let lgid;\r\n if (typeof consts !== 'undefined') {\r\n lgid = getCookie(consts.cookie?.lang);\r\n if (nullOrEmpty(lgid)) {\r\n lgid = consts.user?.language;\r\n }\r\n }\r\n if (nullOrEmpty(lgid)) {\r\n lgid = getCookie('lgid');\r\n }\r\n if (nullOrEmpty(lgid)) {\r\n lgid = navigator.language || 'en-us';\r\n }\r\n lgid = lgid.toLowerCase().replace(/-/g, '_');\r\n if (nullOrEmpty(lgid)) {\r\n lgid = 'en';\r\n }\r\n switch (lgid) {\r\n case 'en':\r\n case 'en_au':\r\n case 'fr':\r\n case 'zh_cn':\r\n return lgid;\r\n }\r\n const lang = lgid.split('_')[0];\r\n switch (lang) {\r\n case 'en':\r\n case 'fr':\r\n return lang;\r\n }\r\n return 'en';\r\n}\r\n\r\nfunction getStorageKey(lgid) {\r\n if (typeof consts !== 'undefined') {\r\n return (consts.prefix || '') + `res_${lgid}`;\r\n }\r\n return `res_${lgid}`;\r\n}\r\n\r\nasync function doRefreshLgres(template = '') {\r\n const lgid = getCurrentLgId();\r\n const url = template.length > 0 ? template.replace('{lgid}', lgid) : `language/${lgid}`;\r\n const r = await get(url);\r\n const dict = await r.json();\r\n localStorage.setItem(getStorageKey(lgid), JSON.stringify(dict));\r\n return dict;\r\n}\r\n\r\nasync function refreshLgres(template, lgres) {\r\n if (lgres == null || typeof consts === 'undefined') {\r\n lgres = await doRefreshLgres(template);\r\n }\r\n const ver = Number(consts.resver);\r\n if (isNaN(lgres.ver) || isNaN(ver) || ver > lgres.ver) {\r\n console.log(`found new language res version: ${lgres.ver} => ${ver}`);\r\n lgres = await doRefreshLgres(template);\r\n }\r\n Object.defineProperty(lgres, 'r', {\r\n writable: false,\r\n configurable: false,\r\n enumerable: false,\r\n value: function (key, defaultValue) {\r\n return getLanguage(this, key, defaultValue);\r\n }\r\n });\r\n cache = lgres;\r\n return lgres;\r\n}\r\n\r\nfunction getLanguage(lgres, key, defaultValue) {\r\n let value = lgres[key];\r\n return value ?? defaultValue;\r\n}\r\n\r\nfunction applyLanguage(dom, result) {\r\n for (let text of dom.querySelectorAll('[data-lgid]')) {\r\n const key = text.dataset.lgid;\r\n if (text.tagName === 'INPUT') {\r\n text.value = getLanguage(result, key, text.value);\r\n } else {\r\n text.innerText = getLanguage(result, key, text.innerText);\r\n }\r\n }\r\n for (let title of dom.querySelectorAll('[data-title-lgid]')) {\r\n const key = title.dataset.titleLgid;\r\n title.setAttribute('title', getLanguage(result, key, title.getAttribute('title')));\r\n }\r\n for (let holder of dom.querySelectorAll('[data-placeholder-lgid]')) {\r\n const key = holder.dataset.placeholderLgid;\r\n holder.setAttribute('placeholder', getLanguage(result, key, holder.getAttribute('placeholder')));\r\n }\r\n}\r\n\r\nexport async function init(dom = document.body, options = {}) {\r\n const lgid = getCurrentLgId();\r\n let lgres = localStorage.getItem(getStorageKey(lgid));\r\n let result;\r\n if (lgres != null) {\r\n try {\r\n lgres = JSON.parse(lgres);\r\n result = await refreshLgres(options.template, lgres);\r\n } catch (e) {\r\n console.error('error while parsing lgres, try refresh ...', e);\r\n result = await refreshLgres(options.template);\r\n }\r\n } else {\r\n result = await refreshLgres(options.template);\r\n }\r\n\r\n try {\r\n if (document.readyState === 'loading') {\r\n return await new Promise((resolve, reject) => {\r\n let tid = setTimeout(() => reject('timeout'), 30000);\r\n document.addEventListener('DOMContentLoaded', () => {\r\n clearTimeout(tid);\r\n tid = void 0;\r\n if (typeof options.callback === 'function') {\r\n options.callback(result);\r\n }\r\n applyLanguage(dom, result);\r\n resolve(result);\r\n });\r\n });\r\n }\r\n if (typeof options.callback === 'function') {\r\n options.callback(result);\r\n }\r\n applyLanguage(dom, result);\r\n return result;\r\n } catch (err) {\r\n console.error('error while loading language res ...', err);\r\n }\r\n}\r\n\r\nexport function r(key, defaultValue) {\r\n if (cache != null) {\r\n return getLanguage(cache, key, defaultValue);\r\n }\r\n return defaultValue;\r\n}\r\n\r\nexport const lang = {\r\n get current() {\r\n return getCurrentLgId();\r\n },\r\n get unknownError() {\r\n return r('unknownError', 'An unknown error occurred, please contact the administrator.');\r\n },\r\n get savedSuccessfully() {\r\n return r('savedSuccessfully', 'Saved successfully.');\r\n }\r\n}","import { getCookie, setCookie, deleteCookie } from \"./utility/cookie\";\r\nimport { init, r, lang } from \"./utility/lgres\";\r\nimport { get, post, upload } from \"./utility/request\";\r\nimport { nullOrEmpty, contains, endsWith, padStart, formatUrl, escapeHtml, escapeEmoji } from \"./utility/strings\";\r\n\r\nlet g = typeof globalThis !== 'undefined' ? globalThis : self;\r\n\r\nfunction isPositive(n) {\r\n return !isNaN(n) && n > 0;\r\n}\r\n\r\nfunction isMobile() {\r\n return /mobile/i.test(navigator.userAgent);\r\n}\r\n\r\nfunction throttle(method, delay = 100, context = g, ...args) {\r\n if (method == null) {\r\n return;\r\n }\r\n method.tiid && clearTimeout(method.tiid);\r\n const current = new Date();\r\n if (method.tdate == null || current - method.tdate > delay) {\r\n method.apply(context, args);\r\n method.tdate = current;\r\n } else {\r\n method.tiid = setTimeout(() => method.apply(context, args), delay);\r\n }\r\n}\r\n\r\nfunction debounce(method, delay = 100, context = g, ...args) {\r\n if (method == null) {\r\n return;\r\n }\r\n method.tiid && clearTimeout(method.tiid);\r\n method.tiid = setTimeout(() => method.apply(context, args), delay);\r\n}\r\n\r\nfunction truncate(v) {\r\n return (v > 0 ? Math.floor : Math.ceil)(v);\r\n}\r\n\r\nfunction isEmail(text) {\r\n return /^\\w[-\\w.+]*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$/.test(text);\r\n}\r\n\r\nfunction isPhone(text) {\r\n if (/^[1-9]\\d{9,}$/.test(text)) {\r\n return true;\r\n }\r\n if (/^\\+?[1-9][\\d-]{9,}\\d$/.test(text) && /^[1-9]\\d{9,}$/.test(text.replace('+', '').replace(new RegExp('-', 'g'), ''))) {\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport {\r\n // cookie\r\n getCookie,\r\n setCookie,\r\n deleteCookie,\r\n // lgres\r\n init,\r\n r,\r\n lang,\r\n // request\r\n get,\r\n post,\r\n upload,\r\n // strings\r\n nullOrEmpty,\r\n contains,\r\n endsWith,\r\n padStart,\r\n formatUrl,\r\n escapeHtml,\r\n escapeEmoji,\r\n // variables\r\n g as global,\r\n isPositive,\r\n isMobile,\r\n // functions\r\n throttle,\r\n debounce,\r\n truncate,\r\n isEmail,\r\n isPhone\r\n}"],"names":["setCookie","name","value","expireDays","extra","d","getCookie","cookies","cookie","deleteCookie","combineUrl","url","get","options","post","data","upload","resolve","reject","request","ev","header","nullOrEmpty","s","contains","key","ignoreCase","endsWith","suffix","padStart","num","char","formatUrl","msg","p","r","escapeHtml","rs","t","path","text","escapeEmoji","_","h","cache","getCurrentLgId","lgid","_a","_b","lang","getStorageKey","doRefreshLgres","template","dict","refreshLgres","lgres","ver","defaultValue","getLanguage","applyLanguage","dom","result","title","holder","init","e","tid","err","g","isPositive","n","isMobile","throttle","method","delay","context","args","current","debounce","truncate","v","isEmail","isPhone"],"mappings":"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"} |