@topvisor/ui 1.0.13-fix-dialog-scroll → 1.0.14-pinia-prepare
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/.chunks/{datepicker-B8syh3Uk.es.js → datepicker-BuFX5Ibd.es.js} +2 -2
- package/.chunks/datepicker-BuFX5Ibd.es.js.map +1 -0
- package/.chunks/{datepicker-BLuImSNi.amd.js → datepicker-nf_2LrjW.amd.js} +2 -2
- package/.chunks/datepicker-nf_2LrjW.amd.js.map +1 -0
- package/.chunks/{forms-CiwhEtPE.amd.js → forms-BLpuaGu3.amd.js} +3 -3
- package/.chunks/forms-BLpuaGu3.amd.js.map +1 -0
- package/.chunks/{forms-C4-jc5q2.es.js → forms-CO7gZ-Jf.es.js} +23 -23
- package/.chunks/forms-CO7gZ-Jf.es.js.map +1 -0
- package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-CtqSJHeU.es.js → listItem.vue_vue_type_script_setup_true_lang-BViq2HMb.es.js} +2 -2
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-BViq2HMb.es.js.map +1 -0
- package/.chunks/{listItem.vue_vue_type_script_setup_true_lang-sNbmDi34.amd.js → listItem.vue_vue_type_script_setup_true_lang-C3_ynkiW.amd.js} +2 -2
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-C3_ynkiW.amd.js.map +1 -0
- package/.chunks/{menu.vue_vue_type_style_index_0_lang-jctlBjKS.amd.js → menu.vue_vue_type_style_index_0_lang-B3O5DQLa.amd.js} +2 -2
- package/.chunks/menu.vue_vue_type_style_index_0_lang-B3O5DQLa.amd.js.map +1 -0
- package/.chunks/{menu.vue_vue_type_style_index_0_lang-BCFxRsJ_.es.js → menu.vue_vue_type_style_index_0_lang-tVQzbd1R.es.js} +2 -2
- package/.chunks/menu.vue_vue_type_style_index_0_lang-tVQzbd1R.es.js.map +1 -0
- package/.chunks/notice-BShByAqB.amd.js +4 -0
- package/.chunks/notice-BShByAqB.amd.js.map +1 -0
- package/.chunks/notice-DqPTC2Eb.es.js +175 -0
- package/.chunks/notice-DqPTC2Eb.es.js.map +1 -0
- package/.chunks/{popup-D6LvyJ7M.amd.js → popup-3eJtfdGC.amd.js} +2 -2
- package/.chunks/popup-3eJtfdGC.amd.js.map +1 -0
- package/.chunks/{popup-DEG8x2yE.es.js → popup-PVygOyt6.es.js} +3 -3
- package/.chunks/popup-PVygOyt6.es.js.map +1 -0
- package/.chunks/store-CX_6ZXhO.es.js.map +1 -1
- package/.chunks/store-esTid5oI.amd.js.map +1 -1
- package/.chunks/{utils-BiyYJ_AB.es.js → utils-CaTXdV8x.es.js} +52 -44
- package/.chunks/utils-CaTXdV8x.es.js.map +1 -0
- package/.chunks/utils-DqBBCGAB.amd.js +2 -0
- package/.chunks/utils-DqBBCGAB.amd.js.map +1 -0
- package/.chunks/{utils-DdsRxaK5.es.js → utils-DtkfhYfA.es.js} +59 -54
- package/.chunks/utils-DtkfhYfA.es.js.map +1 -0
- package/.chunks/{utils-B3ycYRqM.amd.js → utils-FeIFDJOE.amd.js} +2 -2
- package/.chunks/utils-FeIFDJOE.amd.js.map +1 -0
- package/README.md +82 -82
- package/assets/core.css +1 -1
- package/assets/forms.css +1 -1
- package/assets/layout.css +1 -0
- package/charts/charts.amd.js +1 -1
- package/charts/charts.amd.js.map +1 -1
- package/charts/charts.js +47 -42
- package/charts/charts.js.map +1 -1
- package/components/charts/miniChart/miniChart.d.ts +5 -0
- package/components/core/notice/item/item.vue.d.ts +3 -1
- package/components/core/notice/item/types.d.ts +4 -0
- package/components/core/notice/utils.d.ts +1 -0
- package/components/dialog/dialog/composables/{asyncDialogWorker.d.ts → asyncDialogHandle.d.ts} +1 -1
- package/components/dialog/dialog/composables/utils.d.ts +2 -2
- package/components/dialog/dialog/dialogs/dialogs.vue.d.ts +1 -1
- package/components/dialog/lib/types.d.ts +6 -1
- package/components/dialog/lib/worker.d.ts +5 -0
- package/components/layout/islandRows/islandRows.vue.d.ts +16 -0
- package/components/layout/islandRows/islandRowsRow/islandRowsRow.vue.d.ts +17 -0
- package/components/layout/islandRows/islandRowsRow/types.d.ts +2 -0
- package/components/layout/islandRows/types.d.ts +10 -0
- package/components/layout/layout.d.ts +7 -0
- package/components/layout/rows/rows.vue.d.ts +20 -0
- package/components/layout/rows/types.d.ts +6 -0
- package/components/project/project.d.ts +1 -0
- package/core/app.amd.js +1 -1
- package/core/app.amd.js.map +1 -1
- package/core/app.js +28 -31
- package/core/app.js.map +1 -1
- package/core/utils/check.d.ts +1 -1
- package/dialog/dialog.amd.js +1 -1
- package/dialog/dialog.amd.js.map +1 -1
- package/dialog/dialog.js +2 -2
- package/dialog/dialog.js.map +1 -1
- package/forms/forms.amd.js +1 -1
- package/forms/forms.js +1 -1
- package/forms/helpers.amd.js.map +1 -1
- package/forms/helpers.js.map +1 -1
- package/formsExt/formsExt.amd.js +1 -1
- package/formsExt/formsExt.amd.js.map +1 -1
- package/formsExt/formsExt.js +54 -54
- package/formsExt/formsExt.js.map +1 -1
- package/icomoon/Read Me.txt +7 -7
- package/icomoon/Topvisor icons.json +6074 -5845
- package/icomoon/demo-files/demo.css +158 -161
- package/icomoon/demo-files/demo.js +30 -30
- package/icomoon/demo.html +3446 -3379
- package/icomoon/fonts/Topvisor-2.eot +0 -0
- package/icomoon/fonts/Topvisor-2.svg +268 -263
- package/icomoon/fonts/Topvisor-2.ttf +0 -0
- package/icomoon/fonts/Topvisor-2.woff +0 -0
- package/icomoon/selection.json +1 -1
- package/icomoon/style.css +756 -740
- package/jquery-ui.min.css +5 -5
- package/layout/layout.amd.js +2 -0
- package/layout/layout.amd.js.map +1 -0
- package/layout/layout.d.ts +2 -0
- package/layout/layout.js +54 -0
- package/layout/layout.js.map +1 -0
- package/package.json +33 -33
- package/popup/popup.amd.js +1 -1
- package/popup/popup.amd.js.map +1 -1
- package/popup/popup.js +2 -2
- package/popup/popup.js.map +1 -1
- package/popup/worker.amd.js +1 -1
- package/popup/worker.amd.js.map +1 -1
- package/popup/worker.js +2 -2
- package/popup/worker.js.map +1 -1
- package/project/project.amd.js +1 -1
- package/project/project.amd.js.map +1 -1
- package/project/project.js +457 -444
- package/project/project.js.map +1 -1
- package/require/css.amd.js +12 -12
- package/tabs/tabs.amd.js.map +1 -1
- package/tabs/tabs.js.map +1 -1
- package/tabsView/tabsView.amd.js +1 -1
- package/tabsView/tabsView.amd.js.map +1 -1
- package/tabsView/tabsView.js +16 -16
- package/tabsView/tabsView.js.map +1 -1
- package/utils/check.amd.js +1 -1
- package/utils/check.amd.js.map +1 -1
- package/utils/check.js +12 -12
- package/utils/check.js.map +1 -1
- package/utils/clipboard.amd.js.map +1 -1
- package/utils/clipboard.js.map +1 -1
- package/utils/date.amd.js +1 -1
- package/utils/date.js +1 -1
- package/utils/device.amd.js +1 -1
- package/utils/device.js +1 -1
- package/utils/dom.amd.js.map +1 -1
- package/utils/dom.js.map +1 -1
- package/utils/image.amd.js.map +1 -1
- package/utils/image.js.map +1 -1
- package/utils/keyboard.amd.js.map +1 -1
- package/utils/keyboard.js.map +1 -1
- package/utils/lodash.amd.js +1 -1
- package/utils/lodash.js +5 -5
- package/utils/number.amd.js.map +1 -1
- package/utils/number.js.map +1 -1
- package/utils/price.amd.js +1 -1
- package/utils/price.amd.js.map +1 -1
- package/utils/price.js +1 -1
- package/utils/price.js.map +1 -1
- package/utils/route.amd.js.map +1 -1
- package/utils/route.js.map +1 -1
- package/utils/scroll.amd.js.map +1 -1
- package/utils/scroll.js.map +1 -1
- package/utils/searchers.amd.js.map +1 -1
- package/utils/searchers.js.map +1 -1
- package/utils/string.amd.js +1 -1
- package/utils/string.amd.js.map +1 -1
- package/utils/string.js +1 -1
- package/utils/string.js.map +1 -1
- package/utils/system.amd.js.map +1 -1
- package/utils/system.js.map +1 -1
- package/utils/url.amd.js.map +1 -1
- package/utils/url.js.map +1 -1
- package/web-types.json +89 -89
- package/.chunks/datepicker-B8syh3Uk.es.js.map +0 -1
- package/.chunks/datepicker-BLuImSNi.amd.js.map +0 -1
- package/.chunks/forms-C4-jc5q2.es.js.map +0 -1
- package/.chunks/forms-CiwhEtPE.amd.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-CtqSJHeU.es.js.map +0 -1
- package/.chunks/listItem.vue_vue_type_script_setup_true_lang-sNbmDi34.amd.js.map +0 -1
- package/.chunks/menu.vue_vue_type_style_index_0_lang-BCFxRsJ_.es.js.map +0 -1
- package/.chunks/menu.vue_vue_type_style_index_0_lang-jctlBjKS.amd.js.map +0 -1
- package/.chunks/notice-Dgu-SIPq.es.js +0 -172
- package/.chunks/notice-Dgu-SIPq.es.js.map +0 -1
- package/.chunks/notice-DkCLhqSq.amd.js +0 -4
- package/.chunks/notice-DkCLhqSq.amd.js.map +0 -1
- package/.chunks/popup-D6LvyJ7M.amd.js.map +0 -1
- package/.chunks/popup-DEG8x2yE.es.js.map +0 -1
- package/.chunks/utils-B3ycYRqM.amd.js.map +0 -1
- package/.chunks/utils-BiyYJ_AB.es.js.map +0 -1
- package/.chunks/utils-DdsRxaK5.es.js.map +0 -1
- package/.chunks/utils-DpejCylJ.amd.js +0 -2
- package/.chunks/utils-DpejCylJ.amd.js.map +0 -1
- /package/components/dialog/dialog/composables/{dialogWorker.d.ts → dialogHandle.d.ts} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"popup-DEG8x2yE.es.js","sources":["../../src/components/component.ts","../../src/components/popup/lib/popup.globalEvents.ts","../../src/components/popup/lib/popup.ts"],"sourcesContent":["import DOM from '@/core/utils/dom';\r\n\r\n/**\r\n * Базовый компонент для js компонентов, не имеет отношения к Vue\r\n */\r\nclass Component {\r\n\r\n\tstatic componentName = 'Top';\r\n\r\n\tcomponentName: string | undefined; // имя класса компонента\r\n\tclassName: string | undefined; // имя css класса компонента\r\n\tuid: string | undefined; // уникальный id компонента\r\n\tel: HTMLElement | undefined; // элемент, связанный с компонентом\r\n\toptions = {}; // параметры компонента\r\n\r\n\tunmountEls: HTMLElement[] = [];\r\n\tunmountEvents: any[] = [];\r\n\r\n\t// переопредлять нельзя\r\n\t// если компонент инициирован, необходимо сразу его вернуть и выполнить reInit() вместо mount()\r\n\t// используется init вместо constructor, так как super constructor выполняется до Object.defineProperty() параметров класса\r\n\tinit(componentName: string, el: HTMLElement, options: object): Component | void {\r\n\t\tif (!el) {\r\n\t\t\tthrow componentName + ': el is undefined';\r\n\t\t}\r\n\r\n\t\tconst component = Component.getComponent(el, componentName);\r\n\r\n\t\tif (component) {\r\n\t\t\tcomponent.reInit(options);\r\n\r\n\t\t\treturn component;\r\n\t\t}\r\n\r\n\t\tthis.componentName = componentName;\r\n\t\tthis.className = 'top' + componentName[0].toUpperCase() + componentName.substring(1);\r\n\t\tthis.uid = this.componentName + (Math.random() + '').replace('.', '');\r\n\r\n\t\tthis._setComponent(el);\r\n\t\tthis.el = el;\r\n\t\tthis.el.classList.add(this.className);\r\n\t\tthis.options = Object.assign(this.options, options);\r\n\r\n\t\tthis.mount();\r\n\t}\r\n\r\n\t// получить инициированный компонент\r\n\tstatic getComponent(el: HTMLElement, componentName: string): any {\r\n\t\treturn DOM.storage(el, '#' + componentName);\r\n\t}\r\n\r\n\t// устанвоить компонент\r\n\t_setComponent(el: HTMLElement) {\r\n\t\tDOM.storage(el, '#' + this.componentName, this);\r\n\t}\r\n\r\n\t// функция подключения компонента\r\n\tmount(): void {\r\n\t\tthrow 'Please, add method mount() to component: ' + this.componentName;\r\n\t}\r\n\r\n\t// функция отключения компонента\r\n\tunmount(): void {\r\n\t\tDOM.storage(this.el, '#' + this.componentName, null);\r\n\r\n\t\tthis.unmountEls.forEach((el) => {\r\n\t\t\tel.remove();\r\n\t\t});\r\n\r\n\t\tthis.unmountEls = [];\r\n\r\n\t\tthis.unmountEvents.forEach((eventData) => {\r\n\t\t\teventData.el.removeEventListener(eventData.type, eventData.listener, eventData.options);\r\n\t\t});\r\n\r\n\t\tthis.unmountEvents = [];\r\n\t}\r\n\r\n\t// указание новые элементы, которые должны будут удалиться после unmount\r\n\tregisterElForUnmount(el: HTMLElement): void {\r\n\t\tthis.unmountEls.push(el);\r\n\t}\r\n\r\n\t// указание новые события, которые должны будут удалиться после unmount\r\n\taddEventListenerWithUnmount(\r\n\t\tel: HTMLElement | Document | Window,\r\n\t\ttype: keyof GlobalEventHandlersEventMap,\r\n\t\tlistener: (this: HTMLElement, e: Event) => any,\r\n\t\toptions?: any,\r\n\t): void {\r\n\t\tel.addEventListener(type, listener, options);\r\n\r\n\t\tthis.registerEventForUnmount(el, type, listener, options);\r\n\t}\r\n\r\n\t// указание новые события, которые должны будут удалиться после unmount\r\n\tregisterEventForUnmount(\r\n\t\tel: HTMLElement | Document | Window,\r\n\t\ttype: keyof GlobalEventHandlersEventMap,\r\n\t\tlistener: (this: HTMLElement, e: Event) => any,\r\n\t\toptions?: any,\r\n\t): void {\r\n\t\tconst eventData = {\r\n\t\t\tel: el,\r\n\t\t\ttype: type,\r\n\t\t\tlistener: listener,\r\n\t\t\toptions: options,\r\n\t\t};\r\n\r\n\t\tthis.unmountEvents.push(eventData);\r\n\t}\r\n\r\n\t// функция перенастройки уже подключенного компонента\r\n\treInit(_options: object): void {\r\n\t\tthrow 'Please, add method reInit() to component: ' + this.componentName;\r\n\t}\r\n\r\n\tstatic detach(nodes: Node[]): void\r\n\tstatic detach(nodes: HTMLElement): void\r\n\r\n\t// удалить элементы из DOM, но не из памяти\r\n\tstatic detach(nodes: any): void {\r\n\t\tif (nodes.forEach) {\r\n\t\t\tnodes.forEach((node: Node) => node.parentElement?.removeChild(node));\r\n\t\t} else {\r\n\t\t\tconst el = nodes;\r\n\t\t\tel.parentElement?.removeChild(el);\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default Component;\r\n","import Worker from '@/components/popup/lib/worker';\r\nimport DOM from '@/core/utils/dom';\r\n\r\n/**\r\n * Глобальные события, для реализации Popup\r\n * Автоматически инициируется при первой загрузке, не является выгружаемым модулем\r\n *\r\n * Если в меню встречает класс .preloader, то событие нажатия на кнопку через enter будет остановлено\r\n */\r\nclass GlobalEvents {\r\n\r\n\tprivate static isInited = false;\r\n\r\n\t/**\r\n\t * Добавить глобальные обработчики\r\n\t *\r\n\t * Добавляются на страницу один раз и навсегда\r\n\t */\r\n\tstatic init(): void {\r\n\t\tif (this.isInited) return;\r\n\r\n\t\tthis.isInited = true;\r\n\r\n\t\tdocument.addEventListener('click', this.onclick);\r\n\t\tdocument.addEventListener('keydown', this.onkeydown);\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик кликов\r\n\t *\r\n\t * Обрабатывает клики внутри Popup\r\n\t */\r\n\tprivate static onclick(e: Event): void {\r\n\t\tif (!(e.target instanceof HTMLElement)) return;\r\n\r\n\t\t// элементы меню, клик по которым должен его закрыть\r\n\t\tconst elCloser = e.target.closest<HTMLElement>('.closer, a, .a, .top-button');\r\n\t\tif (elCloser) {\r\n\t\t\t// меню\r\n\t\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\r\n\r\n\t\t\t// клик вне меню\r\n\t\t\tif (!elPopup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// элемент имеет модификатор, запрещаюущий закрытие меню по клику на него\r\n\t\t\tif (elCloser.matches('.top-popup-noCloser')) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// deprecated, ссылки с href=\".\" запрещены, они должны быть заменены на .top-popup_listItem-button\r\n\t\t\tif (elCloser.getAttribute('href') === '.') {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\t// клик по кнопке открытия другого меню\r\n\t\t\tif (e.target.matches('[data-top-popup]')) {\r\n\t\t\t\t// список меню, в котором был сделан клик\r\n\t\t\t\tconst elUl = e.target.closest<HTMLElement>('ul');\r\n\r\n\t\t\t\t// элемент меню, по которому был сделан клик\r\n\t\t\t\tconst elItem = e.target.closest<HTMLElement>('a, .a');\r\n\r\n\t\t\t\t// сделать элемент меню, по которому сделан клик активным\r\n\t\t\t\tif (elUl) {\r\n\t\t\t\t\telUl.querySelector('a.top-active, .a.top-active')?.classList.remove('top-active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (elItem) {\r\n\t\t\t\t\telItem.classList.add('top-active');\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// закрыть меню\r\n\t\t\tWorker.close(elPopup);\r\n\t\t}\r\n\r\n\t\t// клик по фону меню\r\n\t\tif (e.target.matches('.top-popup-wrapper')) {\r\n\t\t\tconst elPopup = e.target;\r\n\r\n\t\t\tWorker.close(elPopup);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Глобальный обработчик нажатия кнопки на клавиатуре\r\n\t */\r\n\tprivate static onkeydown(e: KeyboardEvent): void {\r\n\t\tif (!(e.target instanceof HTMLElement)) return;\r\n\r\n\t\tconst elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\r\n\r\n\t\t// нажатие не в меню\r\n\t\tif (!elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elUl = elPopup.querySelector<HTMLElement>('ul.top-popup_content');\r\n\r\n\t\tswitch (e.key) {\r\n\t\t\tcase 'Escape':\r\n\t\t\t\tWorker.close(elPopup);\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase 'Enter':\r\n\t\t\t\t// атоматическое нажатие кнопок при нажатии Enter\r\n\t\t\t\tif (!elUl) {\r\n\t\t\t\t\tif (DOM.querySelectorVisible(elPopup, '.preloader')) {\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// deprecated, старый код на сайте\r\n\t\t\t\t\tconst elBtn = DOM.querySelectorVisible(elPopup, '.top-popup_footer .go, .top-popup_footer [data-action]');\r\n\t\t\t\t\tif (elBtn instanceof HTMLElement) {\r\n\t\t\t\t\t\telBtn.click();\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Запуск клика последней кнопки, расположенной в footer'е Popup'а, нажатием клавиши Enter\r\n\t\t\t\t\tconst elFooterLastBtn = DOM.querySelectorVisibleLast(elPopup, '.top-popup_footer .top-button');\r\n\t\t\t\t\tif (elFooterLastBtn instanceof HTMLElement) {\r\n\t\t\t\t\t\telFooterLastBtn.click();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// перейти по ссылке по нажатию на Enter\r\n\t\t\t\t// данный функуционал игнорирует SPA\r\n\t\t\t\tconst elLink = DOM.querySelectorVisible(elPopup, 'li > a.top-active');\r\n\t\t\t\tif (elLink && elLink.getAttribute('href')) {\r\n\t\t\t\t\t// фокус может находиться на другой ссылке\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tlocation.href = elLink.getAttribute('href')!;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// кликнуть по элементу меню по нажатию на Enter\r\n\t\t\t\tconst elItem = elPopup.querySelector<HTMLElement>('li > .top-active');\r\n\t\t\t\tif (elItem instanceof HTMLElement) {\r\n\t\t\t\t\telItem.click();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t// управление стрелками\r\n\t\t\tcase 'ArrowUp':\r\n\t\t\tcase 'ArrowRight':\r\n\t\t\tcase 'ArrowDown':\r\n\t\t\tcase 'ArrowLeft':\r\n\t\t\t\tif (!elUl) {\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (e.key === 'ArrowRight' || e.key === 'ArrowLeft') {\r\n\t\t\t\t\tconst elMoreVisible = DOM.querySelectorVisible(\r\n\t\t\t\t\t\telPopup,\r\n\t\t\t\t\t\t'ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active > .top-popup_listMore',\r\n\t\t\t\t\t);\r\n\t\t\t\t\tif (elMoreVisible) {\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t}\r\n\t\t\t\t} else {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst elItemActive = elPopup.querySelector<HTMLElement>('ul.top-popup_content > li:not(.top-popup_liNoSelectable) > .top-active')?.parentElement;\r\n\r\n\t\t\t\t// есть подменю\r\n\t\t\t\tif (e.key === 'ArrowRight' && elItemActive) {\r\n\t\t\t\t\t// const elItemMoreActive = elItemActive.querySelector<HTMLElement>('[data-top-popup].top-active');\r\n\t\t\t\t\t// if (elItemMoreActive) {\r\n\t\t\t\t\t// \treturn elItemMoreActive.click();\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tconst elMore = elItemActive.querySelector<HTMLElement>('.top-active > .top-popup_listMore');\r\n\t\t\t\t\tif (elMore instanceof HTMLElement) {\r\n\t\t\t\t\t\treturn elMore.click();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconst elsLiVisible = DOM.querySelectorAllVisible(elPopup, 'ul.top-popup_content > li:not(.top-popup_liNoSelectable)');\r\n\t\t\t\tconst countLi = elsLiVisible.length;\r\n\r\n\t\t\t\tif (!countLi) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlet index = -1;\r\n\t\t\t\tif (elItemActive) {\r\n\t\t\t\t\tindex = elsLiVisible.indexOf(elItemActive);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (e.key === 'ArrowUp' || e.key === 'ArrowLeft') {\r\n\t\t\t\t\tindex--;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// это первый элемен, \"Назад\" должен закрывать окно\r\n\t\t\t\tif (e.key === 'ArrowLeft' && index === -1) {\r\n\t\t\t\t\tif (e.target.matches('input')) {\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn Worker.close(elPopup);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t// это последний элемен, \"Вперед\" не должен ни чего делать\r\n\t\t\t\tif (e.key === 'ArrowRight' && index === countLi) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index < 0) {\r\n\t\t\t\t\tindex = countLi - 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (index > countLi - 1) {\r\n\t\t\t\t\tindex = 0;\r\n\t\t\t\t}\r\n\r\n\t\t\t\telPopup.querySelectorAll('ul.top-popup_content > li > .top-active').forEach(el => el.classList.remove('top-active'));\r\n\t\t\t\telsLiVisible[index].querySelector(':scope > a, :scope > .a')?.classList.add('top-active');\r\n\r\n\t\t\t\tWorker.scrollToActive(elPopup);\r\n\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n}\r\n\r\nexport default GlobalEvents;\r\n","import Core from '@/core/core/core';\r\nimport Component from '@/components/component';\r\nimport DOM from '@/core/utils/dom';\r\nimport Worker from '@/components/popup/lib/worker';\r\nimport GlobalEvents from '@/components/popup/lib/popup.globalEvents';\r\n\r\nimport css from '@/components/popup/popup/style/popup.css?inline';\r\nimport cssM from '@/components/popup/popup/style/popup.m.css?inline';\r\nimport cssPC from '@/components/popup/popup/style/popup.pc.css?inline';\r\nimport { useI18n } from '@/core/plugins/i18n';\r\n\r\nCore.insertStyleToPage(css);\r\nCore.insertStyleToPage(cssM, 'm');\r\nCore.insertStyleToPage(cssPC, 'pc');\r\n\r\nexport interface PopupOptions {\r\n\tpopup?: string,\r\n\tid?: string,\r\n\tp?: number,\r\n\tnotch?: boolean,\r\n\tclass?: string,\r\n\tposBy?: 'left' | 'right' | 'fixed' | Element,\r\n\tfrontSelector?: string,\r\n\tinvertX?: boolean,\r\n\topenByHover?: boolean,\r\n\tuseOriginal?: boolean,\r\n\ttransitionDuration?: number,\r\n\tisFullScreen?: boolean,\r\n}\r\n\r\n/**\r\n * Основной объект js компонента TopPopup\r\n *\r\n * Добавляет jQuery события на this.el, если jQuery загружен:\r\n *\r\n * - aftershow.top-menu-popup\r\n * - afterclose.top-menu-popup\r\n */\r\nexport class Popup extends Component {\r\n\r\n\tstatic componentName = 'TopPopup';\r\n\r\n\tdeclare el: HTMLElement; // элемент, вызвавший открытие Popup\r\n\telActiveByDefault: boolean | undefined; // элемент уже имеет класс top-active перед открытием окна\r\n\telPopup: HTMLElement | undefined; // Popup .top-popup-wrapper\r\n\telPopupInner: HTMLElement | undefined; // контентная часть Popup .top-popup\r\n\telPopupHeader: HTMLElement | undefined | null;\r\n\telPopupWidget: HTMLElement | undefined | null;\r\n\telPopupBody: HTMLElement | undefined | null;\r\n\telPopupFooter: HTMLElement | undefined | null;\r\n\telFront: HTMLElement | undefined | null;\r\n\r\n\tpopupParent: Popup | undefined;\r\n\r\n\t$: JQuery<HTMLElement> | undefined; // только, если есть jQuery\r\n\r\n\telStartPosition: HTMLElement | undefined | null; // используется для useOriginal\r\n\tshift = {\r\n\t\ttop: 0,\r\n\t\tleft: 0,\r\n\t};\r\n\tisClosed = false; // флаг того, что меню закрыто\r\n\tisFirstClick = true;\r\n\ttype: string | undefined; // selector или html\r\n\r\n\toptions: PopupOptions = {\r\n\t\tpopup: '', // selector, text\r\n\t\tp: 0, // положение меню (0 - над элементом, 1 - сверху, 2 - справа, 3 - снизу, 4 слева)\r\n\t\tnotch: false, // отображать ли клювик\r\n\r\n\t\tclass: '', // класс, добавляемый меню\r\n\r\n\t\tposBy: 'left', // способ привязки позиционирования меню (left/right - левый/правый край родителя, fixed - по окну)\r\n\t\tfrontSelector: '',\r\n\t\tinvertX: false, // базовая ордината - правая граница элемента, а не левая\r\n\t\topenByHover: false, // открывать при наведении\r\n\r\n\t\tuseOriginal: false, // использовать оригинальный шаблон, без клонирвоания (для сохранения состояния меню)\r\n\r\n\t\ttransitionDuration: 100, // значение прописано в css\r\n\r\n\t\tisFullScreen: false,\r\n\t};\r\n\r\n\tevents = {};\r\n\r\n\t/**\r\n\t * Создать Popup\r\n\t * @param el - элемент, открывающий меню\r\n\t * @param options\r\n\t */\r\n\tconstructor(el: HTMLElement, options: PopupOptions) {\r\n\t\tsuper();\r\n\r\n\t\tthis.init(Popup.componentName, el, options);\r\n\t}\r\n\r\n\tasync mount(): Promise<void> {\r\n\t\tif (!(this.el instanceof HTMLElement)) return;\r\n\t\tconst vueConnector = this.vueGetComponent();\r\n\r\n\t\tif (this.el.closest('.top-popup-wrapper')) this.popupParent = Worker.getPopup(this.el.closest('.top-popup-wrapper')!);\r\n\r\n\t\tawait this.mountJQuery();\r\n\r\n\t\tif (DOM.css(this.el, 'position') !== 'absolute') {\r\n\t\t\tthis.el.style.position = 'relative';\r\n\t\t}\r\n\r\n\t\tthis.el.dataset.topPopupOpened = 'opened';\r\n\t\tthis.elActiveByDefault = this.el.classList.contains('top-active');\r\n\t\tthis.el.classList.add('top-active');\r\n\r\n\t\tif (vueConnector) {\r\n\t\t\t// компонент vue Popup\r\n\t\t\tthis.type = 'vue';\r\n\r\n\t\t\tthis.options.popup = '';\r\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup);\r\n\t\t} else if (this.options.popup?.match(/^[#.]/)) {\r\n\t\t\t// selector\r\n\t\t\tthis.type = 'selector';\r\n\r\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.template`) || undefined;\r\n\t\t} else {\r\n\t\t\t// html\r\n\t\t\tthis.type = 'html';\r\n\r\n\t\t\tif (this.options.useOriginal) {\r\n\t\t\t\tthrow ('Option useOriginal not allowed for text templates');\r\n\t\t\t}\r\n\r\n\t\t\tthis.elPopup = DOM.genEl('div', {}, this.options.popup ?? '');\r\n\t\t}\r\n\r\n\t\tif (!this.elPopup || vueConnector?.opened) {\r\n\t\t\t// возможно шаблон не найден, так как он используется в уже открытом меню\r\n\t\t\tif (this.options.useOriginal || vueConnector?.opened) {\r\n\t\t\t\t// закрыть открытое меню\r\n\t\t\t\tif (vueConnector?.opened) {\r\n\t\t\t\t\tthis.elPopup = vueConnector.popup.elPopup;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}.top-popup-wrapper-shown`) || undefined;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (this.elPopup) {\r\n\t\t\t\t\tthis.el.dataset.topPopupOpened = '';\r\n\r\n\t\t\t\t\tif (!this.elActiveByDefault) {\r\n\t\t\t\t\t\tthis.el.classList.remove('top-active');\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tWorker.close(this.elPopup);\r\n\r\n\t\t\t\t\t// повторит попытку открыть меню\r\n\t\t\t\t\tsetTimeout(() => this.mount(), this.options.transitionDuration);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthrow ('Option useOriginal state allowed only elements .template');\r\n\t\t\t}\r\n\r\n\t\t\t// возможно вместо шаблона используется другой элемент\r\n\t\t\tthis.elPopup = document.querySelector<HTMLElement>(`${this.options.popup}:not(.top-popup-wrapper)`) || undefined;\r\n\t\t}\r\n\r\n\t\tif (!this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.options.useOriginal) {\r\n\t\t\tthis.elStartPosition = this.elPopup.closest<HTMLElement>('.top-popup-el-start-position');\r\n\t\t\tif (!this.elStartPosition) {\r\n\t\t\t\tthis.elStartPosition = DOM.wrap(this.elPopup, 'i');\r\n\t\t\t\tthis.elStartPosition.classList.add('top-popup-el-start-position', 'hidden');\r\n\t\t\t}\r\n\t\t} else {\r\n\t\t\tthis.elPopup = this.elPopup.cloneNode(true) as HTMLElement;\r\n\r\n\t\t\t// вывод в меню копии произвольного элемента\r\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template')) {\r\n\t\t\t\tthis.elPopup.classList.remove('hidden');\r\n\r\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\r\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\r\n\t\t\t}\r\n\r\n\t\t\tif (this.type === 'html') {\r\n\t\t\t\tif (!this.elPopup.querySelector(':scope > .top-popup_content')) {\r\n\t\t\t\t\tthis.elPopup.classList.add('top-popup_content');\r\n\r\n\t\t\t\t\tthis.elPopup = DOM.wrap(this.elPopup, 'div');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// вложенный Popup\r\n\t\t\tif (this.type === 'selector' && !this.elPopup.matches('.template') || this.type === 'html' || this.type === 'vue') {\r\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '[data-top-popup]').forEach(el => {\r\n\t\t\t\t\tif (el instanceof HTMLElement) el.dataset.topPopupPosBy = 'fixed';\r\n\t\t\t\t});\r\n\t\t\t\tDOM.querySelectorAllArray(this.elPopup, '.top-popup-wrapper').forEach(el => el.remove());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tWorker.decoratorBeforeOpen(this);\r\n\r\n\t\tif (vueConnector) {\r\n\t\t\tthis.options.class = vueConnector.classRef.value;\r\n\t\t\tif (vueConnector.transitionDurationRef.value !== undefined) {\r\n\t\t\t\tthis.options.transitionDuration = vueConnector.transitionDurationRef.value;\r\n\r\n\t\t\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\t\t\tthis.elPopup.style.setProperty(\r\n\t\t\t\t\t\t'--top-popup-transition-delay',\r\n\t\t\t\t\t\tthis.options.transitionDuration + 'ms',\r\n\t\t\t\t\t);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.elPopupInner = document.createElement('div');\r\n\t\tthis.elPopupInner.classList.add('top-popupPanel', 'top-popup');\r\n\r\n\t\twhile (this.elPopup.firstChild) {\r\n\t\t\tthis.elPopupInner.appendChild(this.elPopup.firstChild);\r\n\t\t}\r\n\r\n\t\tthis.elPopup.append(this.elPopupInner);\r\n\r\n\t\tthis.elPopup.classList.add('top-popup-wrapper');\r\n\r\n\t\tif (this.options.class) {\r\n\t\t\tconst classes = this.options.class.split(' ');\r\n\t\t\tthis.elPopup.classList.add(...classes);\r\n\t\t}\r\n\r\n\t\tif (this.options.notch) {\r\n\t\t\tthis.elPopup.classList.add('with_notch');\r\n\t\t\tthis.elPopup.insertAdjacentHTML('beforeend', '<i class=\"notch notch-border\"></i><i class=\"notch\"></i>');\r\n\t\t}\r\n\r\n\t\tawait this.vueOpen();\r\n\r\n\t\tthis.elPopupHeader = this.elPopupInner.querySelector<HTMLElement>('.top-popup_header');\r\n\t\tthis.elPopupWidget = this.elPopupInner.querySelector<HTMLElement>('.top-popup_widget');\r\n\t\tthis.elPopupBody = this.elPopupInner.querySelector<HTMLElement>('.top-popup_content');\r\n\t\tthis.elPopupFooter = this.elPopupInner.querySelector<HTMLElement>('.top-popup_footer');\r\n\r\n\t\tconst existsWidgetSearch = !!this.elPopup.querySelector('[data-widget=\"search\"]');\r\n\r\n\t\tif (this.options.isFullScreen && !existsWidgetSearch) {\r\n\t\t\tconst i18n = useI18n();\r\n\r\n\t\t\tif (!this.elPopupHeader && i18n.Common.Close) {\r\n\t\t\t\tthis.elPopupHeader = DOM.genEl('i', { class: 'top-popup_header' });\r\n\t\t\t\tthis.elPopupInner.prepend(this.elPopupHeader);\r\n\r\n\t\t\t\tthis.elPopupHeader.prepend(DOM.genEl('i', { class: 'a closer' }, i18n.Common.Close));\r\n\t\t\t\tthis.elPopupHeader.append(DOM.genEl('i', { class: 'top-popup_headerButton' }));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tDOM.storage(this.elPopup, Popup.componentName, this);\r\n\r\n\t\tif (this.options.frontSelector) {\r\n\t\t\tthis.elFront = document.querySelector<HTMLElement>(this.options.frontSelector);\r\n\t\t}\r\n\t\tif (!this.elFront) {\r\n\t\t\tthis.elFront = this.el.closest<HTMLElement>('.top-popup-front');\r\n\t\t}\r\n\t\tif (!this.elFront) {\r\n\t\t\tthis.elFront = document.body;\r\n\t\t}\r\n\r\n\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\tthis.elPopup.style.width = this.el.offsetWidth + 'px';\r\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\r\n\t\t\tthis.elPopup.style.top = this.el.offsetTop + 'px';\r\n\t\t\tthis.elPopup.style.right = parseInt(this.el.style.right || '0') + 'px';\r\n\t\t\tthis.elPopup.style.bottom = parseInt(this.el.style.bottom || '0') + 'px';\r\n\t\t}\r\n\r\n\t\tthis.el.parentElement?.insertBefore(this.elPopup, this.el);\r\n\t\tthis.elPopup.classList.remove('template');\r\n\r\n\t\tif (this.options.invertX) {\r\n\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t}\r\n\r\n\t\tlet fromTop = !!this.el.closest('.modal-header');\r\n\t\tif (!fromTop) {\r\n\t\t\tfromTop = !!this.el.closest('#top_panel');\r\n\t\t}\r\n\t\tif (!fromTop) {\r\n\t\t\tfromTop = !!this.el.closest('#secondmenu');\r\n\t\t}\r\n\t\tif (fromTop) {\r\n\t\t\tthis.elPopup.classList.add('p-from-top');\r\n\t\t}\r\n\r\n\t\t// появление с анимацией\r\n\t\tsetTimeout(() => this.elPopup?.classList.add('top-popup-wrapper-shown'));\r\n\r\n\t\tif (this.elFront && !this.elFront.matches('body')) {\r\n\t\t\tthis.elFront.append(this.elPopup);\r\n\r\n\t\t\tthis.shift.top = DOM.offset(this.el).top - this.el.offsetTop - DOM.offset(this.elFront).top;\r\n\t\t\tthis.shift.left = DOM.offset(this.el).left - this.el.offsetLeft - DOM.offset(this.elFront).left;\r\n\r\n\t\t\t// position() не учитывает margin, замечено для flex\r\n\t\t\tthis.shift.top -= parseInt(this.el.style['margin-top'] || 0);\r\n\t\t\tthis.shift.left -= parseInt(this.el.style['margin-left'] || 0);\r\n\r\n\t\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\t\tthis.elPopup.style.top = parseInt(this.elPopup.style.top || '0') + this.shift.top + 'px';\r\n\t\t\t\tthis.elPopup.style.left = parseInt(this.elPopup.style.left || '0') + this.shift.left + 'px';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (this.$ && Core.$) {\r\n\t\t\tthis.$.trigger('aftershow.top-menu-popup', [Core.$(this.elPopup)]);\r\n\t\t}\r\n\r\n\t\tthis.recalcPosition();\r\n\r\n\t\tthis.elPopup.setAttribute('tabindex', '0');\r\n\t\tthis.focus();\r\n\r\n\t\tWorker.decoratorAfterOpen(this);\r\n\r\n\t\tthis.mountEvents();\r\n\t}\r\n\r\n\tasync mountJQuery() {\r\n\t\tif (!Core.$) return;\r\n\r\n\t\tthis.$ = Core.$(this.el);\r\n\t}\r\n\r\n\t/**\r\n\t * Выполнить фокусировку на нужный элемент после открытия окна\r\n\t */\r\n\tfocus(): void {\r\n\t\tlet el: Element | null;\r\n\r\n\t\tif (this.elPopup) {\r\n\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup-autofocus');\r\n\r\n\t\t\t// поле ввода\r\n\t\t\tif (!el) {\r\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, ':read-write, select:not(:disabled)');\r\n\t\t\t}\r\n\r\n\t\t\t// кнопка\r\n\t\t\tif (!el) {\r\n\t\t\t\tel = DOM.querySelectorVisible(this.elPopup, '.top-popup_footer .top-button');\r\n\t\t\t}\r\n\r\n\t\t\tif (!el) {\r\n\t\t\t\tel = this.elPopup;\r\n\t\t\t}\r\n\r\n\t\t\t// выполнить фокусировку сразу, для применения необъодимых стилей\r\n\t\t\tif (el instanceof HTMLElement) el.focus();\r\n\r\n\t\t\t// выполнить фокусировку после завершения анимации открытия popup\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tif (el instanceof HTMLElement) el.focus();\r\n\t\t\t}, this.options.transitionDuration);\r\n\t\t}\r\n\t}\r\n\r\n\tmountEvents(): void {\r\n\t\t// закрытие при клике вне контекстного меню\r\n\t\tthis.addEventListenerWithUnmount(document, 'mousedown', (e) => this.onMousedown(e as MouseEvent));\r\n\r\n\t\tif (this.elPopup && this.elPopupInner) {\r\n\t\t\t// закрыть другие меню\r\n\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'focus', (e) => this.onFocus(e as FocusEvent));\r\n\r\n\t\t\t// автоматическое закрытие при отведении мыши\r\n\t\t\tif (this.options.openByHover) {\r\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopup, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\r\n\t\t\t\tthis.addEventListenerWithUnmount(this.elPopupInner, 'mouseleave', (e) => this.onMouseleave(e as MouseEvent));\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// не скроллить страницу\r\n\t\tif (this.options.isFullScreen && this.elPopupBody) {\r\n\t\t\tthis.addEventListenerWithUnmount(this.elPopupBody, 'touchmove', (e) => this.onTouchmove(e as TouchEvent));\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Обработка клика вне окна\r\n\t */\r\n\tprivate onMousedown(e: MouseEvent): void {\r\n\t\t// // не оригинальное событие\r\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\t// Popup уже закрыт\r\n\t\tif (!this.elPopup || !(e.target instanceof Element)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик на внешнем элементе\r\n\t\tif (!this.isFirstClick) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isFirstClick = false;\r\n\t\tsetTimeout(() => this.isFirstClick = true);\r\n\r\n\t\t// клик не основной кнопкой мыши\r\n\t\tif (e instanceof MouseEvent && e.button !== 0) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// открыто другое меню с posBy = fixed, сначала должно быть закрыто оно\r\n\t\tlet elPopupOpened = DOM.querySelectorVisibleLast(document.body, ':scope > .top-popup-wrapper');\r\n\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// открыто другое меню в top-popup-front, сначала должно быть закрыто оно\r\n\t\tif (e.target.closest('.top-popup-front')) {\r\n\t\t\telPopupOpened = DOM.querySelectorVisibleLast(e.target.closest('.top-popup-front')!, ':scope > .top-popup-wrapper');\r\n\r\n\t\t\tif (elPopupOpened && elPopupOpened !== this.elPopup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// клик внутри этого меню\r\n\t\tif (this.elPopup.contains(e.target)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// клик вне родительского диалогового окна\r\n\t\tif (this.elPopup.closest('.ui-dialog') && !e.target.closest('.ui-dialog')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (Worker.decoratorIsIgnoreOuterClick(e)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tWorker.close(this.elPopup);\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть другие Popup при фокусе на элемент формы в текущем\r\n\t */\r\n\tprivate onFocus(e: FocusEvent): void {\r\n\t\tif (e.target instanceof Element && e.target.matches('input')) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// // не оригинальное событие\r\n\t\t// if (!e || !e.originalEvent || !e.originalEvent.isTrusted) {\r\n\t\t// \treturn;\r\n\t\t// }\r\n\r\n\t\t// это окно уже закрывается\r\n\t\tif (this.isClosed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst elsPopups = Worker.getAllVisible();\r\n\t\telsPopups.forEach(elPopup => {\r\n\t\t\t// фокус внутри этого окна\r\n\t\t\tif (this.elPopup?.contains(elPopup)) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\t// это Popup из которого был открыт Popup с фокусом\r\n\t\t\t// глубина вложенности: до 3 подменю\r\n\t\t\tif (\r\n\t\t\t\tthis.popupParent?.elPopup === elPopup ||\r\n\t\t\t\tthis.popupParent?.popupParent?.elPopup === elPopup\r\n\t\t\t) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.close(elPopup);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть Popup при отведении мыши\r\n\t */\r\n\tprivate onMouseleave(_e: MouseEvent): void {\r\n\t\tsetTimeout(() => {\r\n\t\t\tif (this.elPopupInner && this.elPopupInner.matches(':hover') || !this.elPopup) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tWorker.close(this.elPopup);\r\n\t\t}, 100);\r\n\t}\r\n\r\n\t/**\r\n\t * Контроль положения Popup при fixed позиционировании\r\n\t */\r\n\tprivate onResize(): void {\r\n\t\t// на android при вызове метода append сбрасывается фокус с input внутри this.elPopup\r\n\t\tif (this.elPopup && this.elPopup.parentElement !== document.body) {\r\n\t\t\tdocument.body.append(this.elPopup);\r\n\t\t}\r\n\r\n\t\tif (this.elPopup instanceof HTMLElement) {\r\n\t\t\tthis.elPopup.style.top = DOM.offset(this.el).top + 'px';\r\n\t\t\tthis.elPopup.style.left = DOM.offset(this.el).left + 'px';\r\n\t\t}\r\n\t}\r\n\r\n\tunmount(): void {\r\n\t\tsuper.unmount();\r\n\r\n\t\tif (this.el instanceof HTMLElement) this.el.dataset.topPopupOpened = '';\r\n\t\tif (!this.elActiveByDefault) {\r\n\t\t\tthis.el.classList.remove('top-active');\r\n\t\t}\r\n\r\n\t\tlet style = this.el.getAttribute('style');\r\n\t\tif (style) {\r\n\t\t\tstyle = style.replace(/position:[^;]*;?/g, '');\r\n\t\t\tthis.el.setAttribute('style', style);\r\n\t\t}\r\n\t}\r\n\r\n\t// контроль за положением Popup, чтобы оно не вылезало за пределы документа\r\n\trecalcPosition(): void {\r\n\t\tif (!(this.elPopup instanceof HTMLElement)) return;\r\n\r\n\t\tlet p = this.options.p;\r\n\t\tlet leftPos: number;\r\n\r\n\t\tif (this.el instanceof HTMLElement) {\r\n\t\t\tthis.elPopup.style.height = this.el.offsetHeight + 'px';\r\n\r\n\t\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\r\n\t\t\tthis.elPopup.classList.add('p' + p);\r\n\r\n\t\t\tswitch (this.options.posBy) {\r\n\t\t\t\tcase 'left':\r\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\r\n\t\t\t\t\tleftPos += this.shift.left;\r\n\t\t\t\t\tthis.elPopup.style.left = leftPos + 'px';\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'right':\r\n\t\t\t\t\tif (!(this.el.offsetParent instanceof HTMLElement)) break;\r\n\r\n\t\t\t\t\tleftPos = this.el.offsetLeft + parseInt(this.el.style['margin-left'] || '0');\r\n\t\t\t\t\tthis.elPopup.style.right = this.el.offsetParent.offsetWidth - this.el.offsetWidth - leftPos + 'px';\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'fixed':\r\n\t\t\t\t\tthis.addEventListenerWithUnmount(window, 'resize', () => this.onResize());\r\n\r\n\t\t\t\t\tthis.onResize();\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tthis.options.posBy?.append(this.elPopup);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// контроль за пложением Popup, чтобы оно не вылезало за пределы документа\r\n\t\tconst boundingClientRect = this.elPopup.getBoundingClientRect();\r\n\t\tthis.elPopup.style.setProperty('--top-popup-height', this.elPopup.offsetHeight + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-right-bounding', boundingClientRect.right + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-bottom-bounding', boundingClientRect.bottom + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-top', boundingClientRect.top + 'px');\r\n\t\tthis.elPopup.style.setProperty('--top-popup-left', boundingClientRect.left + 'px');\r\n\r\n\t\tif (this.elPopupInner instanceof HTMLElement) {\r\n\t\t\tthis.elPopupInner.style.maxWidth = 'unset';\r\n\t\t\tthis.elPopupInner.style.maxHeight = 'unset';\r\n\t\t}\r\n\r\n\t\tlet outTop = false;\r\n\t\tlet outRight = false;\r\n\t\tlet outBottom = false;\r\n\t\tlet outLeft = false;\r\n\r\n\t\t// имеет ли смысл прикреплять окно к другой стороне кнопки\r\n\t\tlet usefulInvertX = boundingClientRect.left > window.innerWidth / 2;\r\n\t\tlet usefulInvertY = boundingClientRect.top > window.innerHeight / 2;\r\n\r\n\t\tif (p === 4) {\r\n\t\t\tusefulInvertX = !usefulInvertX;\r\n\t\t}\r\n\r\n\t\tif (p === 1) {\r\n\t\t\tusefulInvertY = !usefulInvertY;\r\n\t\t}\r\n\r\n\t\tconst contentBoundingClientRect = this.elPopupInner?.getBoundingClientRect();\r\n\t\tlet contentRight: number;\r\n\t\tlet contentBottom: number;\r\n\r\n\t\tif (contentBoundingClientRect) {\r\n\t\t\tcontentRight = window.innerWidth - contentBoundingClientRect.right;\r\n\t\t\tcontentBottom = window.innerHeight - contentBoundingClientRect.bottom;\r\n\r\n\t\t\tconst margin = 8;\r\n\r\n\t\t\tif (contentBoundingClientRect.top < margin) {\r\n\t\t\t\toutTop = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (contentRight < margin) {\r\n\t\t\t\toutRight = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (contentBottom < margin) {\r\n\t\t\t\toutBottom = true;\r\n\t\t\t}\r\n\r\n\t\t\tif (contentBoundingClientRect.left < margin) {\r\n\t\t\t\toutLeft = true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (outTop && (p === 0 || p === 1) && usefulInvertY) {\r\n\t\t\tp = 3;\r\n\t\t}\r\n\r\n\t\tif (outBottom && p === 3 && usefulInvertY) {\r\n\t\t\tp = 1;\r\n\t\t}\r\n\r\n\t\tif (outRight && p === 2 && usefulInvertX) {\r\n\t\t\tp = 4;\r\n\t\t}\r\n\r\n\t\tif (outLeft && p === 4 && usefulInvertX) {\r\n\t\t\tp = 2;\r\n\t\t}\r\n\r\n\t\tif (outRight && (p === 0 || p === 1 || p === 3)) {\r\n\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t}\r\n\r\n\t\tif (outBottom && (p === 2 || p === 4) && usefulInvertY) {\r\n\t\t\t// меню справа может перемещаться вверх, толкьо если есть место слева\r\n\t\t\tif (p === 2 && !usefulInvertX) {\r\n\t\t\t\tthis.elPopup.classList.add('invert-y');\r\n\t\t\t}\r\n\r\n\t\t\t// меню слева перемещаясь вверх, должно открываться влево\r\n\t\t\tif (p === 4 && !usefulInvertX) {\r\n\t\t\t\tthis.elPopup.classList.add('invert-x');\r\n\t\t\t}\r\n\r\n\t\t\tif (!this.elPopup.matches('.invert-y')) {\r\n\t\t\t\tp = 1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.elPopup.classList.remove('p0', 'p1', 'p2', 'p3', 'p4');\r\n\t\tthis.elPopup.classList.add('p' + p);\r\n\r\n\t\tif (this.elPopupInner instanceof HTMLElement) {\r\n\t\t\tthis.elPopupInner.style.maxWidth = '';\r\n\t\t\tthis.elPopupInner.style.maxHeight = '';\r\n\t\t}\r\n\r\n\t\tWorker.scrollToActive(this.elPopup);\r\n\t};\r\n\r\n\tonTouchmove(e: TouchEvent): void {\r\n\t\tif (e.currentTarget instanceof HTMLElement && e.target instanceof HTMLElement) {\r\n\t\t\t// разрешить горизональный скролл\r\n\t\t\tlet hasScrollX = e.currentTarget.scrollWidth > e.currentTarget.offsetWidth;\r\n\t\t\tif (hasScrollX) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (e.target.parentElement?.scrollWidth && e.target.parentElement?.offsetWidth) {\r\n\t\t\t\t// разрешить горизональный скролл\r\n\t\t\t\tlet hasScrollX2 = e.target.parentElement.scrollWidth > e.target.parentElement?.offsetWidth;\r\n\t\t\t\tif (hasScrollX2) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!e.currentTarget.matches('.has_scroll')) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tclose(): void {\r\n\t\tif (this.isClosed) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.isClosed = true;\r\n\r\n\t\tif (this.$ && Core.$ && this.elPopup) {\r\n\t\t\tthis.$.trigger('afterclose.top-menu-popup', [Core.$(this.elPopup)]);\r\n\t\t}\r\n\r\n\t\tif (Worker.noClose) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.unmount();\r\n\r\n\t\tthis.elPopup?.classList.add('top-popup-wrapper-closed');\r\n\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.vueClose();\r\n\r\n\t\t\tif (!this.elPopup) return;\r\n\r\n\t\t\tif (this.options.useOriginal) {\r\n\t\t\t\tthis.elPopup.removeAttribute('style');\r\n\t\t\t\tthis.elPopup.classList.remove('top-popup-wrapper-shown', 'top-popup-wrapper-closed');\r\n\t\t\t\tthis.elPopup.classList.add('template');\r\n\t\t\t\tthis.elStartPosition?.append(this.elPopup);\r\n\r\n\t\t\t\tthis.elPopup.querySelector('div.top-popup_content.top-column')?.classList.remove('top-column');\r\n\t\t\t\tthis.elPopup.querySelector('.notch-border')?.remove();\r\n\t\t\t\tthis.elPopup.querySelector('.notch')?.remove();\r\n\r\n\t\t\t\tthis.elPopupInner?.replaceWith(...this.elPopupInner.childNodes);\r\n\r\n\t\t\t\tDOM.storageClear(this.elPopup);\r\n\t\t\t} else {\r\n\t\t\t\tDOM.storageClear(this.elPopup);\r\n\r\n\t\t\t\tthis.elPopup.remove();\r\n\t\t\t\tdelete this.elPopup;\r\n\t\t\t}\r\n\r\n\t\t\tconst elsPopups = Worker.getAllVisible();\r\n\t\t\tconst elPopupLast = elsPopups.length && elsPopups[elsPopups.length - 1];\r\n\r\n\t\t\tif (elPopupLast) {\r\n\t\t\t\tWorker.getPopup(elPopupLast).focus();\r\n\t\t\t} else {\r\n\t\t\t\tdocument.documentElement.classList.remove('with_popup');\r\n\t\t\t}\r\n\t\t}, this.options.transitionDuration);\r\n\t}\r\n\r\n\tasync vueOpen(): Promise<void> {\r\n\t\tawait this.vueGetComponent()?.onOpen(this);\r\n\t}\r\n\r\n\tvueClose(): void {\r\n\t\tthis.vueGetComponent()?.onClose(this);\r\n\t}\r\n\r\n\t// получить vueConnectors компонента Popup\r\n\tvueGetComponent() {\r\n\t\tif (this.el instanceof HTMLElement && this.options.id) return Worker.vueConnectors.get(this.options.id);\r\n\t}\r\n}\r\n\r\nGlobalEvents.init();\r\n\r\nexport default Popup;\r\n"],"names":["Component","componentName","el","options","component","DOM","eventData","type","listener","_options","nodes","node","_a","GlobalEvents","e","elCloser","elPopup","elUl","elItem","Worker","elBtn","elFooterLastBtn","elLink","elItemActive","elMore","elsLiVisible","countLi","index","_b","Core","css","cssM","cssPC","Popup","vueConnector","classes","existsWidgetSearch","i18n","useI18n","fromTop","elPopupOpened","_d","_c","_e","style","p","leftPos","boundingClientRect","outTop","outRight","outBottom","outLeft","usefulInvertX","usefulInvertY","contentBoundingClientRect","contentRight","contentBottom","margin","elsPopups","elPopupLast"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-B3ycYRqM.amd.js","sources":["../../src/components/dialog/lib/utils.globalEvents.ts","../../src/components/dialog/lib/utils.ts"],"sourcesContent":["import { TopDialogUtils } from './utils';\r\nimport { TopDialogWorker } from './worker';\r\nimport { querySelectorVisible } from '@/core/utils/dom';\r\nimport type { $el } from '@/components/types';\r\n\r\nlet inited = false;\r\n\r\n/**\r\n * Инициализация глобальных событий для диалоговых окон\r\n *\r\n * Проивзодится один раз при подклчюении диалогового окна\r\n *\r\n * События не размонитруются\r\n */\r\nexport const initDialogGlobalEvents = () => {\r\n\tif (inited) return;\r\n\tinited = true;\r\n\r\n\t/**\r\n\t * Закрытие диалога по Esc\r\n\t */\r\n\tdocument.addEventListener('keydown', (e) => {\r\n\t\tif (e.key !== 'Escape') return;\r\n\t\tif (!e.target) return;\r\n\r\n\t\tconst el = e.target as HTMLElement;\r\n\r\n\t\t// событие произошло вне диалогового окна\r\n\t\tif (!el.closest('.ui-dialog')) return;\r\n\r\n\t\tif (el.contentEditable === 'true' || el.contentEditable === 'plaintext-only') return;\r\n\r\n\t\t// не закрывать окно при открытом TopPopup\r\n\t\tif (querySelectorVisible(document.documentElement, '.top-popup-wrapper')) return;\r\n\r\n\t\t// не закрывать окно при работе с jquery autocomplete\r\n\t\tif (el.classList.contains('autocomplete')) return;\r\n\r\n\t\t// не закрывать окно при открытом fancybox\r\n\t\tif (querySelectorVisible(document.documentElement, '.fancybox-container')) return;\r\n\r\n\t\t$('.ui-dialog-content:visible:last').dialog('close');\r\n\t});\r\n\r\n\t/**\r\n\t * Закрытие диалога по кнопке закрыть\r\n\t */\r\n\t$(document).on('click', '[data-action=\"top-dialog-close\"]', (e) => {\r\n\t\te.preventDefault();\r\n\r\n\t\t// // навигация без истории\r\n\t\t// var $dialog = $(this).closest('.ui-dialog-content');\r\n\t\t// var viewName = $dialog.attr('id');\r\n\t\t// var pageName = getHash('view-' + viewName);\r\n\t\t// if (!pageName) {\r\n\t\t// \ttoPrevPage($dialog);\r\n\t\t//\r\n\t\t// \treturn;\r\n\t\t// }\r\n\t\t//\r\n\t\t// // навигация по истории\r\n\t\t// if (Core.state.isMobile && history.length > 1 && $(this).closest('.modal-layer').length) {\r\n\t\t// \tvar href = location.href;\r\n\t\t//\r\n\t\t// \thistory.go(-1);\r\n\t\t//\r\n\t\t// \tsetTimeout(() => {\r\n\t\t// \t\t// это первая страница в истории вкладки браузера\r\n\t\t// \t\tif (href === location.href) $(e.target).closest('.ui-dialog-content').dialog('close');\r\n\t\t// \t});\r\n\t\t// } else {\r\n\t\t// \t$(this).closest('.ui-dialog-content').dialog('close');\r\n\t\t// }\r\n\r\n\t\tconst el = e.target.closest('[data-action=\"top-dialog-close\"]');\r\n\r\n\t\tconst elDialog = el.closest('.ui-dialog-content');\r\n\t\tif (!elDialog) return;\r\n\r\n\t\tconst $dialog = $(elDialog);\r\n\r\n\t\t// если к кнопке привязана ссылка, диалоговое окно не нужно закрывать\r\n\t\tconst toView = el.dataset.toView;\r\n\r\n\t\tif (toView == 'toPrevPage()') {\r\n\t\t\tTopDialogUtils.toPrevPage($dialog);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (toView) {\r\n\t\t\tvar viewNameAndPageLink = toView.split('-');\r\n\t\t\tvar viewName = viewNameAndPageLink.shift();\r\n\t\t\tvar pageLink = viewNameAndPageLink.join('-');\r\n\r\n\t\t\tvar $toDialog = $('#' + viewName);\r\n\t\t\tvar $toPage = $('[data-view-page=\"' + pageLink + '\"]', $toDialog);\r\n\t\t\tif (!$toPage.is(':visible')) {\r\n\t\t\t\tconst hash = TopDialogWorker.genViewPageHash(toView, 'prev');\r\n\r\n\t\t\t\t// добавляет текущую страницу в историю браузера\r\n\t\t\t\tlocation.hash = hash;\r\n\r\n\t\t\t\t// // не убирает кнопку \"Вперед\" в браузере\r\n\t\t\t\t// history.replaceState(null, '', hash);\r\n\t\t\t\t// toViewDirty(toView, 'prev');\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$dialog.dialog('close');\r\n\t});\r\n\r\n\t/**\r\n\t * Все submit должны обрабатываться через js\r\n\t */\r\n\t$(document).on('submit', '.modal-body > form, .modal-layer-body > form', function (e) {\r\n\t\te.preventDefault();\r\n\t});\r\n\r\n\t/**\r\n\t * Выполнение действия по нажатию Enter\r\n\t *\r\n\t * @todo Убрать `.searcher`\r\n\t */\r\n\t$(document).on('keypress', '.ui-dialog .modal-body :input:not(.searcher), .ui-dialog .modal-body [contenteditable]', function (e) {\r\n\t\t// if (e.keyCode !== 10 && e.key !== 'ENTER') return;\r\n\t\tif (e.key !== 'ENTER') return;\r\n\r\n\t\t// не выполнять submit действий при работе с jquery autocomplete\r\n\t\tif (e.target.classList.contains('autocomplete')) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// реализация submit по ctrl + Enter\r\n\t\tif (e.target.tagName === 'TEXTAREA') {\r\n\t\t\tif (!e.ctrlKey && !e.metaKey) return;\r\n\r\n\t\t\tconst elForm = e.target.closest('form');\r\n\r\n\t\t\tif (elForm) {\r\n\t\t\t\tlet elSubmit = $(':submit:visible', elForm)[0];\r\n\t\t\t\tif (!elSubmit) elSubmit = $(':submit:visible', elForm)[0];\r\n\r\n\t\t\t\telSubmit?.click();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t/**\r\n\t * Закрытие диалога по клику вне окна\r\n\t */\r\n\t$(document).on('click', '.ui-widget-overlay', function () {\r\n\t\tlet $dialogWrapper: $el | undefined = undefined;\r\n\t\tlet topZIndex = 0;\r\n\r\n\t\t$('.ui-dialog:visible').each((_index, el) => {\r\n\t\t\tconst zIndex = Number($(el).css('z-index'));\r\n\t\t\tif (zIndex < topZIndex) return;\r\n\r\n\t\t\t$dialogWrapper = $(el);\r\n\t\t\ttopZIndex = zIndex;\r\n\t\t});\r\n\r\n\t\tif ($dialogWrapper) {\r\n\t\t\t$('.ui-dialog-content', $dialogWrapper).dialog('close');\r\n\t\t}\r\n\t});\r\n\r\n\t$(window).on('resize', TopDialogUtils.recalcPositions);\r\n\tTopDialogUtils.recalcPositions();\r\n};\r\n","import 'jquery';\r\nimport { nextTick } from 'vue';\r\n\r\nimport Core from '@/core/core/core';\r\nimport { TopPopupWorker } from '@/components/popup/worker';\r\nimport { sleep, waitWhile } from '@/core/utils/system';\r\nimport { setHash } from '@/core/utils/route';\r\nimport { connectScrollShadow } from '@/core/utils/scroll';\r\n\r\nimport type { MoveDirection } from './types';\r\nimport { TopDialogWorker } from './worker';\r\nimport { initDialogGlobalEvents } from './utils.globalEvents';\r\nimport { getDialogWorker } from '../dialog/dialogs/dialogs.vue';\r\n\r\nimport css from '../dialog/style/dialog.css?inline';\r\nimport cssM from '../dialog/style/dialog.m.css?inline';\r\nimport cssPC from '../dialog/style/dialog.pc.css?inline';\r\nimport cssModern from '../dialog/style/modern/dialog.css?inline';\r\nimport cssModernPC from '../dialog/style/modern/dialog.pc.css?inline';\r\nimport type { $el } from '@/components/types';\r\n\r\nCore.insertStyleToPage(css);\r\nCore.insertStyleToPage(cssM, 'm');\r\nCore.insertStyleToPage(cssPC, 'pc');\r\nCore.insertStyleToPage(cssModern);\r\nCore.insertStyleToPage(cssModernPC, 'pc');\r\n\r\nlet timerClearAnimation: NodeJS.Timeout;\r\nlet isInited = false;\r\n\r\nconst init = () => {\r\n\t// if(window.history && history.length == 1) setHash('vpn', null);\r\n\r\n\t$.extend($.ui.dialog.prototype.options, {\r\n\t\tfocus: (e: any) => {\r\n\t\t\te.target.focus();\r\n\r\n\t\t\t$('[autofocus]', e.target)[0]?.focus();\r\n\r\n\t\t\t// setTimeout(function () {\r\n\t\t\t// \tif ($('[autofocus]', e.target).length) return;\r\n\t\t\t// \t$('.modal-footer button:first, .modal-body :input:first', e.target).eq(0).focus();\r\n\t\t\t//\r\n\t\t\t// \t// fix пропадающего autocomplete при нажатии на scroll в autocomplete\r\n\t\t\t// \t$(e.target).add($(e.target).closest('.ui-dialog')).removeAttr('tabindex');\r\n\t\t\t// });\r\n\t\t},\r\n\t\tcreate: (e: any) => onCreate(e.target),\r\n\t\topen: (e: any) => onOpen(e.target),\r\n\t\tclose: (e: any) => onClose(e.target),\r\n\t\tmodal: true,\r\n\t\tresizable: false,\r\n\t\tcloseOnEscape: false,\r\n\t\twidth: 'auto',\r\n\t\tminHeight: 0,\r\n\t});\r\n\r\n\t$.ui.dialog.prototype._focusTabbable = $.noop;\r\n\r\n\t$.ui.dialog.prototype._moveToTopOriginal = $.ui.dialog.prototype._moveToTop;\r\n\t$.ui.dialog.prototype._moveToTop = function () {\r\n\t\tthis._moveToTopOriginal();\r\n\r\n\t\tconst $dialog = $(this.element);\r\n\t\t$dialog.trigger('dialogsMoveToTop', [$dialog]);\r\n\t};\r\n\r\n\tinitDialogGlobalEvents();\r\n\r\n\tisInited = true;\r\n};\r\n\r\n/**\r\n * Получить настройки диалогового окна из Vue компонента\r\n */\r\nconst genVueOptions = ($dialog: $el) => {\r\n\tconst options: {\r\n\t\tmodal?: boolean,\r\n\t\tposition?: any,\r\n\t} = {};\r\n\r\n\tif ($dialog[0]?.dataset?.modal === 'false') options.modal = false;\r\n\tif ($dialog[0]?.dataset?.position) options.position = JSON.parse($dialog[0].dataset.position);\r\n\r\n\treturn options;\r\n};\r\n\r\n/**\r\n * Сменить состояние диалогового окна Vue\r\n */\r\nconst updatePageVue = async (dialogId: string, pageName?: string, pageNameNext?: string) => {\r\n\tif (!dialogId.startsWith('dialog_')) return;\r\n\r\n\tconst dialog = getDialogWorker(dialogId);\r\n\tif (!dialog) return;\r\n\r\n\tdialog.isOpened.value = true;\r\n\tif (pageName !== undefined) dialog.pageActive.value = pageName;\r\n\tif (pageNameNext !== undefined) dialog.pageActiveNext.value = pageNameNext;\r\n\r\n\tawait nextTick();\r\n\r\n\tif (pageNameNext) {\r\n\t\tconst $dialog = $('#' + dialogId);\r\n\t\tconst $nextPage = $('[data-view-page=\"' + pageNameNext + '\"]', $dialog);\r\n\r\n\t\tif (!$nextPage.length) {\r\n\t\t\tawait waitWhile(() => !$('[data-view-page=\"' + pageNameNext + '\"]', $dialog).length);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst onCreate = (elDialog: HTMLElement) => {\r\n\tvar $dialog = $(elDialog);\r\n\tvar $dialogBody = $('.modal-body', $dialog);\r\n\r\n\tconnectScrollShadow($dialogBody[0]);\r\n};\r\n\r\n/**\r\n * Callback for jQuery dialog onOpen\r\n */\r\nconst onOpen = async (elDialog: HTMLElement) => {\r\n\tvar $dialog = $(elDialog);\r\n\tvar pageName = $dialog.data('view-page-active');\r\n\r\n\tconst w1 = Number($(window).width());\r\n\r\n\tCore.state.documentClassModificators.set('top-dialog', 'with_dialog');\r\n\r\n\tconst w2 = Number($(window).width());\r\n\r\n\tconst scrollBarWidth = w2 - w1;\r\n\tif (Number($(document).height()) > Number($(window).height())) $('html').css({ 'margin-right': scrollBarWidth + 'px' });\r\n\r\n\trecalcPositions();\r\n\r\n\tconst dialog = getDialogWorker($dialog.attr('id') as string);\r\n\tdialog?.emit?.('open', pageName);\r\n};\r\n\r\n/**\r\n * Callback for jQuery dialog onClose\r\n */\r\nconst onClose = async (elDialog: HTMLElement) => {\r\n\tvar $dialog = $(elDialog);\r\n\r\n\tvar viewName = $dialog.attr('id');\r\n\tvar pageName = $dialog.data('view-page-active');\r\n\tif (pageName) {\r\n\t\tsetHash('vpn', TopDialogWorker.state.viewPageN);\r\n\t\tsetHash('view-' + viewName, null, false);\r\n\r\n\t\tif (TopDialogWorker.state.viewPageN === 0 || TopDialogWorker.state.viewPageN === 1) setHash('vpn', null);\r\n\t}\r\n\r\n\tif (!$('.ui-widget-overlay:visible').length){\r\n\t\tCore.state.documentClassModificators.delete('top-dialog');\r\n\r\n\t\t$('html').css({ 'margin-right': '' });\r\n\t}\r\n\r\n\t$dialog.trigger('viewAfterClose', [$dialog]);\r\n\r\n\tconst dialog = getDialogWorker($dialog.attr('id') as string);\r\n\tif (dialog) {\r\n\t\tdialog.isOpened.value = false;\r\n\t\tdialog.emit?.('close', pageName);\r\n\r\n\t\tif (dialog.onCloseOnce) {\r\n\t\t\tdialog.onCloseOnce(dialog.props, pageName);\r\n\t\t\tdialog.onCloseOnce = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t// после закрытия диалога может потребоваться пересчет позиций элементов\r\n\twindow.dispatchEvent(new Event('resize'));\r\n};\r\n\r\n/**\r\n * Пересчитать положения и размеры открытых диалоговых окон\r\n */\r\nconst recalcPositions = () => {\r\n\t$('.ui-dialog:visible > .ui-dialog-content').each((_index, eldDialog: HTMLElement) => {\r\n\t\tconst $dialog = $(eldDialog);\r\n\t\tconst $dialogBody = $('.modal-body:visible', $dialog);\r\n\t\tconst $ui = $dialog.closest('.ui-dialog');\r\n\r\n\t\tif (!$dialogBody.length) return;\r\n\r\n\t\tconst options = genVueOptions($dialog);\r\n\r\n\t\toptions.position ??= { of: window };\r\n\r\n\t\t$dialog.dialog('option', options);\r\n\r\n\t\t$ui.removeClass('me-tightly');\r\n\t\tif (Number($ui.height()) > Number($(window).height())) $ui.addClass('me-tightly');\r\n\t});\r\n};\r\n\r\n// переход к view page по неразобранной ссылке в формате: {viewName}-{pageName}[:args]\r\nconst toViewDirty = async (toViewPageName: string, moveDirection?: MoveDirection) => {\r\n\tconst regexp = /(\\w+)[=-]([\\w-]+)(?::([\\w.:-]+))?/g;\r\n\tconst toViewParts = regexp.exec(toViewPageName);\r\n\tif (toViewParts) {\r\n\t\tconst viewName = toViewParts[1];\r\n\t\tconst pageName = toViewParts[2];\r\n\t\tconst argsString = toViewParts[3];\r\n\r\n\t\tlet args: string[] = [];\r\n\t\tif (argsString) args = argsString.split(':');\r\n\r\n\t\tawait toView(viewName, pageName, args, moveDirection);\r\n\t}\r\n};\r\n\r\n/**\r\n * Открыть диалоговое окно, возможно указать нужную страницу\r\n * @param {string|$} viewNameOr$Dialog - id страницы окна или jQuery элемент окна\r\n * @param {?string} pageName - имя страницы\r\n * @param {?Array<any>} args - аргументы, набор проивзольных параметров, которые могут обрабатываться каждым окном по своему\r\n * @param {?Function} callback - функция, которая будет запущена после октытия страницы\r\n */\r\nconst toView = async (\r\n\tviewNameOr$Dialog: $el | string,\r\n\tpageName?: string,\r\n\targs?: string[],\r\n\tmoveDirection?: MoveDirection,\r\n\tcallback?: Function,\r\n) => {\r\n\tif (!isInited) {\r\n\t\tawait new Promise<void>((resolve, _reject) => {\r\n\t\t\tconst timer = setInterval(() => {\r\n\t\t\t\tif (!isInited) return;\r\n\r\n\t\t\t\tclearInterval(timer);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}, 10);\r\n\t\t});\r\n\t}\r\n\r\n\tawait nextTick();\r\n\r\n\tlet $dialog: $el;\r\n\tif (typeof (viewNameOr$Dialog) === 'object') {\r\n\t\t$dialog = viewNameOr$Dialog;\r\n\t} else {\r\n\t\t$dialog = $('#' + viewNameOr$Dialog);\r\n\t}\r\n\r\n\t// Диалоговое окно еще не загружено\r\n\tif (!$dialog.length && typeof (viewNameOr$Dialog) == 'string' && TopDialogWorker.state.load) {\r\n\t\tawait TopDialogWorker.state.load(viewNameOr$Dialog);\r\n\r\n\t\ttoView(viewNameOr$Dialog, pageName, args, moveDirection, callback);\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tawait toViewPage($dialog, pageName, args, moveDirection);\r\n\r\n\tif ($dialog.is('.ui-dialog-content')) {\r\n\t\t// var zIndexMax = 0;\r\n\t\t// $.map($('.ui-dialog'), function (el) {\r\n\t\t// \tvar zIndex = $(el).css('z-index') * 1;\r\n\t\t// \tif (zIndex > zIndexMax) zIndexMax = zIndex;\r\n\t\t// });\r\n\t\t//\r\n\t\t// if ($dialog.is(':hidden')) $dialog.dialog('open');\r\n\t\t//\r\n\t\t// var $dialogWrapper = $dialog.parent();\r\n\t\t// var $dialogOverlay = $dialogWrapper.next();\r\n\t\t//\r\n\t\t// if ($dialogWrapper.css('z-index') * 1 < zIndexMax) {\r\n\t\t// \t$dialogWrapper.css('z-index', zIndexMax + 2);\r\n\t\t// \t$dialogOverlay.css('z-index', zIndexMax + 1);\r\n\t\t// }\r\n\r\n\t\t$dialog.dialog('open');\r\n\t} else {\r\n\t\tconst options = genVueOptions($dialog);\r\n\r\n\t\t$dialog.dialog(options);\r\n\t}\r\n\r\n\tif (callback) callback($dialog);\r\n};\r\n\r\nconst toViewPage = async ($dialog: $el, pageName?: string, args?: string[], moveDirection?: MoveDirection) => {\r\n\tif (pageName === undefined) pageName = $dialog.data('view-page-active') as string;\r\n\r\n\tif (pageName != $dialog.data('view-page-active')) {\r\n\t\tvar stopped = stopAnimations($dialog);\r\n\t\tif (stopped) await sleep(100);\r\n\t}\r\n\r\n\tif (args === undefined) args = [];\r\n\r\n\tawait updatePageVue($dialog.attr('id') as string, undefined, pageName);\r\n\r\n\tvar $modalLayers = $('> .modal-layer', $dialog);\r\n\tvar $currentPage = $('> .active', $modalLayers);\r\n\tvar $nextPage = $('> [data-view-page=\"' + pageName + '\"]', $modalLayers);\r\n\tvar argsString = args.join(':');\r\n\r\n\tif (moveDirection === undefined) {\r\n\t\tmoveDirection = 'next';\r\n\t\tif ($nextPage.data('order') < $currentPage.data('order')) moveDirection = 'prev';\r\n\t}\r\n\r\n\tif (!$nextPage.length) return;\r\n\r\n\t$dialog.data('view-page-active', pageName);\r\n\r\n\t// запрашиваемая страница уже открыта\r\n\tif ($nextPage.is('.active')) {\r\n\t\tif ($nextPage.data('view-page-args') != argsString) {\r\n\t\t\t$nextPage.data('view-page-args', argsString);\r\n\r\n\t\t\t// dialogs.beforeOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t\t// dialogs.afterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t}\r\n\r\n\t\tbeforeOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\tafterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\t$nextPage.data('view-page-args', argsString);\r\n\r\n\tif ($('.top-popup-wrapper', $currentPage).length) {\r\n\t\tTopPopupWorker.close($('.top-popup-wrapper', $currentPage)[0]);\r\n\t}\r\n\r\n\tif ($nextPage.closest('.ui-dialog').is(':hidden')) moveDirection = 'none';\r\n\tif (!$currentPage.length) moveDirection = 'none';\r\n\tif ($nextPage.is(':visible')) moveDirection = 'none';\r\n\tswitch (moveDirection) {\r\n\t\tcase 'prev':\r\n\t\t\t$nextPage.each((_index, el) => {\r\n\t\t\t\t$(el).insertBefore($(el).siblings('.active'));\r\n\t\t\t});\r\n\r\n\t\t\t$currentPage.addClass('right-to-center reverse');\r\n\t\t\t$nextPage.addClass('center-to-left reverse');\r\n\r\n\t\t\tbreak;\r\n\t\tcase 'next':\r\n\t\t\t$nextPage.each((_index, el) => {\r\n\t\t\t\t$(el).insertAfter($(el).siblings('.active'));\r\n\t\t\t});\r\n\r\n\t\t\t$currentPage.addClass('center-to-left');\r\n\t\t\t$nextPage.addClass('right-to-center');\r\n\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t$dialog.attr('view-page-active', pageName);\r\n\r\n\t$currentPage.removeClass('active');\r\n\t$nextPage.addClass('active');\r\n\r\n\tbeforeOpenViewPage($dialog, $nextPage, pageName, args);\r\n\r\n\tif (moveDirection) {\r\n\t\t$dialog.addClass('i-change-page');\r\n\t\tconst delay = Number($nextPage.css('animation-duration').replace('s', '')) * 1000;\r\n\r\n\t\ttimerClearAnimation = setTimeout(function () {\r\n\t\t\tupdatePageVue($dialog.attr('id') as string, pageName, '');\r\n\t\t\tstopAnimations($dialog);\r\n\t\t\tafterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t}, delay);\r\n\t} else {\r\n\t\tawait updatePageVue($dialog.attr('id') as string, pageName, '');\r\n\t\tafterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t}\r\n};\r\n\r\n/**\r\n * К предыдущему представлению\r\n */\r\nconst toPrevPage = ($dialog: $el) => {\r\n\tvar prevPageName = '';\r\n\r\n\tvar $modalLayers = $('> .modal-layer', $dialog);\r\n\tvar $currentPage = $('> .active', $modalLayers).eq(0);\r\n\tvar $prevPage = $currentPage.prev('[data-view-page]');\r\n\tprevPageName = $prevPage.data('view-page');\r\n\r\n\tif (prevPageName) {\r\n\t\ttoViewPage($dialog, prevPageName, undefined, 'prev');\r\n\t} else {\r\n\t\t$dialog.dialog('close');\r\n\t}\r\n};\r\n\r\n/**\r\n * Для обработки событий вне vue\r\n */\r\nconst beforeOpenViewPageTimers = new Set();\r\nconst beforeOpenViewPage = ($dialog: $el, $page: $el, pageName: string, args: string[]) => {\r\n\t// группировка цепочки событий\r\n\t// запрос на открытие страницы может выполняться несколько раз, чаще такое может быть при открытии, загрузке и переходе сразу к нужной странице\r\n\tconst eventKey = $dialog.attr('id') + $page.eq(0).data('view-page') + pageName + args.join();\r\n\r\n\tif (beforeOpenViewPageTimers.has(eventKey)) return;\r\n\tbeforeOpenViewPageTimers.add(eventKey);\r\n\r\n\tsetTimeout(function () {\r\n\t\tbeforeOpenViewPageTimers.delete(eventKey);\r\n\t\t$dialog.trigger('viewBeforeOpen', [$dialog, $page, pageName, args]);\r\n\t});\r\n};\r\n\r\n/**\r\n * Для обработки событий вне vue\r\n */\r\nconst afterOpenViewPage = ($dialog: $el, $page: $el, pageName: string, args: string[]) => {\r\n\tsetTimeout(function () {\r\n\t\t$dialog.trigger('viewAfterOpen', [$dialog, $page, pageName, args]);\r\n\t});\r\n};\r\n\r\n/**\r\n * Получить состояние: Диалоговое окно находится в состоянии смены страницы\r\n */\r\nconst inAnimation = ($dialog: $el) => {\r\n\treturn $dialog.is('.i-change-page');\r\n};\r\n\r\n/**\r\n * Остановить анимацию смены страницы\r\n *\r\n * @returns Вернет true, если анимация производилась и была остановлена\r\n */\r\nconst stopAnimations = ($dialog: $el) => {\r\n\tif (!inAnimation($dialog)) return false;\r\n\r\n\tclearTimeout(timerClearAnimation);\r\n\r\n\tvar $modalLayers = $('> .modal-layer', $dialog);\r\n\r\n\tvar pageName = $dialog.data('view-page-active');\r\n\t$dialog.removeClass('i-change-page');\r\n\t$('> [data-view-page]', $modalLayers).removeClass('center-to-left right-to-center reverse active');\r\n\t$('> [data-view-page=\"' + pageName + '\"]', $modalLayers).addClass('active');\r\n\r\n\treturn true;\r\n};\r\n\r\n/**\r\n * Закрыть диалоговое окно\r\n */\r\nconst close = function (dialogId: string) {\r\n\tconst $dialog = $('#' + dialogId);\r\n\r\n\tif (!$dialog.dialog('instance')) return;\r\n\r\n\t$dialog.dialog('close');\r\n};\r\n\r\n/**\r\n * Управление props.isLoading\r\n */\r\nconst setLoading = ($page: $el, isLoading: boolean, duration?: number) => {\r\n\tif (!$page.is('[data-view-page]')) $page = $('[data-view-page]:visible', $page);\r\n\r\n\tif (isLoading) {\r\n\t\tif (duration !== undefined) {\r\n\t\t\t$page.each((_index, el) => {\r\n\t\t\t\tel.style.setProperty('--dialog-loading-duration', duration + 's');\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t$page.addClass('i-load-data');\r\n\t} else {\r\n\t\t$page.removeClass('i-load-data');\r\n\r\n\t\t$page.each((_index, el) => {\r\n\t\t\tel.style.setProperty('--dialog-loading-duration', '10s');\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst isLoading = ($page: $el) => {\r\n\treturn $page.is('.i-load-data');\r\n};\r\n\r\nexport const TopDialogUtils = {\r\n\tupdatePageVue,\r\n\trecalcPositions,\r\n\ttoViewDirty,\r\n\ttoView,\r\n\ttoViewPage,\r\n\ttoPrevPage,\r\n\tsetLoading,\r\n\tisLoading,\r\n\tinAnimation,\r\n\tclose,\r\n};\r\n\r\ninit();\r\n"],"names":["el","elDialog","$dialog","toView","TopDialogUtils","viewName","viewNameAndPageLink","$toPage","pageLink","$toDialog","hash","elSubmit","elForm","$dialogWrapper","topZIndex","zIndex","Core","timerClearAnimation","_a","genVueOptions","options","_b","dialog","utils","dialogId","pageName","pageNameNext","utils_system","onCreate","utils_scroll","$dialogBody","onOpen","w1","forms","scrollBarWidth","onClose","eldDialog","$ui","toViewDirty","toViewPageName","moveDirection","toViewParts","argsString","args","viewNameOr$Dialog","callback","timer","isInited","stopped","stopAnimations","updatePageVue","$nextPage","$modalLayers","$currentPage","popup_worker","toPrevPage","prevPageName","beforeOpenViewPageTimers","eventKey","$page","inAnimation","recalcPositions","toViewPage","duration","init"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-BiyYJ_AB.es.js","sources":["../../src/components/dialog/lib/worker.ts","../../src/components/dialog/dialog/composables/dialogWorker.ts","../../src/components/dialog/dialog/dialogs/dialogs.vue","../../src/components/dialog/dialog/composables/asyncDialogWorker.ts","../../src/components/dialog/dialog/composables/utils.ts"],"sourcesContent":["import { genHash, getHash, historySetState } from '@/core/utils/route';\r\nimport type { MoveDirection, TopDialogOptions } from './types';\r\nimport type { $el } from '@/components/types';\r\n\r\nexport abstract class TopDialogWorker {\r\n\tstatic state = {\r\n\t\tload: undefined as TopDialogOptions['load'] | undefined,\r\n\r\n\t\t/**\r\n\t\t * Порядковай номер перехода в диалоговых окнах\r\n\t\t *\r\n\t\t * Для расчета направления Вперед / Назад\r\n\t\t */\r\n\t\tviewPageN: 0,\r\n\t\tlocationHashPrev: '',\r\n\t};\r\n\r\n\tprivate static inited = false;\r\n\r\n\t/**\r\n\t * Инициировать события слежения за парамтерами url\r\n\t *\r\n\t * Если в параметрах есть запрос на открытие диалогового окна, TopDialog будет автоматически подключен на страницу\r\n\t */\r\n\tstatic init(options?: TopDialogOptions) {\r\n\t\tif (this.inited) return;\r\n\t\tthis.inited = true;\r\n\r\n\t\tif (options?.load) {\r\n\t\t\tthis.state.load = options.load;\r\n\t\t}\r\n\r\n\t\tconst autoInitDelay = options?.autoInitDelay ?? 5000;\r\n\r\n\t\t$(window).on('hashchange.dialogs', () => {\r\n\t\t\tconst dialogsStateChanged = this.compareStates(location.hash, this.state.locationHashPrev);\r\n\t\t\tif (dialogsStateChanged) this.opendDialogsFromUrl();\r\n\t\t});\r\n\r\n\t\t$(window).trigger('hashchange.dialogs');\r\n\r\n\t\t/**\r\n\t\t * Сгенерировать ссылку для перехода к странице диалогового окна\r\n\t\t */\r\n\t\t$(document).on('mousedown', 'a[data-to-view]', async (e) => {\r\n\t\t\tconst el = e.target.closest('[data-to-view]');\r\n\r\n\t\t\tconst toView = el.dataset.toView;\r\n\t\t\tconst viewName = toView.split('-')[0];\r\n\t\t\tconst $toDialog = $('#' + viewName);\r\n\t\t\tconst $modalLayers = $('> .modal-layer', $toDialog);\r\n\t\t\tconst $currentPage = $('> .active', $modalLayers);\r\n\r\n\t\t\tlet moveDirection: MoveDirection = 'next';\r\n\r\n\t\t\t// /**\r\n\t\t\t// * Данный алгоритм определения направления работает не корректно, так как для чтения свойства order менят состояние через getDialogsUtils()\r\n\t\t\t// */\r\n\t\t\t// if ($currentPage.length) {\r\n\t\t\t// \tconst pageName = toView.split('-')[1].split(':')[0];\r\n\t\t\t//\r\n\t\t\t// \tconst TopDialogUtils = await this.getDialogsUtils();\r\n\t\t\t//\r\n\t\t\t// \tawait TopDialogUtils.updatePageVue(viewName, undefined, pageName);\r\n\t\t\t//\r\n\t\t\t// \tconst $nextPage = $('> [data-view-page=\"' + pageName + '\"]', $modalLayers);\r\n\t\t\t// \tif ($nextPage.data('order') < $currentPage.data('order')) moveDirection = 'prev';\r\n\t\t\t// }\r\n\r\n\t\t\tif (el.dataset.action === 'top-dialog-close') moveDirection = 'prev';\r\n\r\n\t\t\tel.href = TopDialogWorker.genViewPageHash(el.dataset.toView, moveDirection);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Осуществить переход по ссылке с учетом historyType\r\n\t\t */\r\n\t\t$(document).on('click', '[data-to-view]', async (e) => {\r\n\t\t\tconst el = e.target.closest('[data-to-view]');\r\n\r\n\t\t\t// Подождать генерацию ссылки\r\n\t\t\tif (el.href === '.') {\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tel.mousedown();\r\n\r\n\t\t\t\tsetTimeout(() => el.click());\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst TopDialogUtils = await this.getDialogsUtils();\r\n\r\n\t\t\tconst toView = el.dataset.toView;\r\n\t\t\tconst viewName = toView.split('-')[0];\r\n\t\t\tconst $toDialog = $('#' + viewName);\r\n\t\t\tconst $modalLayers = $('> .modal-layer', $toDialog);\r\n\t\t\tconst $currentPage = $('> .active', $modalLayers);\r\n\r\n\t\t\tconst replaceHistory = !!$toDialog.data('data-to-view-replace');\r\n\r\n\t\t\tlet moveDirection: MoveDirection = 'next';\r\n\t\t\tif ($currentPage.length) {\r\n\t\t\t\tconst pageName = toView.split('-')[1].split(':')[0];\r\n\t\t\t\tconst $nextPage = $('> [data-view-page=\"' + pageName + '\"]', $modalLayers);\r\n\t\t\t\tif ($nextPage.data('order') < $currentPage.data('order')) moveDirection = 'prev';\r\n\t\t\t}\r\n\t\t\tif (el.dataset.action === 'top-dialog-close') moveDirection = 'prev';\r\n\r\n\t\t\tconst hash = TopDialogWorker.genViewPageHash(toView, moveDirection);\r\n\r\n\t\t\tif (el.tagName === 'A') {\r\n\t\t\t\t// диалоговое окно еще не открыто, произвести переход по ссылке\r\n\t\t\t\tif (!$toDialog.is(':visible')) return;\r\n\r\n\t\t\t\t// в адресе уже указана эта страница, необходимсо явно запросить ее открытие\r\n\t\t\t\tif (location.hash.indexOf(toView.replace('-', '=')) !== -1) {\r\n\t\t\t\t\tawait TopDialogUtils.toViewDirty(toView);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (replaceHistory) {\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\thistorySetState(true, hash);\r\n\r\n\t\t\t\tawait TopDialogUtils.toViewDirty(toView);\r\n\r\n\t\t\t\tif (moveDirection == 'next') {\r\n\t\t\t\t\tTopDialogWorker.state.viewPageN++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tTopDialogWorker.state.viewPageN--;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (el.tagName !== 'A') {\r\n\t\t\t\t\tif (this.compareStates(hash, location.hash)) {\r\n\t\t\t\t\t\tlocation.hash = hash;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tawait TopDialogUtils.toViewDirty(toView);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tsetTimeout(() => this.getDialogsUtils(), autoInitDelay);\r\n\t}\r\n\r\n\tstatic async getDialogsUtils() {\r\n\t\tconst { TopDialogUtils } = await import('./utils');\r\n\r\n\t\treturn TopDialogUtils;\r\n\t}\r\n\r\n\tstatic get$dialog($el: $el) {\r\n\t\treturn $el.closest('.ui-dialog-content');\r\n\t};\r\n\r\n\tstatic get$page($el: $el) {\r\n\t\treturn $el.closest('[data-view-page]');\r\n\t};\r\n\r\n\t/**\r\n\t * Закрыть диалоговое окно\r\n\t */\r\n\tstatic close(dialogId: string) {\r\n\t\tconst $dialog = $('#' + dialogId);\r\n\r\n\t\tif (!$dialog.dialog('instance')) return;\r\n\r\n\t\t$dialog.dialog('close');\r\n\t};\r\n\r\n\t/**\r\n\t * Размонтировать $.dialog\r\n\t */\r\n\tstatic destroy(dialogId: string) {\r\n\t\tconst $dialog = $('#' + dialogId);\r\n\r\n\t\tif (!$dialog.dialog('instance')) return;\r\n\r\n\t\t$dialog.dialog('close');\r\n\t\t$dialog.dialog('destroy');\r\n\t};\r\n\r\n\t/**\r\n\t * Сгенерировать ссылку на страницу в диалоговом окне\r\n\t * @param toView - указатель в формате: dialog_{{ dialogId }}={{ pageName }}:{{ args }}\r\n\t * @param moveDirection\r\n\t */\r\n\tstatic genViewPageHash(toView: string, moveDirection: MoveDirection = 'next') {\r\n\t\tvar toViewPageN = this.state.viewPageN;\r\n\t\tif (moveDirection == 'prev') {\r\n\t\t\ttoViewPageN--;\r\n\t\t} else {\r\n\t\t\ttoViewPageN++;\r\n\t\t}\r\n\r\n\t\tvar viewNameAndPageLink = toView.split('-');\r\n\t\tvar viewName = viewNameAndPageLink.shift();\r\n\t\tvar pageLink = viewNameAndPageLink.join('-');\r\n\t\tvar hash = genHash('vpn', toViewPageN);\r\n\t\tvar hash = genHash('view-' + viewName, pageLink, hash);\r\n\r\n\t\treturn hash;\r\n\t};\r\n\r\n\t/**\r\n\t * Сравнить версию открытых диалоговых окон\r\n\t * @returns вернет true, если состояния открытых окон изменилось\r\n\t */\r\n\tstatic compareStates(hash: string, hash2: string) {\r\n\t\tconst mathes = hash.match(/[#&]view-[^&]+/g) || [];\r\n\t\tconst mathes2 = hash2.match(/[#&]view-[^&]+/g) || [];\r\n\r\n\t\tif (mathes.length !== mathes2.length) return true;\r\n\r\n\t\tconst mathesChanged = mathes.filter((math, n) => {\r\n\t\t\tconst math2 = mathes2[n] || '';\r\n\r\n\t\t\treturn math !== math2;\r\n\t\t});\r\n\r\n\t\tif (mathesChanged.length) return true;\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tstatic opendDialogsFromUrl = async () => {\r\n\t\tconst toViewPageN = Number(getHash('vpn')) || 0;\r\n\r\n\t\tthis.state.locationHashPrev = location.hash;\r\n\r\n\t\t// Открыть диалоговое окно\r\n\t\tlet view: RegExpExecArray | null;\r\n\t\t// const regexp = new RegExp('view-((\\\\w+)=([\\\\w-]+)(?::([\\\\w.:-]+))?)' + '(' + Math.random() + ')?', 'g'); // fix babel minify regexp\r\n\t\tconst regexp = new RegExp('view-((\\\\w+)=([\\\\w-]+)(?::([\\\\w.:-]+))?)', 'g');\r\n\t\twhile (view = regexp.exec(location.hash)) {\r\n\t\t\tvar moveDirection: MoveDirection = 'next';\r\n\t\t\tif (toViewPageN < this.state.viewPageN) moveDirection = 'prev';\r\n\r\n\t\t\tconst TopDialogUtils = await this.getDialogsUtils();\r\n\r\n\t\t\treturn TopDialogUtils.toViewDirty(view[1], moveDirection);\r\n\t\t}\r\n\r\n\t\t// Закрыть ненужные view\r\n\t\t$('.ui-dialog-content[data-view-page-active]:visible').each((_index: number, dialog: HTMLElement) => {\r\n\t\t\tvar $dialog = $(dialog);\r\n\r\n\t\t\tvar viewName = $dialog.attr('id');\r\n\t\t\tvar pageName = getHash('view-' + viewName);\r\n\t\t\tif (!pageName) $dialog.dialog('close');\r\n\t\t});\r\n\r\n\t\tthis.state.viewPageN = toViewPageN;\r\n\r\n\t\treturn true;\r\n\t};\r\n}\r\n","import { type ComponentInstance, type ComponentInternalInstance, markRaw, ref } from 'vue';\r\nimport { waitWhile } from '@/core/utils/system';\r\nimport TopDialog from '../dialog.vue';\r\nimport { TopDialogWorker } from '@/components/dialog/lib/worker';\r\nimport type { MoveDirection } from '@/components/dialog/lib/types';\r\nimport type { TopDialogComponent } from './types';\r\n\r\n/**\r\n * Объект для работы с диалоговым окном\r\n *\r\n * Каждое окно уникально и может быть открыто одновременно только один раз\r\n *\r\n * Можно определить много окон, после чего с ними можно вести работу в любой части приложения\r\n */\r\nexport class TopDialogHandle<T extends TopDialogComponent> {\r\n\r\n\t/**\r\n\t * Индентификатор, определяется на уровне компонента TopDialogComponent\r\n\t *\r\n\t * Может использоваться в навигации для открытия нужных окон с нужными настройками\r\n\t */\r\n\tid: string;\r\n\r\n\t/**\r\n\t * ID, используемый в верстке диалогового окна\r\n\t */\r\n\tidAttr: string;\r\n\r\n\t/**\r\n\t * Пользовательский компонент диалогового окна\r\n\t */\r\n\tComponent: T;\r\n\r\n\t/**\r\n\t * Компонент инициирован\r\n\t *\r\n\t * Устанавливается после первого вызова useTopDialog()\r\n\t */\r\n\tisMounted = ref(false);\r\n\r\n\t/**\r\n\t * Компонент готов к использованию\r\n\t *\r\n\t * Используется для внутренних преобразований после отрисовки\r\n\t */\r\n\tisReady = ref(false);\r\n\r\n\t/**\r\n\t * Диалоговое окно открыто\r\n\t */\r\n\tisOpened = ref(false);\r\n\r\n\t/**\r\n\t * Имя активной страницы дилогового окна\r\n\t */\r\n\tpageActive = ref('');\r\n\r\n\t/**\r\n\t * Диалоговое окно находится в состоянии загрузки своей страницы\r\n\t */\r\n\tisLoadingPage = ref(false);\r\n\r\n\t/**\r\n\t * Следующая активная страница\r\n\t *\r\n\t * В один момент времени может потребоваться отобразить две страницы, чтобы воспроизвести анимацию\r\n\t */\r\n\tpageActiveNext = ref('');\r\n\r\n\t/**\r\n\t * props компонента, доступны после инициализации\r\n\t */\r\n\tprops?: ComponentInstance<T>['$props'];\r\n\r\n\t/**\r\n\t * emit базового компонента `TopDialog`\r\n\t */\r\n\temit?: ComponentInstance<typeof TopDialog>['$emit'];\r\n\r\n\t/**\r\n\t * Одноразовое событие на закрытие диалогового окна\r\n\t *\r\n\t * Используется для привязки окна к сценариям использования\r\n\t */\r\n\tonCloseOnce?: (props: typeof this.props, pageName: string) => void;\r\n\r\n\tconstructor(TopDialogComponent: T) {\r\n\t\tthis.id = TopDialogComponent.id!;\r\n\t\tthis.idAttr = 'dialog_' + TopDialogComponent.id;\r\n\t\tthis.Component = markRaw(TopDialogComponent);\r\n\t}\r\n\r\n\t/**\r\n\t * Событие - компонент инициирован\r\n\t */\r\n\tonMounted(topDialogComponent: ComponentInternalInstance, topDialogBaseComponent: ComponentInternalInstance) {\r\n\t\tthis.isMounted.value = true;\r\n\t\tthis.props = topDialogComponent.props;\r\n\t\tthis.emit = topDialogBaseComponent.emit;\r\n\t}\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно\r\n\t *\r\n\t * Учтите, что props в диалоговом окне будут доступны не сразу, а только после инициализации vue компонента\r\n\t */\r\n\tasync open(pageName: string = 'main', props?: {}, args: [] = [], onCloseOnce?: typeof this.onCloseOnce, moveDirection?: MoveDirection) {\r\n\t\tif (props) await this.setProps(props);\r\n\t\tif (onCloseOnce) this.onCloseOnce = onCloseOnce;\r\n\r\n\t\tconst TopDialogUtils = await TopDialogWorker.getDialogsUtils();\r\n\r\n\t\tawait TopDialogUtils.toView(this.idAttr, pageName, args, moveDirection);\r\n\t};\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно как ссылку, для хеш-навигации\r\n\t *\r\n\t * Диалоговые окна загружаются по имени, см. настройку плагина Core topDialogLoader\r\n\t */\r\n\tasync openAsLink(\r\n\t\tpageName: string = 'main',\r\n\t\tprops?: {},\r\n\t\t_args: string[] = [],\r\n\t\tonCloseOnce?: typeof this.onCloseOnce,\r\n\t\tmoveDirection?: MoveDirection,\r\n\t) {\r\n\t\tif (props) await this.setProps(props);\r\n\t\tif (onCloseOnce) this.onCloseOnce = onCloseOnce;\r\n\r\n\t\tconst viewName = this.idAttr + '-' + pageName;\r\n\r\n\t\tlocation.hash = TopDialogWorker.genViewPageHash(viewName, moveDirection);\r\n\t};\r\n\r\n\t/**\r\n\t * Закрыть диалоговое окно\r\n\t *\r\n\t * Не меняет состояние компонента диалогового окна\r\n\t */\r\n\tasync close() {\r\n\t\tTopDialogWorker.close(this.idAttr);\r\n\t};\r\n\r\n\t/**\r\n\t * Размонтировать $.dialog\r\n\t */\r\n\tasync destroy() {\r\n\t\tTopDialogWorker.destroy(this.idAttr);\r\n\t}\r\n\r\n\t/**\r\n\t * Устанвоить props\r\n\t *\r\n\t * Полностью сбрасывается состояние props\r\n\t */\r\n\tasync setProps(props: ComponentInstance<T>['$props'] = {}) {\r\n\t\t// ожидание инициализации компонента\r\n\t\tif (!this.isMounted) {\r\n\t\t\tawait waitWhile(() => !this.props);\r\n\t\t}\r\n\r\n\t\tfor (const name in this.props) {\r\n\t\t\tthis.props[name] = props[name];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Проверить, есть ли необходимость отрисовки страницы диалогового окна\r\n\t */\r\n\tneedShowPage(pageName: string): boolean {\r\n\t\tif (!this.isOpened.value) return false;\r\n\r\n\t\treturn this.pageActive.value === pageName || this.pageActiveNext.value === pageName;\r\n\t}\r\n}\r\n","<script lang=\"ts\">\r\nimport { shallowReactive } from 'vue';\r\nimport { TopDialogHandle } from '@/components/dialog/dialog/composables/dialogWorker';\r\nimport type { TopDialogComponent } from '@/components/dialog/dialog/composables/types';\r\n\r\n/**\r\n * Словарь всех используемых диалоговых окон\r\n *\r\n * В других компонентах не использовать\r\n */\r\nconst dialogsWorkers = shallowReactive(new Map<string, TopDialogHandle<TopDialogComponent>>());\r\n\r\nexport const getDialogWorker = (id: string) => {\r\n\tid = id.replace(/^dialog_/, '');\r\n\r\n\treturn dialogsWorkers.get(id);\r\n};\r\n\r\n/**\r\n * Добавить компонент диалогового окна для использования\r\n */\r\nexport const addDialogWorker = <T extends TopDialogComponent>(TopDialogComponent: T): TopDialogHandle<T> => {\r\n\tif (!TopDialogComponent?.id) {\r\n\t\tconsole.log({ TopDialogComponent: TopDialogComponent });\r\n\r\n\t\tthrow new Error('Expected TopDialogComponent');\r\n\t}\r\n\r\n\tif (!dialogsWorkers.has(TopDialogComponent.id)) {\r\n\t\tdialogsWorkers.set(TopDialogComponent.id, new TopDialogHandle(TopDialogComponent));\r\n\t}\r\n\r\n\treturn dialogsWorkers.get(TopDialogComponent.id) as TopDialogHandle<T>;\r\n};\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { onUnmounted } from 'vue';\r\n\r\ndefineOptions({\r\n\tname: 'DialogWrapper',\r\n});\r\n\r\nonUnmounted(() => {\r\n\tdialogsWorkers.forEach(dialog => dialog.destroy());\r\n\tdialogsWorkers.clear();\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-dialogs\" style=\"display: none;\">\r\n\t\t<component\r\n\t\t\tv-for=\"[dialogId, dialog] in dialogsWorkers\"\r\n\t\t\t:is=\"dialog.Component\"\r\n\t\t\t:key=\"dialogId\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n","import type { Ref } from 'vue';\r\nimport { ref } from 'vue';\r\nimport { useTopDialog } from './utils';\r\nimport { waitWhile } from '@/core/utils/system';\r\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\r\nimport { TopDialogHandle } from './dialogWorker';\r\n\r\n/**\r\n * Объект для работы с асинхронным диалоговым окном\r\n *\r\n * Является прослойкой для доступа к TopDialogHandle\r\n */\r\nexport class AsyncTopDialogHandle<T extends TopDialogComponent> {\r\n\r\n\t/**\r\n\t * Функция, определяющая компонент TopDialogComponent\r\n\t */\r\n\treadonly resolve: AsyncTopDialogComponentLoader<T>;\r\n\r\n\t/**\r\n\t * Реактивная Сссылка на объект worker,\r\n\t *\r\n\t * Ссылка не будет указывать на объект, если диалоговое окно еще не загружено\r\n\t */\r\n\treadonly worker: Ref<TopDialogHandle<T> | null> = ref(null);\r\n\r\n\tconstructor(resolve: AsyncTopDialogComponentLoader<T>) {\r\n\t\tthis.resolve = resolve;\r\n\t}\r\n\r\n\t/**\r\n\t * Получить доступ к TopDialogHandle\r\n\t */\r\n\tasync get() {\r\n\t\tif (this.worker.value) return this.worker.value;\r\n\r\n\t\tconst result = await this.resolve();\r\n\t\tconst TopDialogComponent = result.default;\r\n\r\n\t\tthis.worker.value = useTopDialog(TopDialogComponent);\r\n\r\n\t\tconst worker = this.worker.value;\r\n\r\n\t\tawait waitWhile(() => !worker.isMounted);\r\n\r\n\t\treturn worker;\r\n\t}\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно\r\n\t */\r\n\tasync open(...args: Parameters<TopDialogHandle<T>['open']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tawait worker.open(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно как ссылку, для хеш-навигации\r\n\t *\r\n\t * Только общедоступные диалоговые окна, расположенные в @/dialogs\r\n\t */\r\n\tasync openAsLink(...args: Parameters<TopDialogHandle<T>['open']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tvoid worker.openAsLink(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть диалоговое окно\r\n\t *\r\n\t * Не меняет состояние компонента диалогового окна\r\n\t */\r\n\tasync close(...args: Parameters<TopDialogHandle<T>['close']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tworker.close(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Размонтировать виджет диалогового окна\r\n\t */\r\n\tasync destroy(...args: Parameters<TopDialogHandle<T>['close']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tworker.destroy(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Устанвоить props\r\n\t *\r\n\t * Полностью сбрасывается состояние props\r\n\t */\r\n\tasync setProps(...args: Parameters<TopDialogHandle<T>['setProps']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tawait worker.setProps(...args);\r\n\t}\r\n}\r\n","import { getCurrentInstance, inject } from 'vue';\r\nimport { TopDialogHandle } from './dialogWorker';\r\nimport { AsyncTopDialogHandle } from './asyncDialogWorker';\r\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\r\nimport { addDialogWorker, getDialogWorker } from '../dialogs/dialogs.vue';\r\n\r\n/**\r\n * Получить объект управленя текущим диалоговым окном\r\n */\r\nexport const useTopDialogSelf = () => {\r\n\t// вызов из пользовтаельского компонента диалога\r\n\tconst topDialogComponent = getCurrentInstance() as any;\r\n\tif (topDialogComponent?.type?.id) {\r\n\t\tconst dialogWorker = getDialogWorker(topDialogComponent.type.id);\r\n\t\tif (dialogWorker) return dialogWorker;\r\n\t}\r\n\r\n\treturn inject('dialogWorker') as TopDialogHandle<TopDialogComponent>;\r\n};\r\n\r\n/**\r\n * Получить объект управленя диалоговым окном\r\n *\r\n * При первом вызове компонент диалогового окна будет внедрен в компонент DialogWrapper\r\n */\r\nexport const useTopDialog = <T extends TopDialogComponent>(DialogComponent: T): TopDialogHandle<T> => {\r\n\treturn addDialogWorker(DialogComponent);\r\n};\r\n\r\n/**\r\n * Получить объект управленя асинхронным диалоговым окном\r\n *\r\n * Компонент диалогового окна будет загружен и инициирован при первом взаимодействии с объектом\r\n *\r\n * Использует useTopDialog()\r\n */\r\nexport const useAsyncTopDialog = <T extends TopDialogComponent>(resolve: AsyncTopDialogComponentLoader<T>): AsyncTopDialogHandle<T> => {\r\n\treturn new AsyncTopDialogHandle(resolve);\r\n};\r\n"],"names":["TopDialogWorker","options","autoInitDelay","e","el","viewName","$toDialog","$modalLayers","moveDirection","TopDialogUtils","toView","$currentPage","replaceHistory","pageName","hash","historySetState","$el","dialogId","$dialog","toViewPageN","viewNameAndPageLink","pageLink","genHash","hash2","mathes","mathes2","math","math2","getHash","view","regexp","_index","dialog","TopDialogHandle","ref","TopDialogComponent","markRaw","topDialogComponent","topDialogBaseComponent","props","args","onCloseOnce","_args","waitWhile","name","dialogsWorkers","shallowReactive","getDialogWorker","id","addDialogWorker","onUnmounted","AsyncTopDialogHandle","resolve","useTopDialog","worker","useTopDialogSelf","getCurrentInstance","_a","dialogWorker","inject","DialogComponent","useAsyncTopDialog"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-DdsRxaK5.es.js","sources":["../../src/storybook/jquery.ts","../../src/components/dialog/lib/utils.globalEvents.ts","../../src/components/dialog/lib/utils.ts"],"sourcesContent":["/**\r\n * см. /.storybook/preview-head.html\r\n */\r\nexport default $;\r\n","import { TopDialogUtils } from './utils';\r\nimport { TopDialogWorker } from './worker';\r\nimport { querySelectorVisible } from '@/core/utils/dom';\r\nimport type { $el } from '@/components/types';\r\n\r\nlet inited = false;\r\n\r\n/**\r\n * Инициализация глобальных событий для диалоговых окон\r\n *\r\n * Проивзодится один раз при подклчюении диалогового окна\r\n *\r\n * События не размонитруются\r\n */\r\nexport const initDialogGlobalEvents = () => {\r\n\tif (inited) return;\r\n\tinited = true;\r\n\r\n\t/**\r\n\t * Закрытие диалога по Esc\r\n\t */\r\n\tdocument.addEventListener('keydown', (e) => {\r\n\t\tif (e.key !== 'Escape') return;\r\n\t\tif (!e.target) return;\r\n\r\n\t\tconst el = e.target as HTMLElement;\r\n\r\n\t\t// событие произошло вне диалогового окна\r\n\t\tif (!el.closest('.ui-dialog')) return;\r\n\r\n\t\tif (el.contentEditable === 'true' || el.contentEditable === 'plaintext-only') return;\r\n\r\n\t\t// не закрывать окно при открытом TopPopup\r\n\t\tif (querySelectorVisible(document.documentElement, '.top-popup-wrapper')) return;\r\n\r\n\t\t// не закрывать окно при работе с jquery autocomplete\r\n\t\tif (el.classList.contains('autocomplete')) return;\r\n\r\n\t\t// не закрывать окно при открытом fancybox\r\n\t\tif (querySelectorVisible(document.documentElement, '.fancybox-container')) return;\r\n\r\n\t\t$('.ui-dialog-content:visible:last').dialog('close');\r\n\t});\r\n\r\n\t/**\r\n\t * Закрытие диалога по кнопке закрыть\r\n\t */\r\n\t$(document).on('click', '[data-action=\"top-dialog-close\"]', (e) => {\r\n\t\te.preventDefault();\r\n\r\n\t\t// // навигация без истории\r\n\t\t// var $dialog = $(this).closest('.ui-dialog-content');\r\n\t\t// var viewName = $dialog.attr('id');\r\n\t\t// var pageName = getHash('view-' + viewName);\r\n\t\t// if (!pageName) {\r\n\t\t// \ttoPrevPage($dialog);\r\n\t\t//\r\n\t\t// \treturn;\r\n\t\t// }\r\n\t\t//\r\n\t\t// // навигация по истории\r\n\t\t// if (Core.state.isMobile && history.length > 1 && $(this).closest('.modal-layer').length) {\r\n\t\t// \tvar href = location.href;\r\n\t\t//\r\n\t\t// \thistory.go(-1);\r\n\t\t//\r\n\t\t// \tsetTimeout(() => {\r\n\t\t// \t\t// это первая страница в истории вкладки браузера\r\n\t\t// \t\tif (href === location.href) $(e.target).closest('.ui-dialog-content').dialog('close');\r\n\t\t// \t});\r\n\t\t// } else {\r\n\t\t// \t$(this).closest('.ui-dialog-content').dialog('close');\r\n\t\t// }\r\n\r\n\t\tconst el = e.target.closest('[data-action=\"top-dialog-close\"]');\r\n\r\n\t\tconst elDialog = el.closest('.ui-dialog-content');\r\n\t\tif (!elDialog) return;\r\n\r\n\t\tconst $dialog = $(elDialog);\r\n\r\n\t\t// если к кнопке привязана ссылка, диалоговое окно не нужно закрывать\r\n\t\tconst toView = el.dataset.toView;\r\n\r\n\t\tif (toView == 'toPrevPage()') {\r\n\t\t\tTopDialogUtils.toPrevPage($dialog);\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (toView) {\r\n\t\t\tvar viewNameAndPageLink = toView.split('-');\r\n\t\t\tvar viewName = viewNameAndPageLink.shift();\r\n\t\t\tvar pageLink = viewNameAndPageLink.join('-');\r\n\r\n\t\t\tvar $toDialog = $('#' + viewName);\r\n\t\t\tvar $toPage = $('[data-view-page=\"' + pageLink + '\"]', $toDialog);\r\n\t\t\tif (!$toPage.is(':visible')) {\r\n\t\t\t\tconst hash = TopDialogWorker.genViewPageHash(toView, 'prev');\r\n\r\n\t\t\t\t// добавляет текущую страницу в историю браузера\r\n\t\t\t\tlocation.hash = hash;\r\n\r\n\t\t\t\t// // не убирает кнопку \"Вперед\" в браузере\r\n\t\t\t\t// history.replaceState(null, '', hash);\r\n\t\t\t\t// toViewDirty(toView, 'prev');\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t$dialog.dialog('close');\r\n\t});\r\n\r\n\t/**\r\n\t * Все submit должны обрабатываться через js\r\n\t */\r\n\t$(document).on('submit', '.modal-body > form, .modal-layer-body > form', function (e) {\r\n\t\te.preventDefault();\r\n\t});\r\n\r\n\t/**\r\n\t * Выполнение действия по нажатию Enter\r\n\t *\r\n\t * @todo Убрать `.searcher`\r\n\t */\r\n\t$(document).on('keypress', '.ui-dialog .modal-body :input:not(.searcher), .ui-dialog .modal-body [contenteditable]', function (e) {\r\n\t\t// if (e.keyCode !== 10 && e.key !== 'ENTER') return;\r\n\t\tif (e.key !== 'ENTER') return;\r\n\r\n\t\t// не выполнять submit действий при работе с jquery autocomplete\r\n\t\tif (e.target.classList.contains('autocomplete')) {\r\n\t\t\te.preventDefault();\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// реализация submit по ctrl + Enter\r\n\t\tif (e.target.tagName === 'TEXTAREA') {\r\n\t\t\tif (!e.ctrlKey && !e.metaKey) return;\r\n\r\n\t\t\tconst elForm = e.target.closest('form');\r\n\r\n\t\t\tif (elForm) {\r\n\t\t\t\tlet elSubmit = $(':submit:visible', elForm)[0];\r\n\t\t\t\tif (!elSubmit) elSubmit = $(':submit:visible', elForm)[0];\r\n\r\n\t\t\t\telSubmit?.click();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t/**\r\n\t * Закрытие диалога по клику вне окна\r\n\t */\r\n\t$(document).on('click', '.ui-widget-overlay', function () {\r\n\t\tlet $dialogWrapper: $el | undefined = undefined;\r\n\t\tlet topZIndex = 0;\r\n\r\n\t\t$('.ui-dialog:visible').each((_index, el) => {\r\n\t\t\tconst zIndex = Number($(el).css('z-index'));\r\n\t\t\tif (zIndex < topZIndex) return;\r\n\r\n\t\t\t$dialogWrapper = $(el);\r\n\t\t\ttopZIndex = zIndex;\r\n\t\t});\r\n\r\n\t\tif ($dialogWrapper) {\r\n\t\t\t$('.ui-dialog-content', $dialogWrapper).dialog('close');\r\n\t\t}\r\n\t});\r\n\r\n\t$(window).on('resize', TopDialogUtils.recalcPositions);\r\n\tTopDialogUtils.recalcPositions();\r\n};\r\n","import 'jquery';\r\nimport { nextTick } from 'vue';\r\n\r\nimport Core from '@/core/core/core';\r\nimport { TopPopupWorker } from '@/components/popup/worker';\r\nimport { sleep, waitWhile } from '@/core/utils/system';\r\nimport { setHash } from '@/core/utils/route';\r\nimport { connectScrollShadow } from '@/core/utils/scroll';\r\n\r\nimport type { MoveDirection } from './types';\r\nimport { TopDialogWorker } from './worker';\r\nimport { initDialogGlobalEvents } from './utils.globalEvents';\r\nimport { getDialogWorker } from '../dialog/dialogs/dialogs.vue';\r\n\r\nimport css from '../dialog/style/dialog.css?inline';\r\nimport cssM from '../dialog/style/dialog.m.css?inline';\r\nimport cssPC from '../dialog/style/dialog.pc.css?inline';\r\nimport cssModern from '../dialog/style/modern/dialog.css?inline';\r\nimport cssModernPC from '../dialog/style/modern/dialog.pc.css?inline';\r\nimport type { $el } from '@/components/types';\r\n\r\nCore.insertStyleToPage(css);\r\nCore.insertStyleToPage(cssM, 'm');\r\nCore.insertStyleToPage(cssPC, 'pc');\r\nCore.insertStyleToPage(cssModern);\r\nCore.insertStyleToPage(cssModernPC, 'pc');\r\n\r\nlet timerClearAnimation: NodeJS.Timeout;\r\nlet isInited = false;\r\n\r\nconst init = () => {\r\n\t// if(window.history && history.length == 1) setHash('vpn', null);\r\n\r\n\t$.extend($.ui.dialog.prototype.options, {\r\n\t\tfocus: (e: any) => {\r\n\t\t\te.target.focus();\r\n\r\n\t\t\t$('[autofocus]', e.target)[0]?.focus();\r\n\r\n\t\t\t// setTimeout(function () {\r\n\t\t\t// \tif ($('[autofocus]', e.target).length) return;\r\n\t\t\t// \t$('.modal-footer button:first, .modal-body :input:first', e.target).eq(0).focus();\r\n\t\t\t//\r\n\t\t\t// \t// fix пропадающего autocomplete при нажатии на scroll в autocomplete\r\n\t\t\t// \t$(e.target).add($(e.target).closest('.ui-dialog')).removeAttr('tabindex');\r\n\t\t\t// });\r\n\t\t},\r\n\t\tcreate: (e: any) => onCreate(e.target),\r\n\t\topen: (e: any) => onOpen(e.target),\r\n\t\tclose: (e: any) => onClose(e.target),\r\n\t\tmodal: true,\r\n\t\tresizable: false,\r\n\t\tcloseOnEscape: false,\r\n\t\twidth: 'auto',\r\n\t\tminHeight: 0,\r\n\t});\r\n\r\n\t$.ui.dialog.prototype._focusTabbable = $.noop;\r\n\r\n\t$.ui.dialog.prototype._moveToTopOriginal = $.ui.dialog.prototype._moveToTop;\r\n\t$.ui.dialog.prototype._moveToTop = function () {\r\n\t\tthis._moveToTopOriginal();\r\n\r\n\t\tconst $dialog = $(this.element);\r\n\t\t$dialog.trigger('dialogsMoveToTop', [$dialog]);\r\n\t};\r\n\r\n\tinitDialogGlobalEvents();\r\n\r\n\tisInited = true;\r\n};\r\n\r\n/**\r\n * Получить настройки диалогового окна из Vue компонента\r\n */\r\nconst genVueOptions = ($dialog: $el) => {\r\n\tconst options: {\r\n\t\tmodal?: boolean,\r\n\t\tposition?: any,\r\n\t} = {};\r\n\r\n\tif ($dialog[0]?.dataset?.modal === 'false') options.modal = false;\r\n\tif ($dialog[0]?.dataset?.position) options.position = JSON.parse($dialog[0].dataset.position);\r\n\r\n\treturn options;\r\n};\r\n\r\n/**\r\n * Сменить состояние диалогового окна Vue\r\n */\r\nconst updatePageVue = async (dialogId: string, pageName?: string, pageNameNext?: string) => {\r\n\tif (!dialogId.startsWith('dialog_')) return;\r\n\r\n\tconst dialog = getDialogWorker(dialogId);\r\n\tif (!dialog) return;\r\n\r\n\tdialog.isOpened.value = true;\r\n\tif (pageName !== undefined) dialog.pageActive.value = pageName;\r\n\tif (pageNameNext !== undefined) dialog.pageActiveNext.value = pageNameNext;\r\n\r\n\tawait nextTick();\r\n\r\n\tif (pageNameNext) {\r\n\t\tconst $dialog = $('#' + dialogId);\r\n\t\tconst $nextPage = $('[data-view-page=\"' + pageNameNext + '\"]', $dialog);\r\n\r\n\t\tif (!$nextPage.length) {\r\n\t\t\tawait waitWhile(() => !$('[data-view-page=\"' + pageNameNext + '\"]', $dialog).length);\r\n\t\t}\r\n\t}\r\n};\r\n\r\nconst onCreate = (elDialog: HTMLElement) => {\r\n\tvar $dialog = $(elDialog);\r\n\tvar $dialogBody = $('.modal-body', $dialog);\r\n\r\n\tconnectScrollShadow($dialogBody[0]);\r\n};\r\n\r\n/**\r\n * Callback for jQuery dialog onOpen\r\n */\r\nconst onOpen = async (elDialog: HTMLElement) => {\r\n\tvar $dialog = $(elDialog);\r\n\tvar pageName = $dialog.data('view-page-active');\r\n\r\n\tconst w1 = Number($(window).width());\r\n\r\n\tCore.state.documentClassModificators.set('top-dialog', 'with_dialog');\r\n\r\n\tconst w2 = Number($(window).width());\r\n\r\n\tconst scrollBarWidth = w2 - w1;\r\n\tif (Number($(document).height()) > Number($(window).height())) $('html').css({ 'margin-right': scrollBarWidth + 'px' });\r\n\r\n\trecalcPositions();\r\n\r\n\tconst dialog = getDialogWorker($dialog.attr('id') as string);\r\n\tdialog?.emit?.('open', pageName);\r\n};\r\n\r\n/**\r\n * Callback for jQuery dialog onClose\r\n */\r\nconst onClose = async (elDialog: HTMLElement) => {\r\n\tvar $dialog = $(elDialog);\r\n\r\n\tvar viewName = $dialog.attr('id');\r\n\tvar pageName = $dialog.data('view-page-active');\r\n\tif (pageName) {\r\n\t\tsetHash('vpn', TopDialogWorker.state.viewPageN);\r\n\t\tsetHash('view-' + viewName, null, false);\r\n\r\n\t\tif (TopDialogWorker.state.viewPageN === 0 || TopDialogWorker.state.viewPageN === 1) setHash('vpn', null);\r\n\t}\r\n\r\n\tif (!$('.ui-widget-overlay:visible').length){\r\n\t\tCore.state.documentClassModificators.delete('top-dialog');\r\n\r\n\t\t$('html').css({ 'margin-right': '' });\r\n\t}\r\n\r\n\t$dialog.trigger('viewAfterClose', [$dialog]);\r\n\r\n\tconst dialog = getDialogWorker($dialog.attr('id') as string);\r\n\tif (dialog) {\r\n\t\tdialog.isOpened.value = false;\r\n\t\tdialog.emit?.('close', pageName);\r\n\r\n\t\tif (dialog.onCloseOnce) {\r\n\t\t\tdialog.onCloseOnce(dialog.props, pageName);\r\n\t\t\tdialog.onCloseOnce = undefined;\r\n\t\t}\r\n\t}\r\n\r\n\t// после закрытия диалога может потребоваться пересчет позиций элементов\r\n\twindow.dispatchEvent(new Event('resize'));\r\n};\r\n\r\n/**\r\n * Пересчитать положения и размеры открытых диалоговых окон\r\n */\r\nconst recalcPositions = () => {\r\n\t$('.ui-dialog:visible > .ui-dialog-content').each((_index, eldDialog: HTMLElement) => {\r\n\t\tconst $dialog = $(eldDialog);\r\n\t\tconst $dialogBody = $('.modal-body:visible', $dialog);\r\n\t\tconst $ui = $dialog.closest('.ui-dialog');\r\n\r\n\t\tif (!$dialogBody.length) return;\r\n\r\n\t\tconst options = genVueOptions($dialog);\r\n\r\n\t\toptions.position ??= { of: window };\r\n\r\n\t\t$dialog.dialog('option', options);\r\n\r\n\t\t$ui.removeClass('me-tightly');\r\n\t\tif (Number($ui.height()) > Number($(window).height())) $ui.addClass('me-tightly');\r\n\t});\r\n};\r\n\r\n// переход к view page по неразобранной ссылке в формате: {viewName}-{pageName}[:args]\r\nconst toViewDirty = async (toViewPageName: string, moveDirection?: MoveDirection) => {\r\n\tconst regexp = /(\\w+)[=-]([\\w-]+)(?::([\\w.:-]+))?/g;\r\n\tconst toViewParts = regexp.exec(toViewPageName);\r\n\tif (toViewParts) {\r\n\t\tconst viewName = toViewParts[1];\r\n\t\tconst pageName = toViewParts[2];\r\n\t\tconst argsString = toViewParts[3];\r\n\r\n\t\tlet args: string[] = [];\r\n\t\tif (argsString) args = argsString.split(':');\r\n\r\n\t\tawait toView(viewName, pageName, args, moveDirection);\r\n\t}\r\n};\r\n\r\n/**\r\n * Открыть диалоговое окно, возможно указать нужную страницу\r\n * @param {string|$} viewNameOr$Dialog - id страницы окна или jQuery элемент окна\r\n * @param {?string} pageName - имя страницы\r\n * @param {?Array<any>} args - аргументы, набор проивзольных параметров, которые могут обрабатываться каждым окном по своему\r\n * @param {?Function} callback - функция, которая будет запущена после октытия страницы\r\n */\r\nconst toView = async (\r\n\tviewNameOr$Dialog: $el | string,\r\n\tpageName?: string,\r\n\targs?: string[],\r\n\tmoveDirection?: MoveDirection,\r\n\tcallback?: Function,\r\n) => {\r\n\tif (!isInited) {\r\n\t\tawait new Promise<void>((resolve, _reject) => {\r\n\t\t\tconst timer = setInterval(() => {\r\n\t\t\t\tif (!isInited) return;\r\n\r\n\t\t\t\tclearInterval(timer);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}, 10);\r\n\t\t});\r\n\t}\r\n\r\n\tawait nextTick();\r\n\r\n\tlet $dialog: $el;\r\n\tif (typeof (viewNameOr$Dialog) === 'object') {\r\n\t\t$dialog = viewNameOr$Dialog;\r\n\t} else {\r\n\t\t$dialog = $('#' + viewNameOr$Dialog);\r\n\t}\r\n\r\n\t// Диалоговое окно еще не загружено\r\n\tif (!$dialog.length && typeof (viewNameOr$Dialog) == 'string' && TopDialogWorker.state.load) {\r\n\t\tawait TopDialogWorker.state.load(viewNameOr$Dialog);\r\n\r\n\t\ttoView(viewNameOr$Dialog, pageName, args, moveDirection, callback);\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\tawait toViewPage($dialog, pageName, args, moveDirection);\r\n\r\n\tif ($dialog.is('.ui-dialog-content')) {\r\n\t\t// var zIndexMax = 0;\r\n\t\t// $.map($('.ui-dialog'), function (el) {\r\n\t\t// \tvar zIndex = $(el).css('z-index') * 1;\r\n\t\t// \tif (zIndex > zIndexMax) zIndexMax = zIndex;\r\n\t\t// });\r\n\t\t//\r\n\t\t// if ($dialog.is(':hidden')) $dialog.dialog('open');\r\n\t\t//\r\n\t\t// var $dialogWrapper = $dialog.parent();\r\n\t\t// var $dialogOverlay = $dialogWrapper.next();\r\n\t\t//\r\n\t\t// if ($dialogWrapper.css('z-index') * 1 < zIndexMax) {\r\n\t\t// \t$dialogWrapper.css('z-index', zIndexMax + 2);\r\n\t\t// \t$dialogOverlay.css('z-index', zIndexMax + 1);\r\n\t\t// }\r\n\r\n\t\t$dialog.dialog('open');\r\n\t} else {\r\n\t\tconst options = genVueOptions($dialog);\r\n\r\n\t\t$dialog.dialog(options);\r\n\t}\r\n\r\n\tif (callback) callback($dialog);\r\n};\r\n\r\nconst toViewPage = async ($dialog: $el, pageName?: string, args?: string[], moveDirection?: MoveDirection) => {\r\n\tif (pageName === undefined) pageName = $dialog.data('view-page-active') as string;\r\n\r\n\tif (pageName != $dialog.data('view-page-active')) {\r\n\t\tvar stopped = stopAnimations($dialog);\r\n\t\tif (stopped) await sleep(100);\r\n\t}\r\n\r\n\tif (args === undefined) args = [];\r\n\r\n\tawait updatePageVue($dialog.attr('id') as string, undefined, pageName);\r\n\r\n\tvar $modalLayers = $('> .modal-layer', $dialog);\r\n\tvar $currentPage = $('> .active', $modalLayers);\r\n\tvar $nextPage = $('> [data-view-page=\"' + pageName + '\"]', $modalLayers);\r\n\tvar argsString = args.join(':');\r\n\r\n\tif (moveDirection === undefined) {\r\n\t\tmoveDirection = 'next';\r\n\t\tif ($nextPage.data('order') < $currentPage.data('order')) moveDirection = 'prev';\r\n\t}\r\n\r\n\tif (!$nextPage.length) return;\r\n\r\n\t$dialog.data('view-page-active', pageName);\r\n\r\n\t// запрашиваемая страница уже открыта\r\n\tif ($nextPage.is('.active')) {\r\n\t\tif ($nextPage.data('view-page-args') != argsString) {\r\n\t\t\t$nextPage.data('view-page-args', argsString);\r\n\r\n\t\t\t// dialogs.beforeOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t\t// dialogs.afterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t}\r\n\r\n\t\tbeforeOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\tafterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\r\n\t\treturn;\r\n\t}\r\n\r\n\t$nextPage.data('view-page-args', argsString);\r\n\r\n\tif ($('.top-popup-wrapper', $currentPage).length) {\r\n\t\tTopPopupWorker.close($('.top-popup-wrapper', $currentPage)[0]);\r\n\t}\r\n\r\n\tif ($nextPage.closest('.ui-dialog').is(':hidden')) moveDirection = 'none';\r\n\tif (!$currentPage.length) moveDirection = 'none';\r\n\tif ($nextPage.is(':visible')) moveDirection = 'none';\r\n\tswitch (moveDirection) {\r\n\t\tcase 'prev':\r\n\t\t\t$nextPage.each((_index, el) => {\r\n\t\t\t\t$(el).insertBefore($(el).siblings('.active'));\r\n\t\t\t});\r\n\r\n\t\t\t$currentPage.addClass('right-to-center reverse');\r\n\t\t\t$nextPage.addClass('center-to-left reverse');\r\n\r\n\t\t\tbreak;\r\n\t\tcase 'next':\r\n\t\t\t$nextPage.each((_index, el) => {\r\n\t\t\t\t$(el).insertAfter($(el).siblings('.active'));\r\n\t\t\t});\r\n\r\n\t\t\t$currentPage.addClass('center-to-left');\r\n\t\t\t$nextPage.addClass('right-to-center');\r\n\r\n\t\t\tbreak;\r\n\t}\r\n\r\n\t$dialog.attr('view-page-active', pageName);\r\n\r\n\t$currentPage.removeClass('active');\r\n\t$nextPage.addClass('active');\r\n\r\n\tbeforeOpenViewPage($dialog, $nextPage, pageName, args);\r\n\r\n\tif (moveDirection) {\r\n\t\t$dialog.addClass('i-change-page');\r\n\t\tconst delay = Number($nextPage.css('animation-duration').replace('s', '')) * 1000;\r\n\r\n\t\ttimerClearAnimation = setTimeout(function () {\r\n\t\t\tupdatePageVue($dialog.attr('id') as string, pageName, '');\r\n\t\t\tstopAnimations($dialog);\r\n\t\t\tafterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t\t}, delay);\r\n\t} else {\r\n\t\tawait updatePageVue($dialog.attr('id') as string, pageName, '');\r\n\t\tafterOpenViewPage($dialog, $nextPage, pageName, args);\r\n\t}\r\n};\r\n\r\n/**\r\n * К предыдущему представлению\r\n */\r\nconst toPrevPage = ($dialog: $el) => {\r\n\tvar prevPageName = '';\r\n\r\n\tvar $modalLayers = $('> .modal-layer', $dialog);\r\n\tvar $currentPage = $('> .active', $modalLayers).eq(0);\r\n\tvar $prevPage = $currentPage.prev('[data-view-page]');\r\n\tprevPageName = $prevPage.data('view-page');\r\n\r\n\tif (prevPageName) {\r\n\t\ttoViewPage($dialog, prevPageName, undefined, 'prev');\r\n\t} else {\r\n\t\t$dialog.dialog('close');\r\n\t}\r\n};\r\n\r\n/**\r\n * Для обработки событий вне vue\r\n */\r\nconst beforeOpenViewPageTimers = new Set();\r\nconst beforeOpenViewPage = ($dialog: $el, $page: $el, pageName: string, args: string[]) => {\r\n\t// группировка цепочки событий\r\n\t// запрос на открытие страницы может выполняться несколько раз, чаще такое может быть при открытии, загрузке и переходе сразу к нужной странице\r\n\tconst eventKey = $dialog.attr('id') + $page.eq(0).data('view-page') + pageName + args.join();\r\n\r\n\tif (beforeOpenViewPageTimers.has(eventKey)) return;\r\n\tbeforeOpenViewPageTimers.add(eventKey);\r\n\r\n\tsetTimeout(function () {\r\n\t\tbeforeOpenViewPageTimers.delete(eventKey);\r\n\t\t$dialog.trigger('viewBeforeOpen', [$dialog, $page, pageName, args]);\r\n\t});\r\n};\r\n\r\n/**\r\n * Для обработки событий вне vue\r\n */\r\nconst afterOpenViewPage = ($dialog: $el, $page: $el, pageName: string, args: string[]) => {\r\n\tsetTimeout(function () {\r\n\t\t$dialog.trigger('viewAfterOpen', [$dialog, $page, pageName, args]);\r\n\t});\r\n};\r\n\r\n/**\r\n * Получить состояние: Диалоговое окно находится в состоянии смены страницы\r\n */\r\nconst inAnimation = ($dialog: $el) => {\r\n\treturn $dialog.is('.i-change-page');\r\n};\r\n\r\n/**\r\n * Остановить анимацию смены страницы\r\n *\r\n * @returns Вернет true, если анимация производилась и была остановлена\r\n */\r\nconst stopAnimations = ($dialog: $el) => {\r\n\tif (!inAnimation($dialog)) return false;\r\n\r\n\tclearTimeout(timerClearAnimation);\r\n\r\n\tvar $modalLayers = $('> .modal-layer', $dialog);\r\n\r\n\tvar pageName = $dialog.data('view-page-active');\r\n\t$dialog.removeClass('i-change-page');\r\n\t$('> [data-view-page]', $modalLayers).removeClass('center-to-left right-to-center reverse active');\r\n\t$('> [data-view-page=\"' + pageName + '\"]', $modalLayers).addClass('active');\r\n\r\n\treturn true;\r\n};\r\n\r\n/**\r\n * Закрыть диалоговое окно\r\n */\r\nconst close = function (dialogId: string) {\r\n\tconst $dialog = $('#' + dialogId);\r\n\r\n\tif (!$dialog.dialog('instance')) return;\r\n\r\n\t$dialog.dialog('close');\r\n};\r\n\r\n/**\r\n * Управление props.isLoading\r\n */\r\nconst setLoading = ($page: $el, isLoading: boolean, duration?: number) => {\r\n\tif (!$page.is('[data-view-page]')) $page = $('[data-view-page]:visible', $page);\r\n\r\n\tif (isLoading) {\r\n\t\tif (duration !== undefined) {\r\n\t\t\t$page.each((_index, el) => {\r\n\t\t\t\tel.style.setProperty('--dialog-loading-duration', duration + 's');\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t$page.addClass('i-load-data');\r\n\t} else {\r\n\t\t$page.removeClass('i-load-data');\r\n\r\n\t\t$page.each((_index, el) => {\r\n\t\t\tel.style.setProperty('--dialog-loading-duration', '10s');\r\n\t\t});\r\n\t}\r\n};\r\n\r\nconst isLoading = ($page: $el) => {\r\n\treturn $page.is('.i-load-data');\r\n};\r\n\r\nexport const TopDialogUtils = {\r\n\tupdatePageVue,\r\n\trecalcPositions,\r\n\ttoViewDirty,\r\n\ttoView,\r\n\ttoViewPage,\r\n\ttoPrevPage,\r\n\tsetLoading,\r\n\tisLoading,\r\n\tinAnimation,\r\n\tclose,\r\n};\r\n\r\ninit();\r\n"],"names":["inited","initDialogGlobalEvents","el","querySelectorVisible","elDialog","$dialog","toView","TopDialogUtils","viewNameAndPageLink","viewName","pageLink","$toDialog","$toPage","hash","TopDialogWorker","elForm","elSubmit","$dialogWrapper","topZIndex","_index","zIndex","Core","css","cssM","cssPC","cssModern","cssModernPC","timerClearAnimation","isInited","init","_a","onCreate","onOpen","onClose","genVueOptions","options","_b","_d","_c","updatePageVue","dialogId","pageName","pageNameNext","dialog","getDialogWorker","nextTick","waitWhile","$dialogBody","connectScrollShadow","w1","scrollBarWidth","recalcPositions","setHash","eldDialog","$ui","toViewDirty","toViewPageName","moveDirection","toViewParts","argsString","args","viewNameOr$Dialog","callback","resolve","_reject","timer","toViewPage","stopped","stopAnimations","sleep","$modalLayers","$currentPage","$nextPage","beforeOpenViewPage","afterOpenViewPage","TopPopupWorker","delay","toPrevPage","prevPageName","$prevPage","beforeOpenViewPageTimers","$page","eventKey","inAnimation","close","setLoading","isLoading","duration"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
define(["require","exports","vue","../utils/system.amd","../utils/route.amd"],function(P,w,i,p,u){"use strict";if(typeof i>"u")var i=window.Vue;class l{static state={load:void 0,viewPageN:0,locationHashPrev:""};static inited=!1;static init(e){if(this.inited)return;this.inited=!0,e!=null&&e.load&&(this.state.load=e.load);const t=(e==null?void 0:e.autoInitDelay)??5e3;$(window).on("hashchange.dialogs",()=>{this.compareStates(location.hash,this.state.locationHashPrev)&&this.opendDialogsFromUrl()}),$(window).trigger("hashchange.dialogs"),$(document).on("mousedown","a[data-to-view]",async s=>{const a=s.target.closest("[data-to-view]"),r=a.dataset.toView.split("-")[0],c=$("#"+r),d=$("> .modal-layer",c);$("> .active",d);let h="next";a.dataset.action==="top-dialog-close"&&(h="prev"),a.href=l.genViewPageHash(a.dataset.toView,h)}),$(document).on("click","[data-to-view]",async s=>{const a=s.target.closest("[data-to-view]");if(a.href==="."){s.preventDefault(),a.mousedown(),setTimeout(()=>a.click());return}const n=await this.getDialogsUtils(),r=a.dataset.toView,c=r.split("-")[0],d=$("#"+c),h=$("> .modal-layer",d),k=$("> .active",h),S=!!d.data("data-to-view-replace");let v="next";if(k.length){const L=r.split("-")[1].split(":")[0];$('> [data-view-page="'+L+'"]',h).data("order")<k.data("order")&&(v="prev")}a.dataset.action==="top-dialog-close"&&(v="prev");const f=l.genViewPageHash(r,v);if(a.tagName==="A"){if(!d.is(":visible"))return;if(location.hash.indexOf(r.replace("-","="))!==-1){await n.toViewDirty(r);return}}S?(s.preventDefault(),u.historySetState(!0,f),await n.toViewDirty(r),v=="next"?l.state.viewPageN++:l.state.viewPageN--):a.tagName!=="A"&&(this.compareStates(f,location.hash)?location.hash=f:await n.toViewDirty(r))}),setTimeout(()=>this.getDialogsUtils(),t)}static async getDialogsUtils(){const{TopDialogUtils:e}=await new Promise((t,s)=>P(["./utils-B3ycYRqM.amd"],t,s));return e}static get$dialog(e){return e.closest(".ui-dialog-content")}static get$page(e){return e.closest("[data-view-page]")}static close(e){const t=$("#"+e);t.dialog("instance")&&t.dialog("close")}static destroy(e){const t=$("#"+e);t.dialog("instance")&&(t.dialog("close"),t.dialog("destroy"))}static genViewPageHash(e,t="next"){var s=this.state.viewPageN;t=="prev"?s--:s++;var a=e.split("-"),n=a.shift(),r=a.join("-"),c=u.genHash("vpn",s),c=u.genHash("view-"+n,r,c);return c}static compareStates(e,t){const s=e.match(/[#&]view-[^&]+/g)||[],a=t.match(/[#&]view-[^&]+/g)||[];return!!(s.length!==a.length||s.filter((r,c)=>{const d=a[c]||"";return r!==d}).length)}static opendDialogsFromUrl=async()=>{const e=Number(u.getHash("vpn"))||0;this.state.locationHashPrev=location.hash;let t;const s=new RegExp("view-((\\w+)=([\\w-]+)(?::([\\w.:-]+))?)","g");for(;t=s.exec(location.hash);){var a="next";return e<this.state.viewPageN&&(a="prev"),(await this.getDialogsUtils()).toViewDirty(t[1],a)}return $(".ui-dialog-content[data-view-page-active]:visible").each((n,r)=>{var c=$(r),d=c.attr("id"),h=u.getHash("view-"+d);h||c.dialog("close")}),this.state.viewPageN=e,!0}}class D{id;idAttr;Component;isMounted=i.ref(!1);isReady=i.ref(!1);isOpened=i.ref(!1);pageActive=i.ref("");isLoadingPage=i.ref(!1);pageActiveNext=i.ref("");props;emit;onCloseOnce;constructor(e){this.id=e.id,this.idAttr="dialog_"+e.id,this.Component=i.markRaw(e)}onMounted(e,t){this.isMounted.value=!0,this.props=e.props,this.emit=t.emit}async open(e="main",t,s=[],a,n){t&&await this.setProps(t),a&&(this.onCloseOnce=a),await(await l.getDialogsUtils()).toView(this.idAttr,e,s,n)}async openAsLink(e="main",t,s=[],a,n){t&&await this.setProps(t),a&&(this.onCloseOnce=a);const r=this.idAttr+"-"+e;location.hash=l.genViewPageHash(r,n)}async close(){l.close(this.idAttr)}async destroy(){l.destroy(this.idAttr)}async setProps(e={}){this.isMounted||await p.waitWhile(()=>!this.props);for(const t in this.props)this.props[t]=e[t]}needShowPage(e){return this.isOpened.value?this.pageActive.value===e||this.pageActiveNext.value===e:!1}}const N={class:"top-dialogs",style:{display:"none"}},g=i.shallowReactive(new Map),m=o=>(o=o.replace(/^dialog_/,""),g.get(o)),A=o=>{if(!(o!=null&&o.id))throw console.log({TopDialogComponent:o}),new Error("Expected TopDialogComponent");return g.has(o.id)||g.set(o.id,new D(o)),g.get(o.id)},V=i.defineComponent({name:"DialogWrapper",__name:"dialogs",setup(o){return i.onUnmounted(()=>{g.forEach(e=>e.destroy()),g.clear()}),(e,t)=>(i.openBlock(),i.createElementBlock("div",N,[(i.openBlock(!0),i.createElementBlock(i.Fragment,null,i.renderList(i.unref(g),([s,a])=>(i.openBlock(),i.createBlock(i.resolveDynamicComponent(a.Component),{key:s}))),128))]))}});class H{resolve;worker=i.ref(null);constructor(e){this.resolve=e}async get(){if(this.worker.value)return this.worker.value;const t=(await this.resolve()).default;this.worker.value=y(t);const s=this.worker.value;return await p.waitWhile(()=>!s.isMounted),s}async open(...e){await(await this.get()).open(...e)}async openAsLink(...e){(await this.get()).openAsLink(...e)}async close(...e){(await this.get()).close(...e)}async destroy(...e){(await this.get()).destroy(...e)}async setProps(...e){await(await this.get()).setProps(...e)}}const U=()=>{var e;const o=i.getCurrentInstance();if((e=o==null?void 0:o.type)!=null&&e.id){const t=m(o.type.id);if(t)return t}return i.inject("dialogWorker")},y=o=>A(o),x=o=>new H(o);w.TopDialogWorker=l,w._sfc_main=V,w.getDialogWorker=m,w.useAsyncTopDialog=x,w.useTopDialog=y,w.useTopDialogSelf=U});
|
|
2
|
-
//# sourceMappingURL=utils-DpejCylJ.amd.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils-DpejCylJ.amd.js","sources":["../../src/components/dialog/lib/worker.ts","../../src/components/dialog/dialog/composables/dialogWorker.ts","../../src/components/dialog/dialog/dialogs/dialogs.vue","../../src/components/dialog/dialog/composables/asyncDialogWorker.ts","../../src/components/dialog/dialog/composables/utils.ts"],"sourcesContent":["import { genHash, getHash, historySetState } from '@/core/utils/route';\r\nimport type { MoveDirection, TopDialogOptions } from './types';\r\nimport type { $el } from '@/components/types';\r\n\r\nexport abstract class TopDialogWorker {\r\n\tstatic state = {\r\n\t\tload: undefined as TopDialogOptions['load'] | undefined,\r\n\r\n\t\t/**\r\n\t\t * Порядковай номер перехода в диалоговых окнах\r\n\t\t *\r\n\t\t * Для расчета направления Вперед / Назад\r\n\t\t */\r\n\t\tviewPageN: 0,\r\n\t\tlocationHashPrev: '',\r\n\t};\r\n\r\n\tprivate static inited = false;\r\n\r\n\t/**\r\n\t * Инициировать события слежения за парамтерами url\r\n\t *\r\n\t * Если в параметрах есть запрос на открытие диалогового окна, TopDialog будет автоматически подключен на страницу\r\n\t */\r\n\tstatic init(options?: TopDialogOptions) {\r\n\t\tif (this.inited) return;\r\n\t\tthis.inited = true;\r\n\r\n\t\tif (options?.load) {\r\n\t\t\tthis.state.load = options.load;\r\n\t\t}\r\n\r\n\t\tconst autoInitDelay = options?.autoInitDelay ?? 5000;\r\n\r\n\t\t$(window).on('hashchange.dialogs', () => {\r\n\t\t\tconst dialogsStateChanged = this.compareStates(location.hash, this.state.locationHashPrev);\r\n\t\t\tif (dialogsStateChanged) this.opendDialogsFromUrl();\r\n\t\t});\r\n\r\n\t\t$(window).trigger('hashchange.dialogs');\r\n\r\n\t\t/**\r\n\t\t * Сгенерировать ссылку для перехода к странице диалогового окна\r\n\t\t */\r\n\t\t$(document).on('mousedown', 'a[data-to-view]', async (e) => {\r\n\t\t\tconst el = e.target.closest('[data-to-view]');\r\n\r\n\t\t\tconst toView = el.dataset.toView;\r\n\t\t\tconst viewName = toView.split('-')[0];\r\n\t\t\tconst $toDialog = $('#' + viewName);\r\n\t\t\tconst $modalLayers = $('> .modal-layer', $toDialog);\r\n\t\t\tconst $currentPage = $('> .active', $modalLayers);\r\n\r\n\t\t\tlet moveDirection: MoveDirection = 'next';\r\n\r\n\t\t\t// /**\r\n\t\t\t// * Данный алгоритм определения направления работает не корректно, так как для чтения свойства order менят состояние через getDialogsUtils()\r\n\t\t\t// */\r\n\t\t\t// if ($currentPage.length) {\r\n\t\t\t// \tconst pageName = toView.split('-')[1].split(':')[0];\r\n\t\t\t//\r\n\t\t\t// \tconst TopDialogUtils = await this.getDialogsUtils();\r\n\t\t\t//\r\n\t\t\t// \tawait TopDialogUtils.updatePageVue(viewName, undefined, pageName);\r\n\t\t\t//\r\n\t\t\t// \tconst $nextPage = $('> [data-view-page=\"' + pageName + '\"]', $modalLayers);\r\n\t\t\t// \tif ($nextPage.data('order') < $currentPage.data('order')) moveDirection = 'prev';\r\n\t\t\t// }\r\n\r\n\t\t\tif (el.dataset.action === 'top-dialog-close') moveDirection = 'prev';\r\n\r\n\t\t\tel.href = TopDialogWorker.genViewPageHash(el.dataset.toView, moveDirection);\r\n\t\t});\r\n\r\n\t\t/**\r\n\t\t * Осуществить переход по ссылке с учетом historyType\r\n\t\t */\r\n\t\t$(document).on('click', '[data-to-view]', async (e) => {\r\n\t\t\tconst el = e.target.closest('[data-to-view]');\r\n\r\n\t\t\t// Подождать генерацию ссылки\r\n\t\t\tif (el.href === '.') {\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tel.mousedown();\r\n\r\n\t\t\t\tsetTimeout(() => el.click());\r\n\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst TopDialogUtils = await this.getDialogsUtils();\r\n\r\n\t\t\tconst toView = el.dataset.toView;\r\n\t\t\tconst viewName = toView.split('-')[0];\r\n\t\t\tconst $toDialog = $('#' + viewName);\r\n\t\t\tconst $modalLayers = $('> .modal-layer', $toDialog);\r\n\t\t\tconst $currentPage = $('> .active', $modalLayers);\r\n\r\n\t\t\tconst replaceHistory = !!$toDialog.data('data-to-view-replace');\r\n\r\n\t\t\tlet moveDirection: MoveDirection = 'next';\r\n\t\t\tif ($currentPage.length) {\r\n\t\t\t\tconst pageName = toView.split('-')[1].split(':')[0];\r\n\t\t\t\tconst $nextPage = $('> [data-view-page=\"' + pageName + '\"]', $modalLayers);\r\n\t\t\t\tif ($nextPage.data('order') < $currentPage.data('order')) moveDirection = 'prev';\r\n\t\t\t}\r\n\t\t\tif (el.dataset.action === 'top-dialog-close') moveDirection = 'prev';\r\n\r\n\t\t\tconst hash = TopDialogWorker.genViewPageHash(toView, moveDirection);\r\n\r\n\t\t\tif (el.tagName === 'A') {\r\n\t\t\t\t// диалоговое окно еще не открыто, произвести переход по ссылке\r\n\t\t\t\tif (!$toDialog.is(':visible')) return;\r\n\r\n\t\t\t\t// в адресе уже указана эта страница, необходимсо явно запросить ее открытие\r\n\t\t\t\tif (location.hash.indexOf(toView.replace('-', '=')) !== -1) {\r\n\t\t\t\t\tawait TopDialogUtils.toViewDirty(toView);\r\n\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (replaceHistory) {\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\thistorySetState(true, hash);\r\n\r\n\t\t\t\tawait TopDialogUtils.toViewDirty(toView);\r\n\r\n\t\t\t\tif (moveDirection == 'next') {\r\n\t\t\t\t\tTopDialogWorker.state.viewPageN++;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tTopDialogWorker.state.viewPageN--;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (el.tagName !== 'A') {\r\n\t\t\t\t\tif (this.compareStates(hash, location.hash)) {\r\n\t\t\t\t\t\tlocation.hash = hash;\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tawait TopDialogUtils.toViewDirty(toView);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tsetTimeout(() => this.getDialogsUtils(), autoInitDelay);\r\n\t}\r\n\r\n\tstatic async getDialogsUtils() {\r\n\t\tconst { TopDialogUtils } = await import('./utils');\r\n\r\n\t\treturn TopDialogUtils;\r\n\t}\r\n\r\n\tstatic get$dialog($el: $el) {\r\n\t\treturn $el.closest('.ui-dialog-content');\r\n\t};\r\n\r\n\tstatic get$page($el: $el) {\r\n\t\treturn $el.closest('[data-view-page]');\r\n\t};\r\n\r\n\t/**\r\n\t * Закрыть диалоговое окно\r\n\t */\r\n\tstatic close(dialogId: string) {\r\n\t\tconst $dialog = $('#' + dialogId);\r\n\r\n\t\tif (!$dialog.dialog('instance')) return;\r\n\r\n\t\t$dialog.dialog('close');\r\n\t};\r\n\r\n\t/**\r\n\t * Размонтировать $.dialog\r\n\t */\r\n\tstatic destroy(dialogId: string) {\r\n\t\tconst $dialog = $('#' + dialogId);\r\n\r\n\t\tif (!$dialog.dialog('instance')) return;\r\n\r\n\t\t$dialog.dialog('close');\r\n\t\t$dialog.dialog('destroy');\r\n\t};\r\n\r\n\t/**\r\n\t * Сгенерировать ссылку на страницу в диалоговом окне\r\n\t * @param toView - указатель в формате: dialog_{{ dialogId }}={{ pageName }}:{{ args }}\r\n\t * @param moveDirection\r\n\t */\r\n\tstatic genViewPageHash(toView: string, moveDirection: MoveDirection = 'next') {\r\n\t\tvar toViewPageN = this.state.viewPageN;\r\n\t\tif (moveDirection == 'prev') {\r\n\t\t\ttoViewPageN--;\r\n\t\t} else {\r\n\t\t\ttoViewPageN++;\r\n\t\t}\r\n\r\n\t\tvar viewNameAndPageLink = toView.split('-');\r\n\t\tvar viewName = viewNameAndPageLink.shift();\r\n\t\tvar pageLink = viewNameAndPageLink.join('-');\r\n\t\tvar hash = genHash('vpn', toViewPageN);\r\n\t\tvar hash = genHash('view-' + viewName, pageLink, hash);\r\n\r\n\t\treturn hash;\r\n\t};\r\n\r\n\t/**\r\n\t * Сравнить версию открытых диалоговых окон\r\n\t * @returns вернет true, если состояния открытых окон изменилось\r\n\t */\r\n\tstatic compareStates(hash: string, hash2: string) {\r\n\t\tconst mathes = hash.match(/[#&]view-[^&]+/g) || [];\r\n\t\tconst mathes2 = hash2.match(/[#&]view-[^&]+/g) || [];\r\n\r\n\t\tif (mathes.length !== mathes2.length) return true;\r\n\r\n\t\tconst mathesChanged = mathes.filter((math, n) => {\r\n\t\t\tconst math2 = mathes2[n] || '';\r\n\r\n\t\t\treturn math !== math2;\r\n\t\t});\r\n\r\n\t\tif (mathesChanged.length) return true;\r\n\r\n\t\treturn false;\r\n\t};\r\n\r\n\tstatic opendDialogsFromUrl = async () => {\r\n\t\tconst toViewPageN = Number(getHash('vpn')) || 0;\r\n\r\n\t\tthis.state.locationHashPrev = location.hash;\r\n\r\n\t\t// Открыть диалоговое окно\r\n\t\tlet view: RegExpExecArray | null;\r\n\t\t// const regexp = new RegExp('view-((\\\\w+)=([\\\\w-]+)(?::([\\\\w.:-]+))?)' + '(' + Math.random() + ')?', 'g'); // fix babel minify regexp\r\n\t\tconst regexp = new RegExp('view-((\\\\w+)=([\\\\w-]+)(?::([\\\\w.:-]+))?)', 'g');\r\n\t\twhile (view = regexp.exec(location.hash)) {\r\n\t\t\tvar moveDirection: MoveDirection = 'next';\r\n\t\t\tif (toViewPageN < this.state.viewPageN) moveDirection = 'prev';\r\n\r\n\t\t\tconst TopDialogUtils = await this.getDialogsUtils();\r\n\r\n\t\t\treturn TopDialogUtils.toViewDirty(view[1], moveDirection);\r\n\t\t}\r\n\r\n\t\t// Закрыть ненужные view\r\n\t\t$('.ui-dialog-content[data-view-page-active]:visible').each((_index: number, dialog: HTMLElement) => {\r\n\t\t\tvar $dialog = $(dialog);\r\n\r\n\t\t\tvar viewName = $dialog.attr('id');\r\n\t\t\tvar pageName = getHash('view-' + viewName);\r\n\t\t\tif (!pageName) $dialog.dialog('close');\r\n\t\t});\r\n\r\n\t\tthis.state.viewPageN = toViewPageN;\r\n\r\n\t\treturn true;\r\n\t};\r\n}\r\n","import { type ComponentInstance, type ComponentInternalInstance, markRaw, ref } from 'vue';\r\nimport { waitWhile } from '@/core/utils/system';\r\nimport TopDialog from '../dialog.vue';\r\nimport { TopDialogWorker } from '@/components/dialog/lib/worker';\r\nimport type { MoveDirection } from '@/components/dialog/lib/types';\r\nimport type { TopDialogComponent } from './types';\r\n\r\n/**\r\n * Объект для работы с диалоговым окном\r\n *\r\n * Каждое окно уникально и может быть открыто одновременно только один раз\r\n *\r\n * Можно определить много окон, после чего с ними можно вести работу в любой части приложения\r\n */\r\nexport class TopDialogHandle<T extends TopDialogComponent> {\r\n\r\n\t/**\r\n\t * Индентификатор, определяется на уровне компонента TopDialogComponent\r\n\t *\r\n\t * Может использоваться в навигации для открытия нужных окон с нужными настройками\r\n\t */\r\n\tid: string;\r\n\r\n\t/**\r\n\t * ID, используемый в верстке диалогового окна\r\n\t */\r\n\tidAttr: string;\r\n\r\n\t/**\r\n\t * Пользовательский компонент диалогового окна\r\n\t */\r\n\tComponent: T;\r\n\r\n\t/**\r\n\t * Компонент инициирован\r\n\t *\r\n\t * Устанавливается после первого вызова useTopDialog()\r\n\t */\r\n\tisMounted = ref(false);\r\n\r\n\t/**\r\n\t * Компонент готов к использованию\r\n\t *\r\n\t * Используется для внутренних преобразований после отрисовки\r\n\t */\r\n\tisReady = ref(false);\r\n\r\n\t/**\r\n\t * Диалоговое окно открыто\r\n\t */\r\n\tisOpened = ref(false);\r\n\r\n\t/**\r\n\t * Имя активной страницы дилогового окна\r\n\t */\r\n\tpageActive = ref('');\r\n\r\n\t/**\r\n\t * Диалоговое окно находится в состоянии загрузки своей страницы\r\n\t */\r\n\tisLoadingPage = ref(false);\r\n\r\n\t/**\r\n\t * Следующая активная страница\r\n\t *\r\n\t * В один момент времени может потребоваться отобразить две страницы, чтобы воспроизвести анимацию\r\n\t */\r\n\tpageActiveNext = ref('');\r\n\r\n\t/**\r\n\t * props компонента, доступны после инициализации\r\n\t */\r\n\tprops?: ComponentInstance<T>['$props'];\r\n\r\n\t/**\r\n\t * emit базового компонента `TopDialog`\r\n\t */\r\n\temit?: ComponentInstance<typeof TopDialog>['$emit'];\r\n\r\n\t/**\r\n\t * Одноразовое событие на закрытие диалогового окна\r\n\t *\r\n\t * Используется для привязки окна к сценариям использования\r\n\t */\r\n\tonCloseOnce?: (props: typeof this.props, pageName: string) => void;\r\n\r\n\tconstructor(TopDialogComponent: T) {\r\n\t\tthis.id = TopDialogComponent.id!;\r\n\t\tthis.idAttr = 'dialog_' + TopDialogComponent.id;\r\n\t\tthis.Component = markRaw(TopDialogComponent);\r\n\t}\r\n\r\n\t/**\r\n\t * Событие - компонент инициирован\r\n\t */\r\n\tonMounted(topDialogComponent: ComponentInternalInstance, topDialogBaseComponent: ComponentInternalInstance) {\r\n\t\tthis.isMounted.value = true;\r\n\t\tthis.props = topDialogComponent.props;\r\n\t\tthis.emit = topDialogBaseComponent.emit;\r\n\t}\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно\r\n\t *\r\n\t * Учтите, что props в диалоговом окне будут доступны не сразу, а только после инициализации vue компонента\r\n\t */\r\n\tasync open(pageName: string = 'main', props?: {}, args: [] = [], onCloseOnce?: typeof this.onCloseOnce, moveDirection?: MoveDirection) {\r\n\t\tif (props) await this.setProps(props);\r\n\t\tif (onCloseOnce) this.onCloseOnce = onCloseOnce;\r\n\r\n\t\tconst TopDialogUtils = await TopDialogWorker.getDialogsUtils();\r\n\r\n\t\tawait TopDialogUtils.toView(this.idAttr, pageName, args, moveDirection);\r\n\t};\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно как ссылку, для хеш-навигации\r\n\t *\r\n\t * Диалоговые окна загружаются по имени, см. настройку плагина Core topDialogLoader\r\n\t */\r\n\tasync openAsLink(\r\n\t\tpageName: string = 'main',\r\n\t\tprops?: {},\r\n\t\t_args: string[] = [],\r\n\t\tonCloseOnce?: typeof this.onCloseOnce,\r\n\t\tmoveDirection?: MoveDirection,\r\n\t) {\r\n\t\tif (props) await this.setProps(props);\r\n\t\tif (onCloseOnce) this.onCloseOnce = onCloseOnce;\r\n\r\n\t\tconst viewName = this.idAttr + '-' + pageName;\r\n\r\n\t\tlocation.hash = TopDialogWorker.genViewPageHash(viewName, moveDirection);\r\n\t};\r\n\r\n\t/**\r\n\t * Закрыть диалоговое окно\r\n\t *\r\n\t * Не меняет состояние компонента диалогового окна\r\n\t */\r\n\tasync close() {\r\n\t\tTopDialogWorker.close(this.idAttr);\r\n\t};\r\n\r\n\t/**\r\n\t * Размонтировать $.dialog\r\n\t */\r\n\tasync destroy() {\r\n\t\tTopDialogWorker.destroy(this.idAttr);\r\n\t}\r\n\r\n\t/**\r\n\t * Устанвоить props\r\n\t *\r\n\t * Полностью сбрасывается состояние props\r\n\t */\r\n\tasync setProps(props: ComponentInstance<T>['$props'] = {}) {\r\n\t\t// ожидание инициализации компонента\r\n\t\tif (!this.isMounted) {\r\n\t\t\tawait waitWhile(() => !this.props);\r\n\t\t}\r\n\r\n\t\tfor (const name in this.props) {\r\n\t\t\tthis.props[name] = props[name];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Проверить, есть ли необходимость отрисовки страницы диалогового окна\r\n\t */\r\n\tneedShowPage(pageName: string): boolean {\r\n\t\tif (!this.isOpened.value) return false;\r\n\r\n\t\treturn this.pageActive.value === pageName || this.pageActiveNext.value === pageName;\r\n\t}\r\n}\r\n","<script lang=\"ts\">\r\nimport { shallowReactive } from 'vue';\r\nimport { TopDialogHandle } from '@/components/dialog/dialog/composables/dialogWorker';\r\nimport type { TopDialogComponent } from '@/components/dialog/dialog/composables/types';\r\n\r\n/**\r\n * Словарь всех используемых диалоговых окон\r\n *\r\n * В других компонентах не использовать\r\n */\r\nconst dialogsWorkers = shallowReactive(new Map<string, TopDialogHandle<TopDialogComponent>>());\r\n\r\nexport const getDialogWorker = (id: string) => {\r\n\tid = id.replace(/^dialog_/, '');\r\n\r\n\treturn dialogsWorkers.get(id);\r\n};\r\n\r\n/**\r\n * Добавить компонент диалогового окна для использования\r\n */\r\nexport const addDialogWorker = <T extends TopDialogComponent>(TopDialogComponent: T): TopDialogHandle<T> => {\r\n\tif (!TopDialogComponent?.id) {\r\n\t\tconsole.log({ TopDialogComponent: TopDialogComponent });\r\n\r\n\t\tthrow new Error('Expected TopDialogComponent');\r\n\t}\r\n\r\n\tif (!dialogsWorkers.has(TopDialogComponent.id)) {\r\n\t\tdialogsWorkers.set(TopDialogComponent.id, new TopDialogHandle(TopDialogComponent));\r\n\t}\r\n\r\n\treturn dialogsWorkers.get(TopDialogComponent.id) as TopDialogHandle<T>;\r\n};\r\n</script>\r\n\r\n<script setup lang=\"ts\">\r\nimport { onUnmounted } from 'vue';\r\n\r\ndefineOptions({\r\n\tname: 'DialogWrapper',\r\n});\r\n\r\nonUnmounted(() => {\r\n\tdialogsWorkers.forEach(dialog => dialog.destroy());\r\n\tdialogsWorkers.clear();\r\n});\r\n</script>\r\n\r\n<template>\r\n\t<div class=\"top-dialogs\" style=\"display: none;\">\r\n\t\t<component\r\n\t\t\tv-for=\"[dialogId, dialog] in dialogsWorkers\"\r\n\t\t\t:is=\"dialog.Component\"\r\n\t\t\t:key=\"dialogId\"\r\n\t\t/>\r\n\t</div>\r\n</template>\r\n","import type { Ref } from 'vue';\r\nimport { ref } from 'vue';\r\nimport { useTopDialog } from './utils';\r\nimport { waitWhile } from '@/core/utils/system';\r\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\r\nimport { TopDialogHandle } from './dialogWorker';\r\n\r\n/**\r\n * Объект для работы с асинхронным диалоговым окном\r\n *\r\n * Является прослойкой для доступа к TopDialogHandle\r\n */\r\nexport class AsyncTopDialogHandle<T extends TopDialogComponent> {\r\n\r\n\t/**\r\n\t * Функция, определяющая компонент TopDialogComponent\r\n\t */\r\n\treadonly resolve: AsyncTopDialogComponentLoader<T>;\r\n\r\n\t/**\r\n\t * Реактивная Сссылка на объект worker,\r\n\t *\r\n\t * Ссылка не будет указывать на объект, если диалоговое окно еще не загружено\r\n\t */\r\n\treadonly worker: Ref<TopDialogHandle<T> | null> = ref(null);\r\n\r\n\tconstructor(resolve: AsyncTopDialogComponentLoader<T>) {\r\n\t\tthis.resolve = resolve;\r\n\t}\r\n\r\n\t/**\r\n\t * Получить доступ к TopDialogHandle\r\n\t */\r\n\tasync get() {\r\n\t\tif (this.worker.value) return this.worker.value;\r\n\r\n\t\tconst result = await this.resolve();\r\n\t\tconst TopDialogComponent = result.default;\r\n\r\n\t\tthis.worker.value = useTopDialog(TopDialogComponent);\r\n\r\n\t\tconst worker = this.worker.value;\r\n\r\n\t\tawait waitWhile(() => !worker.isMounted);\r\n\r\n\t\treturn worker;\r\n\t}\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно\r\n\t */\r\n\tasync open(...args: Parameters<TopDialogHandle<T>['open']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tawait worker.open(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Открыть диалоговое окно как ссылку, для хеш-навигации\r\n\t *\r\n\t * Только общедоступные диалоговые окна, расположенные в @/dialogs\r\n\t */\r\n\tasync openAsLink(...args: Parameters<TopDialogHandle<T>['open']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tvoid worker.openAsLink(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Закрыть диалоговое окно\r\n\t *\r\n\t * Не меняет состояние компонента диалогового окна\r\n\t */\r\n\tasync close(...args: Parameters<TopDialogHandle<T>['close']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tworker.close(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Размонтировать виджет диалогового окна\r\n\t */\r\n\tasync destroy(...args: Parameters<TopDialogHandle<T>['close']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tworker.destroy(...args);\r\n\t}\r\n\r\n\t/**\r\n\t * Устанвоить props\r\n\t *\r\n\t * Полностью сбрасывается состояние props\r\n\t */\r\n\tasync setProps(...args: Parameters<TopDialogHandle<T>['setProps']>) {\r\n\t\tconst worker = await this.get();\r\n\r\n\t\tawait worker.setProps(...args);\r\n\t}\r\n}\r\n","import { getCurrentInstance, inject } from 'vue';\r\nimport { TopDialogHandle } from './dialogWorker';\r\nimport { AsyncTopDialogHandle } from './asyncDialogWorker';\r\nimport type { AsyncTopDialogComponentLoader, TopDialogComponent } from './types';\r\nimport { addDialogWorker, getDialogWorker } from '../dialogs/dialogs.vue';\r\n\r\n/**\r\n * Получить объект управленя текущим диалоговым окном\r\n */\r\nexport const useTopDialogSelf = () => {\r\n\t// вызов из пользовтаельского компонента диалога\r\n\tconst topDialogComponent = getCurrentInstance() as any;\r\n\tif (topDialogComponent?.type?.id) {\r\n\t\tconst dialogWorker = getDialogWorker(topDialogComponent.type.id);\r\n\t\tif (dialogWorker) return dialogWorker;\r\n\t}\r\n\r\n\treturn inject('dialogWorker') as TopDialogHandle<TopDialogComponent>;\r\n};\r\n\r\n/**\r\n * Получить объект управленя диалоговым окном\r\n *\r\n * При первом вызове компонент диалогового окна будет внедрен в компонент DialogWrapper\r\n */\r\nexport const useTopDialog = <T extends TopDialogComponent>(DialogComponent: T): TopDialogHandle<T> => {\r\n\treturn addDialogWorker(DialogComponent);\r\n};\r\n\r\n/**\r\n * Получить объект управленя асинхронным диалоговым окном\r\n *\r\n * Компонент диалогового окна будет загружен и инициирован при первом взаимодействии с объектом\r\n *\r\n * Использует useTopDialog()\r\n */\r\nexport const useAsyncTopDialog = <T extends TopDialogComponent>(resolve: AsyncTopDialogComponentLoader<T>): AsyncTopDialogHandle<T> => {\r\n\treturn new AsyncTopDialogHandle(resolve);\r\n};\r\n"],"names":["TopDialogWorker","options","e","viewName","$modalLayers","moveDirection","el","toView","$currentPage","pageName","TopDialogUtils","utils_route","hash","$el","dialogId","$dialog","viewNameAndPageLink","pageLink","hash2","math","math2","toViewPageN","view","dialog","TopDialogHandle","vue","TopDialogComponent","topDialogComponent","topDialogBaseComponent","props","args","onCloseOnce","_args","name","getDialogWorker","id","dialogsWorkers","addDialogWorker","AsyncTopDialogHandle","resolve","useTopDialogSelf","_a","dialogWorker","useTopDialog","DialogComponent","useAsyncTopDialog"],"mappings":"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"}
|
|
File without changes
|