Download plugins/CoreHome/vue/src/PopoverHandler/PopoverHandler.ts from Leon4gr45/matomo: direct link, hf CLI and curl.
- Browser
- Download file 2.23 kB
-
https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/plugins/CoreHome/vue/src/PopoverHandler/PopoverHandler.ts
- Command line
-
hf download hf://spaces/Leon4gr45/matomo/plugins/CoreHome/vue/src/PopoverHandler/PopoverHandler.ts
-
curl -L -o PopoverHandler.ts https://huggingface.co/spaces/Leon4gr45/matomo/resolve/main/plugins/CoreHome/vue/src/PopoverHandler/PopoverHandler.ts
2.23 kB
| /*! | |
| * Matomo - free/libre analytics platform | |
| * | |
| * @link https://matomo.org | |
| * @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later | |
| */ | |
| import { watch } from 'vue'; | |
| import MatomoUrl from '../MatomoUrl/MatomoUrl'; | |
| const { $ } = window; | |
| class PopoverHandler { | |
| constructor() { | |
| this.setup(); | |
| } | |
| private setup() { | |
| watch(() => MatomoUrl.parsed.value.popover, () => this.onPopoverParamChanged()); | |
| if (MatomoUrl.parsed.value.popover) { | |
| this.onPopoverParamChangedInitial(); | |
| } | |
| } | |
| // don't initiate the handler until the page had a chance to render, | |
| // since some rowactions depend on what's been loaded. | |
| private onPopoverParamChangedInitial() { | |
| $(() => { | |
| setTimeout(() => { | |
| this.openOrClose(); | |
| }); | |
| }); | |
| } | |
| private onPopoverParamChanged() { | |
| // make sure all popover handles were registered | |
| $(() => { | |
| this.openOrClose(); | |
| }); | |
| } | |
| private openOrClose() { | |
| this.close(); | |
| // should be rather done by routing | |
| const popoverParam = MatomoUrl.parsed.value.popover as string; | |
| if (popoverParam) { | |
| this.open(popoverParam); | |
| } else { | |
| // the URL should only be set to an empty popover if there are no popovers in the stack. | |
| // to avoid avoid any strange inconsistent states, we reset the popover stack here. | |
| window.broadcast.resetPopoverStack(); | |
| } | |
| } | |
| private close() { | |
| window.Piwik_Popover.close(); | |
| } | |
| private open(thePopoverParam: string) { | |
| // in case the $ was encoded (e.g. when using copy&paste on urls in some browsers) | |
| let popoverParam = decodeURIComponent(thePopoverParam); | |
| // revert special encoding from broadcast.propagateNewPopoverParameter() | |
| popoverParam = popoverParam.replace(/\$/g, '%'); | |
| popoverParam = decodeURIComponent(popoverParam); | |
| const popoverParamParts = popoverParam.split(':'); | |
| const handlerName = popoverParamParts[0]; | |
| popoverParamParts.shift(); | |
| const param = popoverParamParts.join(':'); | |
| if (typeof window.broadcast.popoverHandlers[handlerName] !== 'undefined' | |
| && !window.broadcast.isLoginPage() | |
| ) { | |
| window.broadcast.popoverHandlers[handlerName](param); | |
| } | |
| } | |
| } | |
| export default new PopoverHandler(); | |