slimsdk 0.1.55 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/desktop/index.d.ts +13 -12
- package/dist/desktop/index.js +1228 -1967
- package/dist/desktop/index.js.map +1 -1
- package/dist/index-3POan8Vl.d.ts +94 -0
- package/dist/index-B4158M0u.d.ts +21 -0
- package/dist/index-BAQxKstM.d.ts +8 -0
- package/dist/index-BMqjxP9I.d.ts +11 -0
- package/dist/index-CD53Vh6h.d.ts +31 -0
- package/dist/index-CoYHkkyT.d.ts +14 -0
- package/dist/index-D5CUpF9v.d.ts +10 -0
- package/dist/index-DBhzpIiB.d.ts +32 -0
- package/dist/index-DCw_tM-R.d.ts +28 -0
- package/dist/{index-kr8P3eEW.d.ts → index-DWqF-tKY.d.ts} +7 -9
- package/dist/index-DzKPF0ja.d.ts +14 -0
- package/dist/index-jVam7Sxi.d.ts +15 -0
- package/dist/index-uQOR5bdy.d.ts +20 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/mobile/index.d.ts +13 -12
- package/dist/mobile/index.js +299 -808
- package/dist/mobile/index.js.map +1 -1
- package/dist/mod/button/index.d.ts +1 -1
- package/dist/mod/button/index.js +2 -2
- package/dist/mod/button/index.js.map +1 -1
- package/dist/mod/config/index.d.ts +52 -0
- package/dist/mod/{global → config}/index.js +45 -41
- package/dist/mod/config/index.js.map +1 -0
- package/dist/mod/cover/index.d.ts +1 -1
- package/dist/mod/cover/index.js +3 -3
- package/dist/mod/cover/index.js.map +1 -1
- package/dist/mod/dialog/index.d.ts +1 -1
- package/dist/mod/dialog/index.js +13 -13
- package/dist/mod/dialog/index.js.map +1 -1
- package/dist/mod/drawer/index.d.ts +1 -1
- package/dist/mod/drawer/index.js +8 -8
- package/dist/mod/drawer/index.js.map +1 -1
- package/dist/mod/drop/index.d.ts +1 -1
- package/dist/mod/drop/index.js +15 -15
- package/dist/mod/drop/index.js.map +1 -1
- package/dist/mod/hwlink/index.d.ts +2 -2
- package/dist/mod/hwlink/index.js +44 -656
- package/dist/mod/hwlink/index.js.map +1 -1
- package/dist/mod/index.d.ts +7 -7
- package/dist/mod/index.js +61 -59
- package/dist/mod/index.js.map +1 -1
- package/dist/mod/modal/index.d.ts +1 -1
- package/dist/mod/modal/index.js +12 -12
- package/dist/mod/modal/index.js.map +1 -1
- package/dist/mod/tabs/index.d.ts +1 -1
- package/dist/mod/tabs/index.js +8 -6
- package/dist/mod/tabs/index.js.map +1 -1
- package/dist/page/desktop/index.d.ts +3 -3
- package/dist/page/desktop/index.js +228 -801
- package/dist/page/desktop/index.js.map +1 -1
- package/dist/page/index.d.ts +7 -7
- package/dist/page/index.js +12 -12
- package/dist/page/index.js.map +1 -1
- package/dist/page/mobile/index.d.ts +2 -2
- package/dist/page/mobile/index.js +14 -14
- package/dist/page/mobile/index.js.map +1 -1
- package/dist/worker/hubworker.js +1 -1
- package/dist/worker/hubworker.js.map +1 -1
- package/package.json +6 -6
- package/dist/index-B2HHS23A.d.ts +0 -20
- package/dist/index-BQcJsVJ-.d.ts +0 -10
- package/dist/index-Bf_lg-oZ.d.ts +0 -339
- package/dist/index-ChdqOPJq.d.ts +0 -15
- package/dist/index-CzsSwSvp.d.ts +0 -21
- package/dist/index-D3tu8t6p.d.ts +0 -28
- package/dist/index-DQt71MNx.d.ts +0 -31
- package/dist/index-DZdXvqxA.d.ts +0 -10
- package/dist/index-DcvauYN8.d.ts +0 -14
- package/dist/index-Pd7FTiEW.d.ts +0 -32
- package/dist/index-QRbamarh.d.ts +0 -8
- package/dist/mod/global/index.d.ts +0 -57
- package/dist/mod/global/index.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/mod/global.ts","../../../src/page/index.ts","../../../src/mod/built-in/cover/index.ts","../../../src/mod/modal/index.ts","../../../src/mod/dialog/index.ts","../../../src/lib/utility.ts","../../../src/svchub/hwlink/template.ts","../../../src/svchub/api/agency/agcy.ts","../../../src/svchub/api/agency/dept.ts","../../../src/svchub/api/account/index.ts","../../../src/svchub/hwlink/device.ts","../../../src/svchub/hwlink/index.ts"],"sourcesContent":["/* global */\n/*------------------------------------------------------------*/\nexport type GbVar = {\n UNIX_TIME: number;\n app: appType;\n api: apiType;\n hub: hubType;\n hwl: hwlType;\n user: userType;\n};\ntype appType = {\n UUID: string;\n NAME: string;\n VERSION: string;\n RELEASE: string;\n};\ntype apiType = {\n URL: string;\n TOKEN: string;\n HEADERS?: Headers;\n};\ntype hubType = {\n LOGIN: string;\n OAUTH: string;\n API: string;\n WSS: string;\n UUID: string;\n TASK?: Worker;\n};\ntype hwlType = {\n HOST: string;\n FILE: string;\n};\ntype userType = {\n ACCT: number;\n ACTYPE: number;\n ACROLE: number;\n ACNAME: string;\n PICTURE: string;\n AGCY: number;\n DVSN: number;\n SECT: number;\n DEPT: string;\n AGCY_NAME: string;\n DVSN_NAME: string;\n SECT_NAME: string;\n};\n/*------------------------------------------------------------*/\nexport const gbvar: GbVar = {\n UNIX_TIME: 0,\n app: {\n UUID: '',\n NAME: '',\n VERSION: '',\n RELEASE: '',\n },\n api: {\n URL: '',\n TOKEN: '',\n },\n hub: {\n LOGIN: 'https://wkrh.info/oauth/v1/authorize',\n OAUTH: 'https://wkrh.info:8850/oauth/v1',\n API: 'https://wkrh.info:8850/api/v1',\n WSS: 'wss://wkrh.info:8855/ws',\n UUID: '',\n },\n hwl: {\n HOST: 'ws://localhost:8844/ws',\n FILE: 'https://wkrh.info/app/hwlink/hwlink_setup.exe',\n },\n user: {\n ACCT: 0,\n ACTYPE: 0,\n ACROLE: 0,\n ACNAME: '',\n PICTURE: '',\n AGCY: 0,\n DVSN: 0,\n SECT: 0,\n DEPT: '0,0',\n AGCY_NAME: '',\n DVSN_NAME: '',\n SECT_NAME: '',\n }\n};\n/*------------------------------------------------------------*/\nimport { version } from '../../package.json';\nexport const info = () => `sdk ${version}`;\n/*------------------------------------------------------------*/\ntype InitParams = {\n svcWorker?: string,\n webNotify?: boolean,\n wakeLock?: boolean,\n btnToTop?: boolean,\n hideTabbar?: boolean,\n};\nexport const init = (params?: InitParams) => {\n if (params?.svcWorker) svcWorker(params.svcWorker);\n if (params?.webNotify) webNotify();\n if (params?.wakeLock) wakeLock();\n if (params?.btnToTop) btnToTop();\n if (params?.hideTabbar) hideTabbar();\n};\n/*------------------------------------------------------------*/\nconst svcWorker = (worker: string) => {\n if (!('serviceWorker' in navigator)) return;\n navigator.serviceWorker.register(worker, {\n type: 'module'\n }).catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst webNotify = () => {\n if (!('Notification' in window)) return;\n Notification.requestPermission()\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst wakeLock = () => {\n if (document.hidden) return;\n navigator.wakeLock.request('screen')\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst hideTabbar = () => {\n const winHeight = window.innerHeight;\n window.visualViewport?.addEventListener('resize', () => {\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n if (!tabbar) return;\n if (winHeight != window.innerHeight) {\n tabbar.classList.add('hide');\n } else {\n tabbar.classList.remove('hide');\n }\n });\n};\n/*------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst btnToTop = () => {\n if (!app) return;\n // create item\n const totop = document.createElement('div');\n totop.id = 'totop';\n totop.innerHTML = /* html */ `\n <button id=\"btn-totop\" class=\"circle purple\" shadow=\"true\"\n title=\"กลับด้านบน\"></button>\n `;\n document.body.appendChild(totop);\n // add event\n totop.querySelector<HTMLButtonElement>('#btn-totop')!.onclick = () => {\n app.scrollTo({ top: 0, behavior: 'smooth' });\n };\n app.addEventListener('scroll', () => {\n if (app.scrollTop > 1000) {\n totop.style.display = 'block';\n if (app.classList.contains('tabbar')) {\n app.style.paddingBottom = '116px';\n } else {\n app.style.paddingBottom = '60px';\n }\n } else {\n totop.style.display = '';\n app.style.paddingBottom = '';\n }\n // tabs mobile shadow\n const tabsMobile = app.querySelector<HTMLElement>('.slim-tabs.mobile .tabs-header');\n if (!tabsMobile) return;\n if (app.scrollTop > 10) {\n tabsMobile.style.boxShadow = `rgba(0, 0, 0, 0.16) 0px 1px 4px`;\n } else {\n tabsMobile.style.boxShadow = '';\n }\n });\n};\n/*------------------------------------------------------------*/","/* page */\n/*--------------------------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst pageSpin: string = /*html*/ `\n<div class=\"lds-spinner\">\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n</div>\n`;\nconst smallSpin: string = `<div class=\"spinner s32\"></div>`;\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (size = 'default') => {\n if (!app) return;\n // page-loader\n if (!app.querySelector('#page-loader')) {\n const loader = document.createElement('div');\n loader.id = 'page-loader';\n loader.className = 'overlay center';\n loader.innerHTML = size == 'default' ? pageSpin : smallSpin;\n app.appendChild(loader);\n }\n // app-content\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\nexport const Ready = (delay = 400) => {\n new Promise(r => setTimeout(r, delay)).then(() => {\n clearLoader(true);\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const Error = (err: Error) => {\n clearLoader(false);\n if (!app) return;\n // create\n const box = document.createElement('div');\n box.className = 'page-error';\n box.innerHTML = /*html*/ `\n <i class=\"icon red\"></i>\n <div class=\"topic\">✦ เกิดข้อผิดพลาด ✦</div>\n <div class=\"text\">${err}</div>\n `;\n app.prepend(box);\n throw err;\n};\n/*--------------------------------------------------------------------------------*/\nexport const NotFound = () => {\n if (!app) return;\n app.innerHTML = /*html*/ `\n <div class=\"page-not-found\">\n <h1>4<i class=\"fas fa-ghost\"></i>4</h1>\n <h2>Error 404 Page Not Found</h2>\n <p>Sorry, the page cannot be accessed</p>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const FullLoad = () => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-full-load\">\n <div class=\"spinner\"></div>\n <div class=\"text\">Slim<br>Loading</div>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const Inform = (params: {\n icon: string;\n msg: string;\n btnTxt: string;\n btnUrl: string;\n color?: string;\n}) => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-inform ${params.color}\">\n <div class=\"icon solid\">${params.icon}</div>\n <div class=\"msg\">${params.msg}</div>\n <button class=\"lg ${params.color}\" shadow=\"true\">\n ${params.btnTxt}\n </button>\n </div>\n `;\n const btn = app.querySelector<HTMLButtonElement>('button')!;\n btn.onclick = () => window.location.replace(params.btnUrl);\n};\n/*--------------------------------------------------------------------------------*/\n//export const Maintain = () => { };\n//export const Construct = () => { };\n/*--------------------------------------------------------------------------------*/\nconst clearNavbar = () => {\n const topbar = document.querySelector<HTMLElement>('#topbar');\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n const sidebar = document.querySelector<HTMLElement>('#sidebar');\n if (topbar) topbar.remove();\n if (tabbar) tabbar.remove();\n if (sidebar) sidebar.remove();\n if (app) app.className = '';\n};\nconst clearLoader = (showContent: boolean) => {\n if (!app) return;\n const loader = app.querySelector<HTMLElement>('#page-loader');\n if (loader) {\n loader.style.animation = 'fade-out 0.4s forwards';\n loader.onanimationend = () => loader.remove();\n }\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = showContent ? 'block' : 'none';\n};\n/*--------------------------------------------------------------------------------*/\n","/* cover */\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (\n cover: HTMLElement,\n state = false,\n align = 'top',\n hide = true,\n) => {\n const inner = cover.querySelectorAll<HTMLElement>('*');\n if (state) {\n cover.querySelector<HTMLElement>('.cover-loader')?.remove();\n cover.style.position = 'relative';\n if (hide) inner.forEach(el => el.style.visibility = 'hidden');\n // create loader\n const loader = document.createElement('div');\n loader.className = `cover-loader ${align}`;\n loader.innerHTML = `<div class=\"spinner s28\"></div>`;\n cover.appendChild(loader);\n } else {\n new Promise(r => setTimeout(r, 400)).then(() => {\n cover.querySelector<HTMLElement>('.cover-loader')?.remove();\n cover.style.position = '';\n inner.forEach(el => el.style.visibility = '');\n });\n }\n};\n/*--------------------------------------------------------------------------------*/\n// accordion\nexport const acdInit = () => {\n const acdItem = document.querySelectorAll<HTMLElement>('.acd-item');\n acdItem.forEach(elm => {\n const topic = elm.querySelector<HTMLElement>('.topic');\n const panel = elm.querySelector<HTMLElement>('.panel');\n if (topic) topic.onclick = () => {\n elm.classList.toggle('active');\n if (!panel) return;\n if (elm.classList.contains('active')) {\n panel.style.maxHeight = `${panel.scrollHeight}px`;\n } else {\n panel.style.maxHeight = '';\n }\n };\n });\n};\n/*--------------------------------------------------------------------------------*/\n","/* modal */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\nconst tmpBtnSave: string = /* html */ `\n <button class=\"solid green\" type=\"submit\">\n <i></i>บันทึก\n </button>\n`;\nconst tmpBtnCancel: string = /* html */ `\n <button class=\"solid gray\" type=\"button\" id=\"btn-cancel\">\n <i></i>ยกเลิก\n </button>\n`;\nconst tmpBtnClose: string = /* html */ `\n <button class=\"solid blue\" type=\"button\" id=\"btn-close\">\n <i></i>ปิดหน้า\n </button>\n`;\ntype ModalParams = {\n icon: string;\n title: string;\n body: string;\n width?: string;\n button?: {\n save?: boolean;\n cancel?: boolean;\n close?: boolean;\n align?: string;\n };\n target?: HTMLElement;\n};\n/*--------------------------------------------------------------------------------*/\nexport const Create = (params: ModalParams): HTMLElement => {\n const icon = params.icon ? params.icon : '';\n const title = params.title ? params.title : 'Modal Title';\n const body = params.body ? params.body : 'Modal Body';\n const width = params.width ? params.width : '100%';\n const align = params.button?.align ? params.button?.align : '';\n const doc = params.target ? params.target : app;\n // button\n let button = '';\n if (params.button?.cancel) button += tmpBtnCancel;\n if (params.button?.close) button += tmpBtnClose;\n if (params.button?.save) button += tmpBtnSave;\n // create\n const modal = document.createElement('div');\n modal.className = 'overlay slim-modal';\n modal.innerHTML = /*html*/ `\n <form>\n <div class=\"content\" style=\"width: ${width};\">\n <div class=\"header\">\n <i class=\"icon pad\">${icon}</i>${title}\n <button id=\"btn-exit\" type=\"button\"\n class=\"icon\"></button>\n </div>\n <div class=\"body\">${body}</div>\n <div class=\"footer ${align}\">${button}</div>\n <div class=\"loader\">\n <div class=\"spinner s28\"></div>\n </div>\n </div>\n </form>\n `;\n if (!doc) return modal;\n doc.appendChild(modal);\n if (width == 'auto') {\n const content = modal.querySelector<HTMLElement>('.content');\n if (content) content.style.maxWidth = `450px`;\n }\n // open modal\n window.location.hash = 'modal';\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.classList.add('modal-in');\n modal.classList.add('overlay-in');\n content.addEventListener('animationend', () => {\n if (content.classList.contains('modal-in')) {\n content.classList.remove('modal-in');\n modal.classList.remove('overlay-in');\n }\n });\n // hash change\n const hashChange = () => {\n const hash = (window.location.hash).replaceAll('#', '');\n if (hash != 'modal') done();\n };\n const done = () => {\n destroy(modal);\n if (window.location.hash == '#modal') history.back();\n window.removeEventListener('hashchange', hashChange);\n };\n window.addEventListener('hashchange', hashChange);\n // button\n const btnExit = modal.querySelector<HTMLButtonElement>('#btn-exit');\n const btnCancel = modal.querySelector<HTMLButtonElement>('#btn-cancel');\n const btnClose = modal.querySelector<HTMLButtonElement>('#btn-close');\n if (btnExit) {\n btnExit.focus();\n btnExit.onclick = done;\n }\n if (btnCancel) btnCancel.onclick = done;\n if (btnClose) btnClose.onclick = done;\n return modal;\n};\n/*--------------------------------------------------------------------------------*/\nexport const Close = (modal: HTMLElement) => new Promise<void>((resolve) => {\n modal.querySelector<HTMLButtonElement>('#btn-exit')!.click();\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.addEventListener('animationend', () => resolve());\n});\nconst destroy = (modal: HTMLElement) => {\n const content = modal.querySelector<HTMLElement>('.content')!;\n content.classList.add('modal-out');\n modal.classList.add('overlay-out');\n content.addEventListener('animationend', () => {\n if (content.classList.contains('modal-out')) {\n modal.style.display = 'none';\n modal.remove();\n }\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const Loading = (modal: HTMLElement) => {\n const body = modal.querySelector<HTMLElement>('.body');\n const loader = modal.querySelector<HTMLElement>('.loader');\n if (body) body.style.visibility = 'hidden';\n if (loader) loader.style.display = 'flex';\n};\n/*--------------------------------------------------------------------------------*/\nexport const Ready = (modal: HTMLElement) => {\n const body = modal.querySelector<HTMLElement>('.body');\n const loader = modal.querySelector<HTMLElement>('.loader');\n if (body) body.style.visibility = 'visible';\n if (loader) loader.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\nexport const Hidden = (modal: HTMLElement) => {\n modal.style.display = 'none';\n};\nexport const Visible = (modal: HTMLElement) => {\n modal.style.display = 'block';\n};\n/*--------------------------------------------------------------------------------*/\n","/* dialog */\nconst app = document.querySelector<HTMLElement>('#app');\n/*--------------------------------------------------------------------------------*/\nexport const Confirm = (\n message: string,\n params?: {\n color?: string;\n target?: HTMLElement;\n }\n) => new Promise<boolean>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const color = params && params?.color ? params.color : 'green';\n // create\n const dialog = document.createElement('div');\n dialog.className = 'overlay slim-dialog';\n dialog.innerHTML = /*html*/ `\n <div class=\"confirm ${color}\">\n <div class=\"header\">\n <i class=\"icon solid\"></i> Slim Confirm\n </div>\n <div class=\"message\">${message}</div>\n <div class=\"footer\">\n <button class=\"lg gray left\" id=\"btn-no\">\n <i></i>ยกเลิก\n </button>\n <button class=\"lg ${color} right\" id=\"btn-yes\">\n <i></i>ตกลง\n </button>\n </div>\n </div>\n `;\n doc.appendChild(dialog);\n // button\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.focus();\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.onclick = () => {\n dialog.remove();\n resolve(true);\n };\n dialog.querySelector<HTMLButtonElement>('#btn-no')!.onclick = () => {\n dialog.remove();\n resolve(false);\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const Alert = (\n message: string,\n params?: {\n type?: string;\n target?: HTMLElement;\n }\n) => new Promise<void>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const type = params && params?.type ? params.type : 'success';\n // type\n let color = '';\n let icon = '';\n if (type == 'success') { color = 'green'; icon = ''; }\n if (type == 'failure') { color = 'red'; icon = ''; }\n if (type == 'warning') { color = 'orange'; icon = ''; }\n if (type == 'info') { color = 'blue'; icon = ''; }\n // create\n const dialog = document.createElement('div');\n dialog.className = 'overlay slim-dialog';\n dialog.innerHTML = /*html*/ `\n <div class=\"alert ${color}\">\n <div class=\"icon solid\">${icon}</div>\n <div class=\"message\">${message}</div>\n <div class=\"footer\">\n <button class=\"lg ${color}\" id=\"btn-yes\">ตกลง</button>\n </div>\n </div>\n `;\n doc.appendChild(dialog);\n // button\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.focus();\n dialog.querySelector<HTMLButtonElement>('#btn-yes')!.onclick = () => {\n dialog.remove();\n resolve();\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const Toast = (\n message: string,\n params?: {\n type?: string;\n target?: HTMLElement;\n }\n) => new Promise<void>((resolve) => {\n if (!app) return;\n const doc = params && params?.target ? params.target : app;\n const type = params && params?.type ? params.type : 'success';\n // type\n let color = '';\n let icon = '';\n if (type == 'success') { color = 'green'; icon = ''; }\n if (type == 'failure') { color = 'red'; icon = ''; }\n if (type == 'warning') { color = 'orange'; icon = ''; }\n if (type == 'info') { color = 'blue'; icon = ''; }\n // create\n const toast = document.createElement('div');\n toast.className = `slim-toast ${color}`;\n toast.innerHTML = /*html*/ `\n <i class=\"icon\">${icon}</i>\n <span class=\"text\">${message}</span>\n `;\n doc.appendChild(toast);\n // animation\n toast.classList.add('show');\n let count = 0;\n toast.onanimationend = () => {\n count++;\n if (count == 2) {\n toast.remove();\n resolve();\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\n","/* utility */\nexport const THAI_DIGIT = ['๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'];\n/*--------------------------------------------------------------------------------*/\nexport const thaiDigit = (input: number | string): string => {\n return input.toString()\n .replace(/\\d/g, (digit: string) => THAI_DIGIT[parseInt(digit)]);\n};\n/*--------------------------------------------------------------------------------*/\nexport const cidCheck = (cid: string): boolean => {\n if (!Number(cid)) return false;\n if (cid.substring(0, 1) == '0') return false;\n if (cid.length !== 13) return false;\n let sum = 0;\n for (let i = 0; i < 12; i++) {\n sum += parseFloat(cid.charAt(i)) * (13 - i);\n }\n return (11 - sum % 11) % 10 === parseFloat(cid.charAt(12));\n};\n/*--------------------------------------------------------------------------------*/\nexport const winPopup = (\n width: number,\n height: number,\n name: string,\n url: string,\n) => {\n const left = (screen.width - width) / 2;\n const top = (screen.height - height) / 2;\n let opt = `width=${width}, height=${height},`;\n opt += `left=${left}, top=${top}`;\n return window.open(url, name, opt);\n};\n/*--------------------------------------------------------------------------------*/\nexport const strCheck = (str: string): string => {\n let out = String(str);\n out = out.replaceAll(\"'\", \"\\\\'\");\n out = out.replaceAll('\"', '\\\\\"');\n out = out.trim();\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const zeroFill = (\n num: number,\n opts?: {\n min?: number;\n max?: number;\n char?: string;\n }\n): string => {\n const n = Number(num);\n const min = opts?.min ? Number(opts.min) : 0;\n const max = opts?.max ? Number(opts.max) : 0;\n const char = opts?.char || opts?.char == '' ? opts.char : '-';\n if (n > 0) {\n return n.toLocaleString(undefined, {\n minimumFractionDigits: min,\n maximumFractionDigits: max,\n });\n } else return char;\n};\n/*--------------------------------------------------------------------------------*/\nexport const numFormat = (num: number, fixed = 0): string => {\n const n = Number(num);\n const f = Number(fixed);\n let out: string = '';\n if (n >= 10 ** 3 && n < 10 ** 6) {\n out = (n / 1000).toFixed(f) + ' K';\n } else if (n >= 10 ** 6) {\n out = (n / 1000000).toFixed(f) + ' M';\n }\n return out;\n};\n/*--------------------------------------------------------------------------------*/\nexport const strFormat = (value: string, pattern: string): string => {\n let i = 0;\n const v = value.toString();\n return pattern.replace(/#/g, () => {\n const out = v[i] ? v[i] : '#';\n i++;\n return out;\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const toBase64 = (file: File) => new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result as string);\n reader.onerror = err => reject(err);\n});\n/*--------------------------------------------------------------------------------*/\nexport type JwtPack = {\n iss: string;\n iat: number;\n exp: number;\n agcy: number;\n acct: number;\n type: number;\n role: number;\n};\nexport const jwtParse = (token: string): JwtPack | null => {\n try { return JSON.parse(atob(token.split('.')[1])); }\n catch { return null; }\n};\n/*--------------------------------------------------------------------------------*/\n","/* template */\nexport const template: string = /*html*/ `\n<div id=\"page-svchub\" class=\"cover\">\n <div class=\"cover-bar\">Hardware Link</div>\n <div class=\"cover-body border\">\n <!-- svcinfo -->\n <div id=\"svcinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">HwLink</div>\n <div class=\"text\" id=\"hwlink\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">AutoUp</div>\n <div class=\"text\" id=\"autoup\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CSUUID</div>\n <div class=\"text\" id=\"csuuid\">:</div>\n </div>\n </div>\n <hr>\n <!-- device -->\n <div id=\"device\">\n <div class=\"box-tb\">\n <div class=\"topic\">หน่วยงาน</div>\n <div class=\"text\" id=\"agcy\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">กลุ่มงาน</div>\n <div class=\"text\" id=\"dept\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">ชื่ออุปกรณ์</div>\n <div class=\"text\" id=\"dname\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">เลขทรัพย์สิน</div>\n <div class=\"text\" id=\"assno\">:</div>\n </div>\n <button id=\"btn-edit\" class=\"circle sm blue\"\n shadow=\"true\"></button>\n </div>\n <hr>\n <!-- hwinfo -->\n <div id=\"hwinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">Hostname</div>\n <div class=\"text\" id=\"host\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Platform</div>\n <div class=\"text\" id=\"os\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CpuModel</div>\n <div class=\"text\" id=\"cpu\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Memory</div>\n <div class=\"text\" id=\"mem\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Uptime</div>\n <div class=\"text\" id=\"uptime\">:</div>\n </div>\n </div>\n <hr>\n <!-- x -->\n <div id=\"\">\n <div class=\"box-tb\">\n <div class=\"topic\">SmartCard</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Biometric</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n </div>\n </div>\n</div>\n<style>\n #page-svchub {\n margin: auto;\n max-width: 600px;\n min-width: 480px;\n line-height: 1.5;\n }\n #page-svchub .topic {\n float: left;\n width: 100px;\n font-weight: 600;\n }\n #page-svchub .text {\n float: left;\n width: calc(100% - 100px);\n }\n #page-svchub #device {\n position: relative;\n }\n #page-svchub #btn-edit {\n position: absolute;\n top: 0;\n right: 0;\n }\n</style>\n`;\n\nexport const frmDevice: string = /*html*/ `\n<div id=\"frm-device\" class=\"cover grid\">\n <div class=\"input-box span\">\n <select id=\"inp-agcy\" required></select>\n <div class=\"label\">หน่วยงาน *</div>\n </div>\n <div class=\"input-box span\">\n <select id=\"inp-dept\"></select>\n <div class=\"label\">กลุ่มงาน/ส่วนงาน</div>\n </div>\n <div class=\"input-box span\">\n <input type=\"text\" id=\"inp-name\" maxlength=\"100\" required>\n <div class=\"label\">ชื่ออุปกรณ์ *</div>\n </div>\n</div>\n<style>\n #frm-device {\n gap: 5px;\n }\n #frm-device .dvsn {\n font-weight: 600;\n }\n #frm-device .sect {\n font-style: italic;\n }\n</style>\n`;","/* agcy */\nimport type { ApiRsp } from '..';\nimport { gbvar } from '../../../mod/global';\n/*--------------------------------------------------------------------------------*/\nexport const Read = (agcy?: number) => new Promise<ApiRsp>((resolve, reject) => {\n let url = `/agcy`;\n if (agcy) url = `/agcy/${agcy}`;\n // fetch\n fetch(gbvar.hub.API + url, {\n method: 'GET',\n headers: gbvar.api.HEADERS,\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Set = async (elm: HTMLSelectElement) => {\n elm.innerHTML = '<option value=\"\">- เลือก -</option>';\n await Read().then(resp => {\n const data = resp.data as AgcyPack[];\n for (const val of data) {\n const name = val.short ? val.short : val.name;\n const opt = document.createElement('option');\n opt.value = `${val.id}`;\n opt.text = name;\n elm.appendChild(opt);\n }\n }).catch(err => console.error(err));\n};\n/*--------------------------------------------------------------------------------*/\nexport type AgcyPack = {\n id: number;\n code: string;\n init_en: string;\n init_th: string;\n name: string;\n short: string;\n status: number;\n};","/* dept */\nimport type { ApiRsp } from '..';\nimport { gbvar } from '../../../mod/global';\n/*--------------------------------------------------------------------------------*/\nexport const Read = (agcy: number) => new Promise<ApiRsp>((resolve, reject) => {\n const url = `/agcy/${agcy}/dept`;\n // fetch\n fetch(gbvar.hub.API + url, {\n method: 'GET',\n headers: gbvar.api.HEADERS,\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Set = async (agcy: number, elm: HTMLSelectElement) => {\n elm.innerHTML = '<option value=\"\">- เลือก -</option>';\n await Read(agcy).then(resp => {\n const data = resp.data as DeptPack[];\n for (const val of data) {\n const opt = document.createElement('option');\n opt.value = `${val.dvsn},${val.sect}`;\n if (val.sect == 0) {\n opt.text = `${val.name}`;\n opt.style.fontWeight = '600';\n } else {\n opt.text = `- ${val.name}`;\n opt.style.fontStyle = 'italic';\n }\n elm.appendChild(opt);\n }\n }).catch(err => console.error(err));\n};\n/*--------------------------------------------------------------------------------*/\nexport type DeptPack = {\n dvsn: number;\n sect: number;\n name: string;\n status: number;\n};","/* account */\nimport type { ApiRsp } from '..';\nimport { gbvar } from '../../../mod/global';\n/*--------------------------------------------------------------------------------*/\n// access\nexport * as access from './access';\nexport type { AccsPack, AccsProfile } from './access';\n/*--------------------------------------------------------------------------------*/\nexport const Read = (\n agcy: number,\n acct?: number,\n params?: {\n dvsn?: number;\n sect?: number;\n actype?: number;\n acrole?: number;\n status?: number;\n }\n) => new Promise<ApiRsp>((resolve, reject) => {\n const status = params && params.status ? params.status : 1;\n let query = `?status=${status}`;\n if (params) {\n const dvsn = params.dvsn ? params.dvsn : 0;\n const sect = params.sect ? params.sect : 0;\n const actype = params.actype ? params.actype : 0;\n const acrole = params.acrole ? params.acrole : 0;\n if (dvsn) query += `&dvsn=${dvsn}`;\n if (sect) query += `§=${sect}`;\n if (actype) query += `&actype=${actype}`;\n if (acrole) query += `&acrole=${acrole}`;\n }\n let url = `/agcy/${agcy}/acct${query}`;\n if (acct) url = `/agcy/${agcy}/acct/${acct}`;\n // fetch\n fetch(gbvar.hub.API + url, {\n method: 'GET',\n headers: gbvar.api.HEADERS,\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Create = (\n agcy: number,\n params: unknown,\n) => new Promise<ApiRsp>((resolve, reject) => {\n const url = `/agcy/${agcy}/acct`;\n fetch(gbvar.hub.API + url, {\n method: 'POST',\n headers: gbvar.api.HEADERS,\n body: JSON.stringify(params),\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\nexport const Update = (\n agcy: number,\n acct: number,\n params: unknown,\n) => new Promise<ApiRsp>((resolve, reject) => {\n const url = `/agcy/${agcy}/acct/${acct}`;\n fetch(gbvar.hub.API + url, {\n method: 'PUT',\n headers: gbvar.api.HEADERS,\n body: JSON.stringify(params),\n }).then(resp => {\n if (!resp.ok) throw resp;\n return resp.json();\n }).then(json => {\n resolve(json);\n }).catch(err => reject(err));\n});\n/*--------------------------------------------------------------------------------*/\n/*\nexport const Delete = (\n agcy: number,\n acct: number,\n) => new Promise<ApiRsp>((resolve, reject) => { });\n/*--------------------------------------------------------------------------------*/\nexport type AcctPack = {\n agcy: number;\n dvsn: number;\n sect: number;\n acct: number;\n actype: number;\n acrole: number;\n status: number;\n picture: string;\n profile: unknown;\n\n agcy_name: string;\n dvsn_name: string;\n sect_name: string;\n};\nexport type TypeHuman = {\n id: number;\n hmtype: number;\n hmposn: number;\n hmrank: number;\n tname: string;\n fname: string;\n lname: string;\n};\nexport type TypeDevice = {\n id: number;\n dvtype: number;\n assets: number;\n name: string;\n};\nexport type TypeVendor = {\n id: number;\n vdtype: number;\n vdno: string;\n name: string;\n bankno: string;\n bkacct: string;\n bkname: string;\n};","/* device */\n/*--------------------------------------------------------------------------------*/\nimport * as modModal from '../../mod/modal';\nimport * as modDialog from '../../mod/dialog';\nimport { strCheck } from '../../lib/utility';\nimport { frmDevice } from './template';\n// apihub\nimport { Set as setAgcy } from '../api/agency/agcy';\nimport { Set as setDept } from '../api/agency/dept';\nimport * as apiAcct from '../api/account';\nimport type { AcctPack, TypeDevice } from '../api/account';\n/*--------------------------------------------------------------------------------*/\nexport const Create = (csid: string) => new Promise<void>((resolve, reject) => {\n // create modal\n const modal = modModal.Create({\n title: 'เพิ่มคอมพิวเตอร์',\n icon: '',\n width: '400px',\n body: frmDevice,\n button: { save: true, cancel: true },\n });\n // input\n const inpAgcy = modal.querySelector<HTMLSelectElement>('#inp-agcy')!;\n const inpDept = modal.querySelector<HTMLSelectElement>('#inp-dept')!;\n const inpName = modal.querySelector<HTMLInputElement>('#inp-name')!;\n inpAgcy.onchange = () => {\n setDept(Number(inpAgcy.value), inpDept);\n };\n (async () => {\n await setAgcy(inpAgcy);\n await setDept(Number(inpAgcy.value), inpDept);\n // modal ready\n modModal.Ready(modal);\n })();\n // submit\n const form = modal.querySelector<HTMLFormElement>('form');\n if (form) form.onsubmit = async (e) => {\n e.preventDefault();\n modModal.Hidden(modal);\n const res = await modDialog.Confirm('ยืนยัน.! การบันทึกข้อมูล');\n modModal.Visible(modal);\n if (res) {\n modModal.Loading(modal);\n const newAgcy = Number(inpAgcy.value);\n const [dvsn, sect] = (inpDept.value).split(',');\n const params = {\n agcy: newAgcy,\n dvsn: dvsn ? Number(dvsn) : 0,\n sect: sect ? Number(sect) : 0,\n actype: 2, // อุปกรณ์\n acrole: 8, // คอมพิวเตอร์\n acuuid: strCheck(csid),\n profile: {\n dvtype: 1, // คอมพิวเตอร์\n name: strCheck(inpName.value),\n }\n };\n await apiAcct.Create(newAgcy, params).then(() => {\n modModal.Close(modal);\n modDialog.Toast('บันทึกข้อมูล สำเร็จ.!', { type: 'success' });\n resolve();\n }).catch((err) => {\n modModal.Close(modal);\n modDialog.Alert('เกิดข้อผิดพลาด...!', { type: 'failure' });\n reject(err);\n });\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const Update = (\n agcy: number,\n acct: number,\n csid: string,\n) => new Promise<void>((resolve, reject) => {\n // create modal\n const modal = modModal.Create({\n title: 'แก้ไขรายละเอียด',\n icon: '',\n width: '400px',\n body: frmDevice,\n button: { save: true, cancel: true },\n });\n // input\n const inpAgcy = modal.querySelector<HTMLSelectElement>('#inp-agcy')!;\n const inpDept = modal.querySelector<HTMLSelectElement>('#inp-dept')!;\n const inpName = modal.querySelector<HTMLInputElement>('#inp-name')!;\n inpAgcy.onchange = () => {\n setDept(Number(inpAgcy.value), inpDept);\n };\n // read\n (async () => {\n await apiAcct.Read(agcy, acct).then(async (resp) => {\n const data = resp.data as AcctPack;\n const profile = data.profile as TypeDevice;\n await setAgcy(inpAgcy);\n await setDept(data.agcy, inpDept);\n inpAgcy.value = String(data.agcy);\n inpDept.value = data.dvsn ? `${data.dvsn},${data.sect}` : '';\n inpName.value = profile.name;\n }).catch(err => console.error(err));\n // modal ready\n modModal.Ready(modal);\n })();\n // submit\n const form = modal.querySelector<HTMLFormElement>('form');\n if (form) form.onsubmit = async (e) => {\n e.preventDefault();\n modModal.Hidden(modal);\n const res = await modDialog.Confirm('ยืนยัน.! การบันทึกข้อมูล');\n modModal.Visible(modal);\n if (res) {\n modModal.Loading(modal);\n const newAgcy = Number(inpAgcy.value);\n const [dvsn, sect] = (inpDept.value).split(',');\n const params = {\n agcy: newAgcy,\n dvsn: dvsn ? Number(dvsn) : 0,\n sect: sect ? Number(sect) : 0,\n actype: 2, // อุปกรณ์\n acrole: 8, // คอมพิวเตอร์\n acuuid: strCheck(csid),\n profile: {\n dvtype: 1, // คอมพิวเตอร์\n name: strCheck(inpName.value),\n }\n };\n await apiAcct.Update(agcy, acct, params).then(() => {\n modModal.Close(modal);\n modDialog.Toast('บันทึกข้อมูล สำเร็จ.!', { type: 'success' });\n resolve();\n }).catch((err) => {\n modModal.Close(modal);\n modDialog.Alert('เกิดข้อผิดพลาด...!', { type: 'failure' });\n reject(err);\n });\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\nexport const PwdChk = () => new Promise<boolean>((resolve) => {\n // create modal\n const modal = modModal.Create({\n title: 'กรอกรหัสผ่าน',\n icon: '',\n width: '230px',\n body: /*html*/ `\n <div class=\"cover\">\n <input type=\"password\" id=\"inp-pass\"\n value=\"admin@wkr\" style=\"width: 100%;\">\n </div>\n `,\n button: { save: true, cancel: true, align: 'center' },\n });\n // modal ready\n modModal.Ready(modal);\n // input\n const inpPass = modal.querySelector<HTMLInputElement>('#inp-pass');\n inpPass?.focus();\n // submit\n const form = modal.querySelector<HTMLFormElement>('form');\n if (form) form.onsubmit = async (e) => {\n e.preventDefault();\n const pass = (inpPass?.value)?.trim();\n if (pass === 'admin@wkr') {\n await modModal.Close(modal);\n resolve(true);\n } else {\n await modDialog.Alert('รหัสผ่าน.! ไม่ถูกต้อง', { type: 'failure' });\n inpPass?.focus();\n }\n };\n});\n/*--------------------------------------------------------------------------------*/\n","/* hwlink */\n/*--------------------------------------------------------------------------------*/\nimport { gbvar } from '../../mod/global';\nimport { Loading, Ready } from '../../page';\nimport * as cover from '../../mod/built-in/cover';\nimport * as device from './device';\nimport { template } from './template';\nconst app = document.querySelector<HTMLElement>('#app');\nlet AGCY: number;\nlet ACCT: number;\nlet CSID: string;\nlet isREADY: boolean;\nlet WSSVC: WebSocket;\nlet boxDv: HTMLElement;\n/*--------------------------------------------------------------------------------*/\nexport const HwLink = () => {\n if (!app) return;\n // template\n const content = document.createElement('div');\n content.id = 'app-content';\n content.innerHTML = template;\n app.classList.add('full-page');\n app.appendChild(content);\n boxDv = app.querySelector<HTMLElement>('#device')!;\n // btn-edit\n const btnEdit = app.querySelector<HTMLButtonElement>('#btn-edit');\n if (btnEdit) btnEdit.onclick = async () => {\n if (await device.PwdChk()) {\n if (AGCY > 0 && ACCT > 0 && CSID != '') {\n device.Update(AGCY, ACCT, CSID).then(() => {\n cover.Loading(boxDv, true);\n WSSVC.send('{\"head\": \"KEYRST\"}');\n }).catch(err => console.error(err));\n } else {\n device.Create(CSID).then(() => {\n cover.Loading(boxDv, true);\n WSSVC.send('{\"head\": \"KEYRST\"}');\n }).catch(err => console.error(err));\n }\n }\n };\n // wait socket\n Loading();\n AGCY = 0;\n ACCT = 0;\n CSID = '';\n isREADY = false;\n // hide btn if empty token\n if (!gbvar.api.TOKEN) {\n const btn = app.querySelectorAll<HTMLButtonElement>('button');\n btn.forEach(elm => elm.style.display = 'none');\n }\n wsSvc();\n};\n/*--------------------------------------------------------------------------------*/\nconst wsSvc = () => {\n WSSVC = new WebSocket(gbvar.hwl.HOST);\n WSSVC.onopen = () => {\n hwinfo();\n dvinfo();\n T_hwinfo = setInterval(hwinfo, 1000 * 10);\n };\n WSSVC.onclose = () => {\n clearInterval(T_hwinfo);\n setTimeout(wsSvc, 1000 * 10);\n };\n WSSVC.onmessage = (e) => {\n const resp = JSON.parse(e.data);\n const head = resp.head ? resp.head : '';\n const data = resp.data ? resp.data : '';\n if (head == 'CSUUID') CSID = data;\n if (head == 'HWINFO') setHwInfo(data);\n if (head == 'DVINFO') {\n if (!isREADY) {\n isREADY = true;\n Ready();\n }\n setDvInfo(data);\n cover.Loading(boxDv, false);\n }\n };\n let T_hwinfo: NodeJS.Timeout;\n const hwinfo = () => WSSVC.send('{\"head\": \"HWINFO\"}');\n const dvinfo = () => WSSVC.send('{\"head\": \"DVINFO\"}');\n};\n/*--------------------------------------------------------------------------------*/\nconst setHwInfo = (data: {\n csuuid: string;\n hostname: string;\n platform: string;\n uptime: number;\n svc: {\n hwlink: string;\n autoup: string;\n };\n cpu: {\n model: string;\n percent: number;\n };\n mem: {\n total: number;\n used: number;\n percent: number;\n };\n}) => {\n if (!app) return;\n // svcinfo\n const svc = data.svc;\n app.querySelector<HTMLElement>('#hwlink')!.innerText = `: ${svc.hwlink}`;\n app.querySelector<HTMLElement>('#autoup')!.innerText = `: ${svc.autoup}`;\n app.querySelector<HTMLElement>('#csuuid')!.innerText = `: ${data.csuuid}`;\n // hwinfo\n const cpu = data.cpu;\n const mem = data.mem;\n const hwinfo = app.querySelector<HTMLElement>('#hwinfo')!;\n const uptime = Number(data.uptime);\n const hh = Math.floor(uptime / 3600);\n const mm = Math.floor((uptime % 3600) / 60);\n const memUsed = (Number(mem.used) / 1024 / 1024 / 1024).toFixed(1);\n const memTotal = (Number(mem.total) / 1024 / 1024 / 1024).toFixed(1);\n const mem_text = `${memUsed}/${memTotal} GB (${mem.percent}%)`;\n hwinfo.querySelector<HTMLElement>('#host')!.innerText = `: ${data.hostname}`;\n hwinfo.querySelector<HTMLElement>('#os')!.innerText = `: ${data.platform}`;\n hwinfo.querySelector<HTMLElement>('#cpu')!.innerText = `: ${cpu.model}`;\n app.querySelector<HTMLElement>('#mem')!.innerText = `: ${mem_text}`;\n app.querySelector<HTMLElement>('#uptime')!.innerText = `: ${hh} h ${mm} m`;\n};\n/*--------------------------------------------------------------------------------*/\nconst setDvInfo = (data: {\n agcy: number;\n dvsn: number;\n sect: number;\n acct: number;\n acname: string;\n agcy_name: string;\n dvsn_name: string;\n sect_name: string;\n}) => {\n if (!app || !data.acct || Number(data.acct) == 0) return;\n AGCY = Number(data.agcy);\n ACCT = Number(data.acct);\n let dept = data.dvsn_name;\n if (Number(data.sect) > 0) {\n dept += ` - ${data.sect_name}`;\n }\n app.querySelector<HTMLElement>('#agcy')!.innerText = `: ${data.agcy_name}`;\n app.querySelector<HTMLElement>('#dept')!.innerText = `: ${dept}`;\n app.querySelector<HTMLElement>('#dname')!.innerText = `: ${data.acname}`;\n};\n/*--------------------------------------------------------------------------------*/\n"],"mappings":"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","names":["app","app","Loading","app","content","Loading","Ready","app","Read","Set","Read","Create","Create","Set","Ready","Loading","Update","Read","app","Update","Loading","Create"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/config/global.ts","../../../src/config/index.ts","../../../src/page/index.ts","../../../src/svchub/hwlink/template.ts","../../../src/svchub/hwlink/index.ts"],"sourcesContent":["/* global */\n/*------------------------------------------------------------*/\nimport { version } from '../../package.json';\nexport const info = () => `sdk ${version}`;\n/*------------------------------------------------------------*/\ntype InitParams = {\n svcWorker?: string,\n webNotify?: boolean,\n wakeLock?: boolean,\n btnToTop?: boolean,\n hideTabbar?: boolean,\n};\nexport const init = (params?: InitParams) => {\n if (params?.svcWorker) svcWorker(params.svcWorker);\n if (params?.webNotify) webNotify();\n if (params?.wakeLock) wakeLock();\n if (params?.btnToTop) btnToTop();\n if (params?.hideTabbar) hideTabbar();\n};\n/*------------------------------------------------------------*/\nconst svcWorker = (worker: string) => {\n if (!('serviceWorker' in navigator)) return;\n navigator.serviceWorker.register(worker, {\n type: 'module'\n }).catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst webNotify = () => {\n if (!('Notification' in window)) return;\n Notification.requestPermission()\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst wakeLock = () => {\n if (document.hidden) return;\n navigator.wakeLock.request('screen')\n .catch(err => console.warn(err));\n};\n/*------------------------------------------------------------*/\nconst hideTabbar = () => {\n const winHeight = window.innerHeight;\n window.visualViewport?.addEventListener('resize', () => {\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n if (!tabbar) return;\n if (winHeight != window.innerHeight) {\n tabbar.classList.add('hide');\n } else {\n tabbar.classList.remove('hide');\n }\n });\n};\n/*------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst btnToTop = () => {\n if (!app) return;\n // create item\n const totop = document.createElement('div');\n totop.id = 'totop';\n totop.innerHTML = /* html */ `\n <button id=\"btn-totop\" class=\"circle purple\" shadow=\"true\"\n title=\"กลับด้านบน\"></button>\n `;\n document.body.appendChild(totop);\n // add event\n totop.querySelector<HTMLButtonElement>('#btn-totop')!.onclick = () => {\n app.scrollTo({ top: 0, behavior: 'smooth' });\n };\n app.addEventListener('scroll', () => {\n if (app.scrollTop > 1000) {\n totop.style.display = 'block';\n if (app.classList.contains('tabbar')) {\n app.style.paddingBottom = '116px';\n } else {\n app.style.paddingBottom = '60px';\n }\n } else {\n totop.style.display = '';\n app.style.paddingBottom = '';\n }\n // tabs mobile shadow\n const tabsMobile = app.querySelector<HTMLElement>('.slim-tabs.mobile .tabs-header');\n if (!tabsMobile) return;\n if (app.scrollTop > 10) {\n tabsMobile.style.boxShadow = `rgba(0, 0, 0, 0.16) 0px 1px 4px`;\n } else {\n tabsMobile.style.boxShadow = '';\n }\n });\n};\n/*------------------------------------------------------------*/","/* config */\nexport { init, info } from './global';\n/*------------------------------------------------------------*/\nexport const cfg: Config = {\n UNIX_TIME: 0,\n app: {\n UUID: '',\n NAME: '',\n SECRET: '',\n VERSION: '',\n RELEASE: '',\n CALLBACK: '',\n },\n api: {\n URL: '',\n TOKEN: '',\n },\n hub: {\n LOGIN: 'https://wkrh.info/oauth/v1/authorize',\n OAUTH: 'https://wkrh.info:8850/oauth/v1',\n API: 'https://wkrh.info:8850/api/v1',\n WSS: 'wss://wkrh.info:8855/ws',\n UUID: '',\n },\n hwl: {\n HOST: 'ws://localhost:8844/ws',\n FILE: 'https://wkrh.info/app/hwlink/hwlink_setup.exe',\n },\n user: {\n sub: 0,\n name: '',\n utyp: '',\n unit: '',\n unit_id: 0,\n role_id: 0,\n metadata: {\n emp_type: '',\n emp_level: '',\n position: '',\n },\n picture: '',\n }\n};\n/*------------------------------------------------------------*/\ntype Config = {\n UNIX_TIME: number;\n app: AppCfg;\n api: ApiCfg;\n hub: HubCfg;\n hwl: HwlCfg;\n user: UserCfg;\n};\ntype AppCfg = {\n UUID: string;\n NAME: string;\n SECRET: string;\n VERSION: string;\n RELEASE: string;\n CALLBACK: string;\n};\ntype ApiCfg = {\n URL: string;\n TOKEN: string;\n HEADERS?: Headers;\n};\ntype HubCfg = {\n LOGIN: string;\n OAUTH: string;\n API: string;\n WSS: string;\n UUID: string;\n TASK?: Worker;\n};\ntype HwlCfg = {\n HOST: string;\n FILE: string;\n};\ntype UserCfg = {\n sub: number;\n name: string;\n utyp: string;\n unit: string;\n unit_id: number;\n role_id: number;\n metadata: {\n emp_type: string;\n emp_level: string;\n position: string;\n };\n picture: string;\n};","/* page */\n/*--------------------------------------------------------------------------------*/\nconst app = document.querySelector<HTMLElement>('#app');\nconst pageSpin: string = /*html*/ `\n<div class=\"lds-spinner\">\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n <div></div><div></div><div></div><div></div>\n</div>\n`;\nconst smallSpin: string = `<div class=\"spinner s32\"></div>`;\n/*--------------------------------------------------------------------------------*/\nexport const loading = (size = 'default') => {\n if (!app) return;\n // page-loader\n if (!app.querySelector('#page-loader')) {\n const loader = document.createElement('div');\n loader.id = 'page-loader';\n loader.className = 'overlay center';\n loader.innerHTML = size == 'default' ? pageSpin : smallSpin;\n app.appendChild(loader);\n }\n // app-content\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = 'none';\n};\n/*--------------------------------------------------------------------------------*/\nexport const ready = (delay = 400) => {\n new Promise(r => setTimeout(r, delay)).then(() => {\n clearLoader(true);\n });\n};\n/*--------------------------------------------------------------------------------*/\nexport const error = (err: Error) => {\n clearLoader(false);\n if (!app) return;\n // create\n const box = document.createElement('div');\n box.className = 'page-error';\n box.innerHTML = /*html*/ `\n <i class=\"icon red\"></i>\n <div class=\"topic\">✦ เกิดข้อผิดพลาด ✦</div>\n <div class=\"text\">${err}</div>\n `;\n app.prepend(box);\n throw err;\n};\n/*--------------------------------------------------------------------------------*/\nexport const notFound = () => {\n if (!app) return;\n app.innerHTML = /*html*/ `\n <div class=\"page-not-found\">\n <h1>4<i class=\"fas fa-ghost\"></i>4</h1>\n <h2>Error 404 Page Not Found</h2>\n <p>Sorry, the page cannot be accessed</p>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const fullLoad = () => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-full-load\">\n <div class=\"spinner\"></div>\n <div class=\"text\">Slim<br>Loading</div>\n </div>\n `;\n};\n/*--------------------------------------------------------------------------------*/\nexport const inform = (params: {\n icon: string;\n msg: string;\n btnTxt: string;\n btnUrl: string;\n color?: string;\n}) => {\n clearNavbar();\n if (!app) return;\n app.classList.add('full-page');\n app.innerHTML = /*html*/ `\n <div class=\"page-inform ${params.color}\">\n <div class=\"icon solid\">${params.icon}</div>\n <div class=\"msg\">${params.msg}</div>\n <button class=\"lg ${params.color}\" shadow=\"true\">\n ${params.btnTxt}\n </button>\n </div>\n `;\n const btn = app.querySelector<HTMLButtonElement>('button')!;\n btn.onclick = () => window.location.replace(params.btnUrl);\n};\n/*--------------------------------------------------------------------------------*/\n//export const Maintain = () => { };\n//export const Construct = () => { };\n/*--------------------------------------------------------------------------------*/\nconst clearNavbar = () => {\n const topbar = document.querySelector<HTMLElement>('#topbar');\n const tabbar = document.querySelector<HTMLElement>('#tabbar');\n const sidebar = document.querySelector<HTMLElement>('#sidebar');\n if (topbar) topbar.remove();\n if (tabbar) tabbar.remove();\n if (sidebar) sidebar.remove();\n if (app) app.className = '';\n};\nconst clearLoader = (showContent: boolean) => {\n if (!app) return;\n const loader = app.querySelector<HTMLElement>('#page-loader');\n if (loader) {\n loader.style.animation = 'fade-out 0.4s forwards';\n loader.onanimationend = () => loader.remove();\n }\n const content = app.querySelector<HTMLElement>('#app-content');\n if (content) content.style.display = showContent ? 'block' : 'none';\n};\n/*--------------------------------------------------------------------------------*/\n","/* template */\nexport const template: string = /*html*/ `\n<div id=\"page-svchub\" class=\"cover\">\n <div class=\"cover-bar\">Hardware Link</div>\n <div class=\"cover-body border\">\n <!-- svcinfo -->\n <div id=\"svcinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">HwLink</div>\n <div class=\"text\" id=\"hwlink\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">AutoUp</div>\n <div class=\"text\" id=\"autoup\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CSUUID</div>\n <div class=\"text\" id=\"csuuid\">:</div>\n </div>\n </div>\n <hr>\n <!-- device -->\n <div id=\"device\">\n <div class=\"box-tb\">\n <div class=\"topic\">หน่วยงาน</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">กลุ่มงาน</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">ชื่ออุปกรณ์</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">เลขทรัพย์สิน</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <button id=\"btn-edit\" class=\"circle sm blue\"\n shadow=\"true\"></button>\n </div>\n <hr>\n <!-- hwinfo -->\n <div id=\"hwinfo\">\n <div class=\"box-tb\">\n <div class=\"topic\">Hostname</div>\n <div class=\"text\" id=\"host\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Platform</div>\n <div class=\"text\" id=\"os\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">CpuModel</div>\n <div class=\"text\" id=\"cpu\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Memory</div>\n <div class=\"text\" id=\"mem\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Uptime</div>\n <div class=\"text\" id=\"uptime\">:</div>\n </div>\n </div>\n <hr>\n <!-- x -->\n <div id=\"\">\n <div class=\"box-tb\">\n <div class=\"topic\">SmartCard</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n <div class=\"box-tb\">\n <div class=\"topic\">Biometric</div>\n <div class=\"text\" id=\"\">:</div>\n </div>\n </div>\n </div>\n</div>\n<style>\n #page-svchub {\n margin: auto;\n max-width: 600px;\n min-width: 480px;\n line-height: 1.5;\n }\n #page-svchub .topic {\n float: left;\n width: 100px;\n font-weight: 600;\n }\n #page-svchub .text {\n float: left;\n width: calc(100% - 100px);\n }\n #page-svchub #device {\n position: relative;\n }\n #page-svchub #btn-edit {\n position: absolute;\n top: 0;\n right: 0;\n }\n</style>\n`;","/* hwlink */\n/*--------------------------------------------------------------------------------*/\nimport { cfg } from '../../config';\nimport { loading, ready } from '../../page';\nimport { template } from './template';\nconst app = document.querySelector<HTMLElement>('#app');\nlet isREADY: boolean;\nlet WSSVC: WebSocket;\n/*--------------------------------------------------------------------------------*/\nexport const hwLink = () => {\n if (!app) return;\n // template\n const content = document.createElement('div');\n content.id = 'app-content';\n content.innerHTML = template;\n app.classList.add('full-page');\n app.appendChild(content);\n // wait socket\n isREADY = false;\n loading();\n wsSvc();\n};\n/*--------------------------------------------------------------------------------*/\nconst wsSvc = () => {\n WSSVC = new WebSocket(cfg.hwl.HOST);\n WSSVC.onopen = () => {\n hwinfo();\n T_hwinfo = setInterval(hwinfo, 1000 * 10);\n };\n WSSVC.onclose = () => {\n clearInterval(T_hwinfo);\n setTimeout(wsSvc, 1000 * 10);\n };\n WSSVC.onmessage = (e) => {\n const resp = JSON.parse(e.data);\n const head = resp.head ? resp.head : '';\n const data = resp.data ? resp.data : '';\n if (head == 'CSUUID') {\n if (!isREADY) {\n isREADY = true;\n ready();\n }\n }\n if (head == 'HWINFO') setHwInfo(data);\n };\n let T_hwinfo: NodeJS.Timeout;\n const hwinfo = () => WSSVC.send('{\"head\": \"HWINFO\"}');\n};\n/*--------------------------------------------------------------------------------*/\nconst setHwInfo = (data: HwInfo) => {\n if (!app) return;\n // svcinfo\n const svc = data.svc;\n app.querySelector<HTMLElement>('#hwlink')!.innerText = `: ${svc.hwlink}`;\n app.querySelector<HTMLElement>('#autoup')!.innerText = `: ${svc.autoup}`;\n app.querySelector<HTMLElement>('#csuuid')!.innerText = `: ${data.csuuid}`;\n // hwinfo\n const cpu = data.cpu;\n const mem = data.mem;\n const hwinfo = app.querySelector<HTMLElement>('#hwinfo')!;\n const uptime = Number(data.uptime);\n const hh = Math.floor(uptime / 3600);\n const mm = Math.floor((uptime % 3600) / 60);\n const memUsed = (Number(mem.used) / 1024 / 1024 / 1024).toFixed(1);\n const memTotal = (Number(mem.total) / 1024 / 1024 / 1024).toFixed(1);\n const mem_text = `${memUsed}/${memTotal} GB (${mem.percent}%)`;\n hwinfo.querySelector<HTMLElement>('#host')!.innerText = `: ${data.hostname}`;\n hwinfo.querySelector<HTMLElement>('#os')!.innerText = `: ${data.platform}`;\n hwinfo.querySelector<HTMLElement>('#cpu')!.innerText = `: ${cpu.model}`;\n app.querySelector<HTMLElement>('#mem')!.innerText = `: ${mem_text}`;\n app.querySelector<HTMLElement>('#uptime')!.innerText = `: ${hh} h ${mm} m`;\n};\n/*--------------------------------------------------------------------------------*/\ntype HwInfo = {\n csuuid: string;\n hostname: string;\n platform: string;\n uptime: number;\n svc: {\n hwlink: string;\n autoup: string;\n };\n cpu: {\n model: string;\n percent: number;\n };\n mem: {\n total: number;\n used: number;\n percent: number;\n };\n};"],"mappings":"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","names":["app","app","app"]}
|
package/dist/mod/index.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { i as button } from '../index-
|
|
1
|
+
export { i as button } from '../index-BAQxKstM.js';
|
|
2
2
|
export { i as input } from '../index-Dm_WTy_S.js';
|
|
3
|
-
export { i as cover } from '../index-
|
|
3
|
+
export { i as cover } from '../index-D5CUpF9v.js';
|
|
4
4
|
export { i as camera } from '../index-D3N8oo7V.js';
|
|
5
|
-
export { i as dialog } from '../index-
|
|
6
|
-
export { i as drawer } from '../index-
|
|
7
|
-
export { i as drop } from '../index-
|
|
8
|
-
export { i as modal } from '../index-
|
|
9
|
-
export { i as tabs } from '../index-
|
|
5
|
+
export { i as dialog } from '../index-B4158M0u.js';
|
|
6
|
+
export { i as drawer } from '../index-uQOR5bdy.js';
|
|
7
|
+
export { i as drop } from '../index-CoYHkkyT.js';
|
|
8
|
+
export { i as modal } from '../index-CD53Vh6h.js';
|
|
9
|
+
export { i as tabs } from '../index-DzKPF0ja.js';
|
package/dist/mod/index.js
CHANGED
|
@@ -7,9 +7,9 @@ var __export = (target, all) => {
|
|
|
7
7
|
// src/mod/built-in/button/index.ts
|
|
8
8
|
var button_exports = {};
|
|
9
9
|
__export(button_exports, {
|
|
10
|
-
|
|
10
|
+
loading: () => loading
|
|
11
11
|
});
|
|
12
|
-
var
|
|
12
|
+
var loading = (btn, state = false) => {
|
|
13
13
|
if (state) {
|
|
14
14
|
btn.querySelector(".btn-loader")?.remove();
|
|
15
15
|
btn.style.color = "transparent";
|
|
@@ -46,10 +46,10 @@ var fitSize = (elm, delay = 0) => {
|
|
|
46
46
|
// src/mod/built-in/cover/index.ts
|
|
47
47
|
var cover_exports = {};
|
|
48
48
|
__export(cover_exports, {
|
|
49
|
-
|
|
50
|
-
|
|
49
|
+
acdInit: () => acdInit,
|
|
50
|
+
loading: () => loading2
|
|
51
51
|
});
|
|
52
|
-
var
|
|
52
|
+
var loading2 = (cover, state = false, align = "top", hide = true) => {
|
|
53
53
|
const inner = cover.querySelectorAll("*");
|
|
54
54
|
if (state) {
|
|
55
55
|
cover.querySelector(".cover-loader")?.remove();
|
|
@@ -236,12 +236,12 @@ var camReady = (cam) => {
|
|
|
236
236
|
// src/mod/dialog/index.ts
|
|
237
237
|
var dialog_exports = {};
|
|
238
238
|
__export(dialog_exports, {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
239
|
+
alert: () => alert,
|
|
240
|
+
confirm: () => confirm,
|
|
241
|
+
toast: () => toast
|
|
242
242
|
});
|
|
243
243
|
var app = document.querySelector("#app");
|
|
244
|
-
var
|
|
244
|
+
var confirm = (message, params) => new Promise((resolve) => {
|
|
245
245
|
if (!app) return;
|
|
246
246
|
const doc = params && params?.target ? params.target : app;
|
|
247
247
|
const color = params && params?.color ? params.color : "green";
|
|
@@ -275,7 +275,7 @@ var Confirm = (message, params) => new Promise((resolve) => {
|
|
|
275
275
|
resolve(false);
|
|
276
276
|
};
|
|
277
277
|
});
|
|
278
|
-
var
|
|
278
|
+
var alert = (message, params) => new Promise((resolve) => {
|
|
279
279
|
if (!app) return;
|
|
280
280
|
const doc = params && params?.target ? params.target : app;
|
|
281
281
|
const type = params && params?.type ? params.type : "success";
|
|
@@ -316,7 +316,7 @@ var Alert = (message, params) => new Promise((resolve) => {
|
|
|
316
316
|
resolve();
|
|
317
317
|
};
|
|
318
318
|
});
|
|
319
|
-
var
|
|
319
|
+
var toast = (message, params) => new Promise((resolve) => {
|
|
320
320
|
if (!app) return;
|
|
321
321
|
const doc = params && params?.target ? params.target : app;
|
|
322
322
|
const type = params && params?.type ? params.type : "success";
|
|
@@ -338,20 +338,20 @@ var Toast = (message, params) => new Promise((resolve) => {
|
|
|
338
338
|
color = "blue";
|
|
339
339
|
icon = "";
|
|
340
340
|
}
|
|
341
|
-
const
|
|
342
|
-
|
|
343
|
-
|
|
341
|
+
const toast2 = document.createElement("div");
|
|
342
|
+
toast2.className = `slim-toast ${color}`;
|
|
343
|
+
toast2.innerHTML = /*html*/
|
|
344
344
|
`
|
|
345
345
|
<i class="icon">${icon}</i>
|
|
346
346
|
<span class="text">${message}</span>
|
|
347
347
|
`;
|
|
348
|
-
doc.appendChild(
|
|
349
|
-
|
|
348
|
+
doc.appendChild(toast2);
|
|
349
|
+
toast2.classList.add("show");
|
|
350
350
|
let count = 0;
|
|
351
|
-
|
|
351
|
+
toast2.onanimationend = () => {
|
|
352
352
|
count++;
|
|
353
353
|
if (count == 2) {
|
|
354
|
-
|
|
354
|
+
toast2.remove();
|
|
355
355
|
resolve();
|
|
356
356
|
}
|
|
357
357
|
};
|
|
@@ -360,13 +360,13 @@ var Toast = (message, params) => new Promise((resolve) => {
|
|
|
360
360
|
// src/mod/drawer/index.ts
|
|
361
361
|
var drawer_exports = {};
|
|
362
362
|
__export(drawer_exports, {
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
363
|
+
close: () => close,
|
|
364
|
+
create: () => create,
|
|
365
|
+
loading: () => loading3,
|
|
366
|
+
ready: () => ready
|
|
367
367
|
});
|
|
368
368
|
var app2 = document.querySelector("#app");
|
|
369
|
-
var
|
|
369
|
+
var create = (params) => {
|
|
370
370
|
const name = params.name ? params.name : "drawer";
|
|
371
371
|
const size = params.size ? params.size : "mobile";
|
|
372
372
|
const drawer = document.createElement("div");
|
|
@@ -450,7 +450,7 @@ var openMobile = (drawer) => {
|
|
|
450
450
|
}
|
|
451
451
|
};
|
|
452
452
|
};
|
|
453
|
-
var
|
|
453
|
+
var close = (drawer) => new Promise((resolve) => {
|
|
454
454
|
drawer.querySelector("#btn-exit").click();
|
|
455
455
|
drawer.addEventListener("animationend", () => resolve());
|
|
456
456
|
});
|
|
@@ -475,13 +475,13 @@ var destroy = (drawer) => {
|
|
|
475
475
|
const dialog = document.querySelectorAll(".slim-dialog");
|
|
476
476
|
dialog.forEach((el) => el.remove());
|
|
477
477
|
};
|
|
478
|
-
var
|
|
478
|
+
var loading3 = (drawer) => {
|
|
479
479
|
const body = drawer.querySelector(".drawer-body");
|
|
480
480
|
const loader = drawer.querySelector(".loader");
|
|
481
481
|
if (body) body.style.display = "none";
|
|
482
482
|
if (loader) loader.style.display = "flex";
|
|
483
483
|
};
|
|
484
|
-
var
|
|
484
|
+
var ready = (drawer) => {
|
|
485
485
|
const body = drawer.querySelector(".drawer-body");
|
|
486
486
|
const loader = drawer.querySelector(".loader");
|
|
487
487
|
if (body) body.style.display = "block";
|
|
@@ -491,32 +491,32 @@ var Ready = (drawer) => {
|
|
|
491
491
|
// src/mod/drop/index.ts
|
|
492
492
|
var drop_exports = {};
|
|
493
493
|
__export(drop_exports, {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
494
|
+
clear: () => clear,
|
|
495
|
+
menu: () => menu,
|
|
496
|
+
select: () => select,
|
|
497
|
+
update: () => update
|
|
498
498
|
});
|
|
499
|
-
var
|
|
499
|
+
var menu = (drop) => {
|
|
500
500
|
const dropBtn = drop.querySelector(".drop-btn");
|
|
501
501
|
const content = drop.querySelector(".drop-content");
|
|
502
502
|
if (!dropBtn || !content) return;
|
|
503
503
|
setBtnEvent(dropBtn, content);
|
|
504
504
|
};
|
|
505
|
-
var
|
|
505
|
+
var select = (drop, icon, callBack) => {
|
|
506
506
|
const dropBtn = drop.querySelector(".drop-btn");
|
|
507
507
|
const content = drop.querySelector(".drop-content");
|
|
508
508
|
if (!dropBtn || !content) return;
|
|
509
509
|
setBtnEvent(dropBtn, content);
|
|
510
|
-
|
|
510
|
+
update(drop, icon, callBack);
|
|
511
511
|
};
|
|
512
|
-
var
|
|
513
|
-
const
|
|
512
|
+
var update = (drop, icon, callBack) => {
|
|
513
|
+
const select2 = drop.querySelector("select");
|
|
514
514
|
const content = drop.querySelector(".drop-content");
|
|
515
|
-
if (!
|
|
515
|
+
if (!select2 || !content) return;
|
|
516
516
|
let elmIcon = "";
|
|
517
517
|
if (icon) elmIcon = `<span style="margin-right: 6px;">${icon}</span>`;
|
|
518
518
|
content.innerHTML = "";
|
|
519
|
-
const option =
|
|
519
|
+
const option = select2.querySelectorAll("option");
|
|
520
520
|
option.forEach((opt) => {
|
|
521
521
|
const item = document.createElement("a");
|
|
522
522
|
item.innerHTML = `${elmIcon}${opt.text}`;
|
|
@@ -530,7 +530,7 @@ var Update = (drop, icon, callBack) => {
|
|
|
530
530
|
};
|
|
531
531
|
});
|
|
532
532
|
const clearSelected = () => {
|
|
533
|
-
const index =
|
|
533
|
+
const index = select2.selectedIndex;
|
|
534
534
|
const list = content.querySelectorAll("a");
|
|
535
535
|
list.forEach((el, i) => {
|
|
536
536
|
if (i == index) {
|
|
@@ -551,7 +551,7 @@ var setBtnEvent = (btn, content) => {
|
|
|
551
551
|
content.style.display = "";
|
|
552
552
|
};
|
|
553
553
|
} else {
|
|
554
|
-
|
|
554
|
+
clear();
|
|
555
555
|
content.style.animation = "fade-in 0.4s forwards";
|
|
556
556
|
content.style.display = "block";
|
|
557
557
|
content.onanimationend = () => {
|
|
@@ -560,7 +560,7 @@ var setBtnEvent = (btn, content) => {
|
|
|
560
560
|
}
|
|
561
561
|
};
|
|
562
562
|
};
|
|
563
|
-
var
|
|
563
|
+
var clear = () => {
|
|
564
564
|
const drop = document.querySelectorAll(".drop-content");
|
|
565
565
|
drop.forEach((el) => {
|
|
566
566
|
if (el.style.display == "block") {
|
|
@@ -573,18 +573,18 @@ var Clear = () => {
|
|
|
573
573
|
});
|
|
574
574
|
};
|
|
575
575
|
window.addEventListener("click", (e) => {
|
|
576
|
-
if (!e.target.matches(".drop-btn"))
|
|
576
|
+
if (!e.target.matches(".drop-btn")) clear();
|
|
577
577
|
});
|
|
578
578
|
|
|
579
579
|
// src/mod/modal/index.ts
|
|
580
580
|
var modal_exports = {};
|
|
581
581
|
__export(modal_exports, {
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
582
|
+
close: () => close2,
|
|
583
|
+
create: () => create2,
|
|
584
|
+
hidden: () => hidden,
|
|
585
|
+
loading: () => loading4,
|
|
586
|
+
ready: () => ready2,
|
|
587
|
+
visible: () => visible
|
|
588
588
|
});
|
|
589
589
|
var app3 = document.querySelector("#app");
|
|
590
590
|
var tmpBtnSave = (
|
|
@@ -611,7 +611,7 @@ var tmpBtnClose = (
|
|
|
611
611
|
</button>
|
|
612
612
|
`
|
|
613
613
|
);
|
|
614
|
-
var
|
|
614
|
+
var create2 = (params) => {
|
|
615
615
|
const icon = params.icon ? params.icon : "";
|
|
616
616
|
const title = params.title ? params.title : "Modal Title";
|
|
617
617
|
const body = params.body ? params.body : "Modal Body";
|
|
@@ -678,7 +678,7 @@ var Create2 = (params) => {
|
|
|
678
678
|
if (btnClose) btnClose.onclick = done;
|
|
679
679
|
return modal;
|
|
680
680
|
};
|
|
681
|
-
var
|
|
681
|
+
var close2 = (modal) => new Promise((resolve) => {
|
|
682
682
|
modal.querySelector("#btn-exit").click();
|
|
683
683
|
const content = modal.querySelector(".content");
|
|
684
684
|
content.addEventListener("animationend", () => resolve());
|
|
@@ -694,34 +694,36 @@ var destroy2 = (modal) => {
|
|
|
694
694
|
}
|
|
695
695
|
});
|
|
696
696
|
};
|
|
697
|
-
var
|
|
697
|
+
var loading4 = (modal) => {
|
|
698
698
|
const body = modal.querySelector(".body");
|
|
699
699
|
const loader = modal.querySelector(".loader");
|
|
700
700
|
if (body) body.style.visibility = "hidden";
|
|
701
701
|
if (loader) loader.style.display = "flex";
|
|
702
702
|
};
|
|
703
|
-
var
|
|
703
|
+
var ready2 = (modal) => {
|
|
704
704
|
const body = modal.querySelector(".body");
|
|
705
705
|
const loader = modal.querySelector(".loader");
|
|
706
706
|
if (body) body.style.visibility = "visible";
|
|
707
707
|
if (loader) loader.style.display = "none";
|
|
708
708
|
};
|
|
709
|
-
var
|
|
709
|
+
var hidden = (modal) => {
|
|
710
710
|
modal.style.display = "none";
|
|
711
711
|
};
|
|
712
|
-
var
|
|
712
|
+
var visible = (modal) => {
|
|
713
713
|
modal.style.display = "block";
|
|
714
714
|
};
|
|
715
715
|
|
|
716
716
|
// src/mod/tabs/index.ts
|
|
717
717
|
var tabs_exports = {};
|
|
718
718
|
__export(tabs_exports, {
|
|
719
|
-
|
|
719
|
+
init: () => init,
|
|
720
|
+
loading: () => loading5,
|
|
721
|
+
ready: () => ready3,
|
|
720
722
|
setActive: () => setActive
|
|
721
723
|
});
|
|
722
724
|
var ignore = ["camera", "drawer", "modal"];
|
|
723
725
|
var hashIgnore = (hash) => ignore.includes(hash);
|
|
724
|
-
var
|
|
726
|
+
var init = (tabs, onChange) => {
|
|
725
727
|
const tbtn = tabs.querySelectorAll(".tabs-btn");
|
|
726
728
|
tbtn.forEach((elm) => {
|
|
727
729
|
const dataHash = elm.getAttribute("data-hash");
|
|
@@ -747,13 +749,13 @@ var Init = (tabs, onChange) => {
|
|
|
747
749
|
elm.classList.remove("active");
|
|
748
750
|
}
|
|
749
751
|
});
|
|
750
|
-
|
|
751
|
-
onChange(index, () =>
|
|
752
|
+
loading5(tabs, index);
|
|
753
|
+
onChange(index, () => ready3(tabs, index));
|
|
752
754
|
};
|
|
753
755
|
tabsChange();
|
|
754
756
|
window.onhashchange = tabsChange;
|
|
755
757
|
};
|
|
756
|
-
var
|
|
758
|
+
var loading5 = (tabs, index) => {
|
|
757
759
|
const tbtn = tabs.querySelectorAll(".tabs-btn")[index];
|
|
758
760
|
const body = tabs.querySelector(".tabs-body");
|
|
759
761
|
const inner = tbtn.querySelectorAll("*");
|
|
@@ -781,7 +783,7 @@ var tabsLoading = (tabs, index) => {
|
|
|
781
783
|
}
|
|
782
784
|
}
|
|
783
785
|
};
|
|
784
|
-
var
|
|
786
|
+
var ready3 = (tabs, index) => {
|
|
785
787
|
const tbtn = tabs.querySelectorAll(".tabs-btn")[index];
|
|
786
788
|
const body = tabs.querySelector(".tabs-body");
|
|
787
789
|
const inner = tbtn.querySelectorAll("*");
|