platypush/platypush/backend/http/webapp/dist/static/js/app-legacy.523328cf.js.map

1 line
173 KiB
Plaintext

{"version":3,"file":"static/js/app-legacy.523328cf.js","mappings":"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,uBAAwB,CACvB,KACA,KACA,KACA,KACA,IACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,KACA,KACA,IACA,KACA,MAED,yBAA0B,CACzB,KACA,KACA,KACA,KACA,IACA,KACA,MAED,mBAAoB,CACnB,IACA,KACA,KACA,KACA,IACA,KACA,KAED,gBAAiB,CAChB,KACA,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,KACA,KACA,KACA,MAED,wBAAyB,CACxB,KACA,KACA,KACA,MAED,uBAAwB,CACvB,KACA,KACA,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,IACA,KACA,MAED,mBAAoB,CACnB,MAED,gBAAiB,CAChB,KACA,MAED,kBAAmB,CAClB,KACA,KACA,IACA,KACA,MAED,cAAe,CACd,KACA,KACA,MAED,oBAAqB,CACpB,KACA,KACA,MAED,sBAAuB,CACtB,IACA,KAED,qBAAsB,CACrB,KACA,KACA,KACA,MAED,gBAAiB,CAChB,KACA,KACA,KACA,IACA,MAED,oBAAqB,CACpB,KACA,KACA,KACA,IACA,OAGF,SAASyP,EAAoBC,GAC5B,IAAIC,EAAoBC,EAAE5P,EAAK0P,GAC9B,OAAO3L,QAAQkC,UAAUE,MAAK,WAC7B,IAAI9M,EAAI,IAAIwW,MAAM,uBAAyBH,EAAM,KAEjD,MADArW,EAAEc,KAAO,mBACHd,CACP,IAGD,IAAIyW,EAAM9P,EAAI0P,GAAMja,EAAKqa,EAAI,GAC7B,OAAO/L,QAAQC,IAAI8L,EAAIvN,MAAM,GAAGvC,IAAI2P,EAAoBtW,IAAI8M,MAAK,WAChE,OAAOwJ,EAAoBla,EAC5B,GACD,CACAga,EAAoBpU,KAAO,WAAa,OAAO5B,OAAO4B,KAAK2E,EAAM,EACjEyP,EAAoBha,GAAK,KACzBsa,EAAOC,QAAUP,C,uBCxMjB,IAAIzP,EAAM,CACT,mBAAoB,CACnB,IACA,KAED,iBAAkB,CACjB,KACA,MAED,oBAAqB,CACpB,KACA,KACA,KACA,MAED,mBAAoB,CACnB,KACA,KACA,MAED,0BAA2B,CAC1B,IAC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","sources":["webpack://platypush/./src/bus.js","webpack://platypush/./src/App.vue","webpack://platypush/./src/components/Notifications.vue","webpack://platypush/./src/components/Notification.vue","webpack://platypush/./src/components/Notification.vue?deb2","webpack://platypush/./src/components/Notifications.vue?e79f","webpack://platypush/./src/Events.vue","webpack://platypush/./src/Events.vue?0562","webpack://platypush/./src/components/VoiceAssistant.vue","webpack://platypush/./src/components/VoiceAssistant.vue?e102","webpack://platypush/./src/components/Ntfy.vue","webpack://platypush/./src/components/Ntfy.vue?4660","webpack://platypush/./src/components/Pushbullet.vue","webpack://platypush/./src/components/Pushbullet.vue?a5f8","webpack://platypush/./src/App.vue?7ccd","webpack://platypush/./src/views/Dashboard.vue","webpack://platypush/./src/components/widgets/Row.vue","webpack://platypush/./src/components/widgets/Row.vue?bc29","webpack://platypush/./src/components/widgets/Widget.vue","webpack://platypush/./src/components/widgets/Widget.vue?043c","webpack://platypush/./src/views/Dashboard.vue?040e","webpack://platypush/./src/views/NotFound.vue","webpack://platypush/./src/views/NotFound.vue?0aab","webpack://platypush/./src/views/Login.vue","webpack://platypush/./src/views/Login.vue?240b","webpack://platypush/./src/views/Register.vue","webpack://platypush/./src/views/Register.vue?157d","webpack://platypush/./src/views/Panel.vue","webpack://platypush/./src/components/Nav.vue","webpack://platypush/./src/components/Nav.vue?1f44","webpack://platypush/./src/views/Panel.vue?792f","webpack://platypush/./src/views/Plugin.vue","webpack://platypush/./src/views/Plugin.vue?41f6","webpack://platypush/./src/router/index.js","webpack://platypush/./src/registerServiceWorker.js","webpack://platypush/./src/main.js","webpack://platypush/./src/utils/Api.vue","webpack://platypush/./src/utils/Api.vue?331a","webpack://platypush/./src/utils/Cookies.vue","webpack://platypush/./src/utils/Cookies.vue?0832","webpack://platypush/./src/utils/DateTime.vue","webpack://platypush/./src/utils/DateTime.vue?3df3","webpack://platypush/./src/utils/Events.vue","webpack://platypush/./src/utils/Events.vue?ad6c","webpack://platypush/./src/utils/Notification.vue","webpack://platypush/./src/utils/Notification.vue?b668","webpack://platypush/./src/utils/Screen.vue","webpack://platypush/./src/utils/Screen.vue?714e","webpack://platypush/./src/utils/Text.vue","webpack://platypush/./src/utils/Text.vue?61b3","webpack://platypush/./src/utils/Types.vue","webpack://platypush/./src/utils/Types.vue?2b41","webpack://platypush/./src/Utils.vue","webpack://platypush/./src/Utils.vue?83c2","webpack://platypush/./src/components/Loading.vue","webpack://platypush/./src/components/Loading.vue?1ccf","webpack://platypush/./src/components/Modal.vue","webpack://platypush/./src/components/Modal.vue?db1b","webpack://platypush/./src/components/elements/ConfirmDialog.vue","webpack://platypush/./src/components/elements/ConfirmDialog.vue?f384","webpack://platypush/./src/components/elements/Dropdown.vue","webpack://platypush/./src/components/elements/Dropdown.vue?e934","webpack://platypush/./src/components/elements/DropdownItem.vue","webpack://platypush/./src/components/elements/DropdownItem.vue?d591","webpack://platypush/./src/components/elements/Icon.vue","webpack://platypush/./src/components/elements/Icon.vue?fdba","webpack://platypush/./src/components/panels/Settings/Index.vue","webpack://platypush/./src/components/panels/Settings/Token.vue","webpack://platypush/./src/components/panels/Settings/Token.vue?4a12","webpack://platypush/./src/components/panels/Settings/Users.vue","webpack://platypush/./src/components/panels/Settings/Users.vue?407b","webpack://platypush/./src/components/panels/Settings/Index.vue?0df9","webpack://platypush/./src/components/panels|lazy|/^\\.\\/.*\\/Index$/|groupOptions: {}|namespace object","webpack://platypush/./src/components/widgets|lazy|/^\\.\\/.*\\/Index$/|groupOptions: {}|namespace object","webpack://platypush/webpack/bootstrap","webpack://platypush/webpack/runtime/chunk loaded","webpack://platypush/webpack/runtime/compat get default export","webpack://platypush/webpack/runtime/create fake namespace object","webpack://platypush/webpack/runtime/define property getters","webpack://platypush/webpack/runtime/ensure chunk","webpack://platypush/webpack/runtime/get javascript chunk filename","webpack://platypush/webpack/runtime/get mini-css chunk filename","webpack://platypush/webpack/runtime/global","webpack://platypush/webpack/runtime/hasOwnProperty shorthand","webpack://platypush/webpack/runtime/load script","webpack://platypush/webpack/runtime/make namespace object","webpack://platypush/webpack/runtime/publicPath","webpack://platypush/webpack/runtime/css loading","webpack://platypush/webpack/runtime/jsonp chunk loading","webpack://platypush/webpack/startup"],"sourcesContent":["import mitt from 'mitt'\n\nconst bus = mitt()\n\nbus.publishEntity = (entity) => {\n bus.emit('entity-update', entity)\n}\n\nbus.onEntity = (callback) => {\n bus.on('entity-update', callback)\n}\n\nbus.publishNotification = (notification) => {\n bus.emit('notification-create', notification)\n}\n\nbus.onNotification = (callback) => {\n bus.on('notification-create', callback)\n}\n\nexport { bus }\n","<template>\n <Events ref=\"events\" v-if=\"hasWebsocket\" />\n <Notifications ref=\"notifications\" />\n <VoiceAssistant ref=\"voice-assistant\" v-if=\"hasAssistant\" />\n <Pushbullet ref=\"pushbullet\" v-if=\"hasPushbullet\" />\n <Ntfy ref=\"ntfy\" v-if=\"hasNtfy\" />\n <ConfirmDialog ref=\"pwaDialog\" @input=\"installPWA\">\n Would you like to install this application locally?\n </ConfirmDialog>\n\n <router-view />\n</template>\n\n<script>\nimport ConfirmDialog from \"@/components/elements/ConfirmDialog\";\nimport Notifications from \"@/components/Notifications\";\nimport Utils from \"@/Utils\";\nimport Events from \"@/Events\";\nimport VoiceAssistant from \"@/components/VoiceAssistant\";\nimport { bus } from \"@/bus\";\nimport Ntfy from \"@/components/Ntfy\";\nimport Pushbullet from \"@/components/Pushbullet\";\n\nexport default {\n name: 'App',\n mixins: [Utils],\n components: {\n ConfirmDialog, Pushbullet, Ntfy, Notifications, Events, VoiceAssistant\n },\n\n data() {\n return {\n config: {},\n userAuthenticated: false,\n pwaInstallEvent: null,\n }\n },\n\n computed: {\n hasWebsocket() {\n return this.userAuthenticated &&\n 'backend.http' in this.config\n },\n\n hasAssistant() {\n return this.hasWebsocket\n },\n\n hasPushbullet() {\n return this.hasWebsocket && (\n 'pushbullet' in this.config ||\n 'backend.pushbullet' in this.config\n )\n },\n\n hasNtfy() {\n return this.hasWebsocket && 'ntfy' in this.config\n },\n },\n\n methods: {\n onNotification(notification) {\n this.$refs.notifications.create(notification)\n },\n\n async initConfig() {\n this.config = await this.request('config.get', {}, 60000, false)\n this.userAuthenticated = true\n },\n\n installPWA() {\n if (this.pwaInstallEvent)\n this.pwaInstallEvent.prompt()\n\n this.$refs.pwaDialog.close()\n }\n },\n\n created() {\n this.initConfig()\n },\n\n beforeMount() {\n window.addEventListener('beforeinstallprompt', (e) => {\n e.preventDefault()\n this.pwaInstallEvent = e\n this.$refs.pwaDialog.show()\n })\n },\n\n mounted() {\n bus.onNotification(this.onNotification)\n },\n}\n</script>\n\n<!--suppress CssUnusedSymbol -->\n<style lang=\"scss\">\n$fa-font-path: \"~@fortawesome/fontawesome-free/webfonts\";\n@import \"~@fortawesome/fontawesome-free/scss/fontawesome\";\n@import \"~@fortawesome/fontawesome-free/scss/solid\"; // fas\n@import \"~@fortawesome/fontawesome-free/scss/regular\"; // far\n@import \"~@fortawesome/fontawesome-free/scss/brands\"; // fab\n\nhtml, body {\n width: 100%;\n height: 100%;\n margin: 0;\n overflow: auto;\n}\n\n#app {\n font-family: BlinkMacSystemFont,-apple-system,Avenir,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,Helvetica,Verdana,Arial,sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: 100%;\n height: 100%;\n color: #2c3e50;\n}\n</style>\n","<template>\n <div class=\"notifications\">\n <Notification v-for=\"(notification, id, index) in notifications\"\n :key=\"index\"\n :id=\"id\"\n :text=\"notification.text\"\n :html=\"notification.html\"\n :title=\"notification.title\"\n :link=\"notification.link\"\n :image=\"notification.image\"\n :warning=\"notification.warning\"\n :error=\"notification.error\"\n @clicked=\"destroy\">\n </Notification>\n </div>\n</template>\n\n<script>\nimport Notification from \"@/components/Notification\";\n\nexport default {\n name: \"Notifications\",\n components: {Notification},\n props: {\n duration: {\n // Default notification duration in milliseconds\n type: Number,\n default: 10000,\n }\n },\n\n data: function() {\n return {\n index: 0,\n notifications: {},\n timeouts: {},\n };\n },\n\n methods: {\n create: function(args) {\n const id = this.index++;\n this.notifications[id] = args;\n\n if (args.duration == null) {\n args.duration = this.duration;\n }\n\n const duration = args.duration ? parseInt(args.duration) : 0;\n if (duration) {\n this.timeouts[id] = setTimeout(this.destroy.bind(null, id), duration);\n }\n },\n\n destroy: function(id) {\n delete this.notifications[id];\n delete this.timeouts[id];\n },\n },\n}\n</script>\n\n<style scoped>\n.notifications {\n position: fixed;\n bottom: 0;\n right: 0;\n width: 25em;\n z-index: 1000;\n}\n</style>","<template>\n <div class=\"notification fade-in\" :class=\"{warning: warning, error: error}\" @click=\"clicked\">\n <div class=\"title\" v-if=\"title\" v-text=\"title\"></div>\n <div class=\"body\">\n <div class=\"image col-3\" v-if=\"image || warning || error\">\n <div class=\"row\">\n <img :src=\"image.src\" v-if=\"image && image.src\" alt=\"\">\n <i :class=\"['fa', 'fa-' + image.icon]\" :style=\"image.color ? '--color: ' + image.color : ''\"\n v-else-if=\"image && image.icon\"></i>\n <i :class=\"image.iconClass\" :style=\"image.color ? '--color: ' + image.color : ''\"\n v-else-if=\"image && image.iconClass\"></i>\n <i class=\"fa fa-exclamation\" v-else-if=\"warning\"></i>\n <i class=\"fa fa-times\" v-else-if=\"error\"></i>\n </div>\n </div>\n <div class=\"text col-9\" v-if=\"text && !!image\" v-text=\"text\"></div>\n <div class=\"text col-9\" v-if=\"html && !!image\" v-html=\"html\"></div>\n <div class=\"text row horizontal-center\" v-if=\"text && !image\" v-text=\"text\"></div>\n <div class=\"text row horizontal-center\" v-if=\"html && !image\" v-html=\"html\"></div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Notification\",\n props: ['id','text','html','title','image','link','error','warning'],\n\n methods: {\n clicked() {\n if (this.link) {\n window.open(this.link, '_blank');\n }\n\n this.$emit('clicked', this.id);\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.notification {\n background: $notification-bg;\n border: $notification-border;\n border-radius: 1em;\n margin-bottom: 0.25em !important;\n margin-right: 0.1em;\n padding: 0.5em;\n cursor: pointer;\n\n &:hover {\n background: $notification-hover-bg;\n &.warning { background: $notification-warning-hover-bg; }\n &.error { background: $notification-error-hover-bg; }\n }\n\n &.warning {\n background: $notification-warning-bg;\n border: $notification-warning-border;\n .image { --color: $notification-warning-icon-color; }\n }\n\n &.error {\n background: $notification-error-bg;\n border: $notification-error-border;\n .image { --color: $notification-error-icon-color; }\n }\n\n .title {\n color: $notification-title-fg;\n font-size: 1.25em;\n font-weight: normal;\n margin: 0.25em 0;\n padding: 0;\n letter-spacing: 0.07em;\n }\n\n .body {\n @extend .vertical-center;\n height: 6em;\n overflow: hidden;\n padding-bottom: 0.1em;\n letter-spacing: 0.05em;\n }\n\n .image {\n height: 100%;\n text-align: center;\n --color: $notification-icon-color;\n\n .row {\n @extend .vertical-center;\n @extend .horizontal-center;\n width: 100%;\n height: 100%;\n\n .fa {\n font-size: 2.5em;\n color: var(--color);\n }\n\n img {\n width: 80%;\n height: 80%;\n }\n }\n }\n}\n</style>","import { render } from \"./Notification.vue?vue&type=template&id=7646705e&scoped=true\"\nimport script from \"./Notification.vue?vue&type=script&lang=js\"\nexport * from \"./Notification.vue?vue&type=script&lang=js\"\n\nimport \"./Notification.vue?vue&type=style&index=0&id=7646705e&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7646705e\"]])\n\nexport default __exports__","import { render } from \"./Notifications.vue?vue&type=template&id=6dc8bebc&scoped=true\"\nimport script from \"./Notifications.vue?vue&type=script&lang=js\"\nexport * from \"./Notifications.vue?vue&type=script&lang=js\"\n\nimport \"./Notifications.vue?vue&type=style&index=0&id=6dc8bebc&scoped=true&lang=css\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6dc8bebc\"]])\n\nexport default __exports__","<template>\n <div/>\n</template>\n\n<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Events\",\n\n data() {\n return {\n ws: null,\n initialized: false,\n pending: false,\n opened: false,\n timeout: null,\n reconnectMsecs: 1000,\n minReconnectMsecs: 1000,\n maxReconnectMsecs: 30000,\n handlers: {},\n handlerNameToEventTypes: {},\n }\n },\n\n methods: {\n onWebsocketTimeout() {\n console.log('Websocket reconnection timed out, retrying')\n this.reconnectMsecs = Math.min(this.reconnectMsecs * 2, this.maxReconnectMsecs)\n this.pending = false\n if (this.ws)\n this.ws.close()\n\n this.onClose()\n },\n\n onMessage(event) {\n const handlers = []\n event = event.data\n\n if (typeof event === 'string') {\n try {\n event = JSON.parse(event)\n } catch (e) {\n console.warn('Received invalid non-JSON event')\n console.warn(event)\n }\n }\n\n console.debug(event)\n if (event.type !== 'event') {\n // Discard non-event messages\n return\n }\n\n if (null in this.handlers) { // lgtm [js/implicit-operand-conversion]\n handlers.push(this.handlers[null]) // lgtm [js/implicit-operand-conversion]\n }\n\n if (event.args.type in this.handlers) {\n handlers.push(...Object.values(this.handlers[event.args.type]))\n }\n\n for (let handler of handlers) {\n if (!handler)\n continue\n\n if (handler instanceof Array)\n handler = handler[0]\n else if (handler instanceof Object && !(handler instanceof Function))\n handler = Object.values(handler)[0]\n\n handler(event.args)\n }\n },\n\n onOpen() {\n if (this.opened) {\n console.log(\"There's already an opened websocket connection, closing the newly opened one\")\n if (this.ws) {\n this.ws.onclose = () => {}\n this.ws.close()\n }\n }\n\n console.log('Websocket connection successful')\n this.opened = true\n this.reconnectMsecs = this.minReconnectMsecs\n\n if (this.pending) {\n this.pending = false\n }\n\n if (this.timeout) {\n clearTimeout(this.timeout)\n this.timeout = undefined\n }\n },\n\n onError(error) {\n console.error('Websocket error')\n console.error(error)\n },\n\n onClose(event) {\n if (event) {\n console.log(\n `Websocket closed - code: ${event.code} - reason: ${event.reason}. ` +\n `Retrying in ${this.reconnectMsecs / 1000}s`\n )\n }\n\n this.opened = false\n\n if (!this.pending) {\n this.pending = true\n this.init()\n }\n },\n\n init() {\n try {\n const protocol = location.protocol === 'https:' ? 'wss' : 'ws'\n const url = `${protocol}://${location.host}/ws/events`\n this.ws = new WebSocket(url)\n } catch (err) {\n console.error('Websocket initialization error')\n console.error(err)\n return\n }\n\n this.pending = true\n this.timeout = setTimeout(this.onWebsocketTimeout, this.reconnectMsecs)\n this.ws.onmessage = this.onMessage\n this.ws.onopen = this.onOpen\n this.ws.onerror = this.onError\n this.ws.onclose = this.onClose\n this.initialized = true\n },\n\n subscribe(msg) {\n const handler = msg.handler\n const events = msg.events.length ? msg.events : [null]\n const handlerName = msg.handlerName\n\n for (const event of events) {\n if (!(event in this.handlers)) {\n this.handlers[event] = {}\n }\n\n if (!(handlerName in this.handlerNameToEventTypes)) {\n this.handlerNameToEventTypes[handlerName] = events\n }\n\n this.handlers[event][handlerName] = handler\n }\n\n return () => {\n this.unsubscribe(handlerName)\n }\n },\n\n unsubscribe(handlerName) {\n const events = this.handlerNameToEventTypes[handlerName]\n if (!events)\n return\n\n for (const event of events) {\n if (!this.handlers[event]?.[handlerName])\n continue\n\n delete this.handlers[event][handlerName]\n if (!Object.keys(this.handlers[event]).length)\n delete this.handlers[event]\n }\n\n delete this.handlerNameToEventTypes[handlerName]\n },\n },\n\n created() {\n bus.on('subscribe', this.subscribe)\n bus.on('unsubscribe', this.unsubscribe)\n this.init()\n },\n}\n</script>\n","import { render } from \"./Events.vue?vue&type=template&id=6a0e6afd\"\nimport script from \"./Events.vue?vue&type=script&lang=js\"\nexport * from \"./Events.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"assistant-modal\">\n <Modal ref=\"assistantModal\">\n <div class=\"icon\">\n <i class=\"fa fa-bell\" v-if=\"state.alerting\"></i>\n <i class=\"fa fa-volume-up\" v-else-if=\"state.responding\"></i>\n <i class=\"fa fa-comment-dots\" v-else-if=\"state.speechRecognized\"></i>\n <i class=\"fa fa-microphone\" v-else></i>\n </div>\n\n <div class=\"text\">\n <div class=\"listening\" v-if=\"state.listening\">\n <span>Assistant listening</span>\n </div>\n <div class=\"speech-recognized\" v-else-if=\"state.speechRecognized\">\n <span v-text=\"phrase\"></span>\n </div>\n <div class=\"responding\" v-else-if=\"state.responding\">\n <span v-text=\"responseText\"></span>\n </div>\n </div>\n </Modal>\n </div>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"VoiceAssistant\",\n components: {Modal},\n mixins: [Utils],\n\n data() {\n return {\n responseText: '',\n phrase: '',\n hideTimeout: undefined,\n\n state: {\n listening: false,\n speechRecognized: false,\n responding: false,\n alerting: false,\n },\n };\n },\n\n methods: {\n reset() {\n this.state.listening = false\n this.state.speechRecognized = false\n this.state.responding = false\n this.state.alerting = false\n this.phrase = ''\n this.responseText = ''\n },\n\n conversationStart() {\n this.reset()\n this.state.listening = true\n this.$refs.assistantModal.show()\n\n if (this.hideTimeout) {\n clearTimeout(this.hideTimeout)\n this.hideTimeout = undefined\n }\n },\n\n conversationEnd() {\n const self = this\n\n this.hideTimeout = setTimeout(() => {\n this.reset()\n self.$refs.assistantModal.close()\n self.hideTimeout = undefined\n }, 4000)\n },\n\n speechRecognized(event) {\n this.reset()\n this.state.speechRecognized = true\n this.phrase = event.phrase\n this.$refs.assistantModal.show()\n },\n\n response(event) {\n this.reset()\n this.state.responding = true\n this.responseText = event.response_text\n this.$refs.assistantModal.show()\n },\n\n alertOn() {\n this.reset()\n this.state.alerting = true\n this.$refs.assistantModal.show()\n },\n\n alertOff() {\n this.reset()\n this.state.alerting = false\n this.$refs.assistantModal.close()\n },\n\n registerHandlers() {\n this.subscribe(this.conversationStart, null, 'platypush.message.event.assistant.ConversationStartEvent')\n this.subscribe(this.alertOn, null, 'platypush.message.event.assistant.AlertStartedEvent')\n this.subscribe(this.alertOff, null, 'platypush.message.event.assistant.AlertEndEvent')\n this.subscribe(this.speechRecognized, null, 'platypush.message.event.assistant.SpeechRecognizedEvent')\n this.subscribe(this.response, null, 'platypush.message.event.assistant.ResponseEvent')\n this.subscribe(this.conversationEnd, null,\n 'platypush.message.event.assistant.ConversationEndEvent',\n 'platypush.message.event.assistant.NoResponseEvent',\n 'platypush.message.event.assistant.ConversationTimeoutEvent')\n },\n },\n\n mounted() {\n this.registerHandlers()\n },\n}\n</script>\n\n<style lang=\"scss\">\n$icon-color: #7e8;\n$icon-border: 1px solid #ccc;\n$icon-shadow: 2px 2px 2px #ccc;\n\n.assistant-modal {\n .modal {\n .body {\n width: 50vw;\n height: 50vh;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-direction: column;\n text-align: center;\n\n .icon {\n font-size: 3em;\n color: $icon-color;\n box-shadow: $icon-shadow;\n border: $icon-border;\n border-radius: 3em;\n padding: 1em;\n }\n\n .text {\n margin-top: 2.5em;\n }\n }\n }\n}\n</style>\n","import { render } from \"./VoiceAssistant.vue?vue&type=template&id=3f009270\"\nimport script from \"./VoiceAssistant.vue?vue&type=script&lang=js\"\nexport * from \"./VoiceAssistant.vue?vue&type=script&lang=js\"\n\nimport \"./VoiceAssistant.vue?vue&type=style&index=0&id=3f009270&lang=scss\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div />\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Ntfy\",\n mixins: [Utils],\n\n methods: {\n onMessage(event) {\n this.notify({\n title: event.title,\n text: event.message,\n image: {\n icon: 'bell',\n },\n })\n },\n },\n\n mounted() {\n this.subscribe(this.onMessage, null, 'platypush.message.event.ntfy.NotificationEvent')\n },\n}\n</script>\n","import { render } from \"./Ntfy.vue?vue&type=template&id=1c4a4708\"\nimport script from \"./Ntfy.vue?vue&type=script&lang=js\"\nexport * from \"./Ntfy.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div />\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Pushbullet\",\n mixins: [Utils],\n\n methods: {\n onMessage(event) {\n if (event.push_type === 'mirror') {\n this.notify({\n title: event.title,\n text: event.body,\n image: {\n src: event.icon ? 'data:image/png;base64, ' + event.icon : undefined,\n icon: event.icon ? undefined : 'bell',\n },\n });\n }\n },\n },\n\n mounted() {\n this.subscribe(this.onMessage, null, 'platypush.message.event.pushbullet.PushbulletEvent')\n },\n}\n</script>\n","import { render } from \"./Pushbullet.vue?vue&type=template&id=bf9869d4\"\nimport script from \"./Pushbullet.vue?vue&type=script&lang=js\"\nexport * from \"./Pushbullet.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=b2717a78\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"./App.vue?vue&type=style&index=0&id=b2717a78&lang=scss\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Loading v-if=\"loading\" />\n\n <div id=\"dashboard\" class=\"col-12\" :class=\"classes\" :style=\"style\">\n <Row v-for=\"(row, i) in rows\" :key=\"i\" :class=\"row.class\" :style=\"row.style\">\n <keep-alive v-for=\"(widget, j) in row.widgets\" :key=\"j\">\n <Widget :style=\"widget.style\" :class=\"widget.class\">\n <component :is=\"widget.component\" v-bind=\"getWidgetProps(widget)\" />\n </Widget>\n </keep-alive>\n </Row>\n </div>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from 'vue'\nimport Utils from '@/Utils'\nimport Loading from \"@/components/Loading\";\nimport Row from \"@/components/widgets/Row\";\nimport Widget from \"@/components/widgets/Widget\";\n\nexport default {\n name: 'Dashboard',\n mixins: [Utils],\n components: {Widget, Loading, Row},\n props: {\n // Refresh interval in seconds.\n refreshSeconds: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n data() {\n return {\n rows: [],\n loading: false,\n style: undefined,\n class: undefined,\n }\n },\n\n computed: {\n classes() {\n return this.class\n },\n },\n\n methods: {\n getWidgetProps(widget) {\n const props = {...widget.props}\n if (props.class)\n delete props.class\n\n return props\n },\n\n parseTemplate(name, tmpl) {\n const node = new DOMParser().parseFromString(tmpl, 'text/xml').childNodes[0]\n const self = this\n this.style = node.attributes.style?.nodeValue\n this.class = node.attributes.class?.nodeValue\n\n this.rows = [...node.getElementsByTagName('Row')].map((row) => {\n return {\n style: row.attributes.style?.nodeValue,\n class: row.attributes.class?.nodeValue,\n widgets: [...row.children].map((el) => {\n const component = shallowRef(\n defineAsyncComponent(\n () => import(`@/components/widgets/${el.nodeName}/Index`)\n )\n )\n\n const style = el.attributes.style?.nodeValue\n const classes = el.attributes.class?.nodeValue\n const attrs = [...el.attributes].reduce((obj, node) => {\n if (node.nodeName !== 'style') {\n obj[node.nodeName] = node.nodeValue\n }\n\n return obj\n }, {\n content: el.innerHTML,\n })\n\n const widget = {\n component: component,\n style: style,\n class: classes,\n props: attrs || {},\n }\n\n self.$options.components[el.nodeName] = component\n return widget\n })\n }\n })\n\n this.loading = false\n },\n\n async refreshDashboard() {\n this.loading = true\n this.widgets = []\n const name = this.$route.params.name\n const template = (await this.request('config.get_dashboard', { name: name }))\n\n if (!template) {\n this.notifyError(`Dashboard ${name} not found`)\n }\n\n this.parseTemplate(name, template)\n },\n },\n\n mounted() {\n this.refreshDashboard()\n if (this.refreshSeconds) {\n const self = this\n setInterval(() => {\n self.refreshDashboard()\n }, parseInt((this.refreshSeconds*1000).toFixed(0)))\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@import \"~lato-font/scss/public-api\";\n$lato-font-path: \"~lato-font/fonts\";\n\n@include lato-include-font('medium');\n\n#dashboard {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n margin: 0;\n padding: 1em 1em 0 1em;\n background: $dashboard-bg;\n background-size: cover;\n font-family: Lato, proxima-nova, Helvetica Neue, Arial, sans-serif;\n\n .blurred {\n filter: blur(0.075em);\n }\n}\n</style>\n\n<style>\nhtml {\n overflow: auto !important;\n}\n</style>\n","<template>\n <div class=\"row\" :class=\"classes\" :style=\"style\">\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Row\",\n props: {\n // Class override\n class: {\n type: String,\n required: false,\n default: '',\n },\n\n // Style override\n style: {\n type: String,\n required: false,\n default: '',\n },\n },\n\n computed: {\n classes() {\n return this.class\n },\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.row {\n width: 100%;\n height: 49%;\n\n &:not(:last-child) {\n margin-bottom: 1%;\n }\n}\n</style>\n","import { render } from \"./Row.vue?vue&type=template&id=1b4663f2&scoped=true\"\nimport script from \"./Row.vue?vue&type=script&lang=js\"\nexport * from \"./Row.vue?vue&type=script&lang=js\"\n\nimport \"./Row.vue?vue&type=style&index=0&id=1b4663f2&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1b4663f2\"]])\n\nexport default __exports__","<template>\n <div :style=\"style\" :class=\"classes\">\n <slot />\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Widget\",\n props: {\n // Widget style override\n style: {\n type: String,\n required: false,\n default: '',\n },\n\n // Widget class override\n class: {\n type: String,\n required: false,\n default: '',\n },\n },\n\n computed: {\n classes() {\n return (this.class?.length ? this.class.split(' ') : ['col-3']).concat(['widget', 'column'])\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.widget {\n height: calc(100% - 1em);\n background: $background-color;\n border-radius: 5px;\n display: flex;\n justify-content: center;\n align-content: center;\n position: relative;\n overflow: hidden;\n box-shadow: 0 3px 3px 0 rgba(0,0,0,0.16), 0 0 0 1px rgba(0,0,0,0.08);\n}\n</style>\n","import { render } from \"./Widget.vue?vue&type=template&id=5df52982&scoped=true\"\nimport script from \"./Widget.vue?vue&type=script&lang=js\"\nexport * from \"./Widget.vue?vue&type=script&lang=js\"\n\nimport \"./Widget.vue?vue&type=style&index=0&id=5df52982&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5df52982\"]])\n\nexport default __exports__","import { render } from \"./Dashboard.vue?vue&type=template&id=54e0248a&scoped=true\"\nimport script from \"./Dashboard.vue?vue&type=script&lang=js\"\nexport * from \"./Dashboard.vue?vue&type=script&lang=js\"\n\nimport \"./Dashboard.vue?vue&type=style&index=0&id=54e0248a&lang=scss&scoped=true\"\nimport \"./Dashboard.vue?vue&type=style&index=1&id=54e0248a&lang=css\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-54e0248a\"]])\n\nexport default __exports__","<template>\n <h1>Object not found</h1>\n</template>\n\n<script>\nexport default {\n name: \"NotFound\"\n}\n</script>\n\n","import { render } from \"./NotFound.vue?vue&type=template&id=49501f4d\"\nimport script from \"./NotFound.vue?vue&type=script&lang=js\"\nexport * from \"./NotFound.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div class=\"login-container\">\n <form class=\"login\" method=\"POST\">\n <div class=\"header\">\n <span class=\"logo\">\n <img src=\"/logo.svg\" alt=\"logo\" />\n </span>\n <span class=\"text\">Platypush</span>\n </div>\n\n <div class=\"row\">\n <label>\n <input type=\"text\" name=\"username\" placeholder=\"Username\">\n </label>\n </div>\n\n <div class=\"row\">\n <label>\n <input type=\"password\" name=\"password\" placeholder=\"Password\">\n </label>\n </div>\n\n <div class=\"row\" v-if=\"_register\">\n <label>\n <input type=\"password\" name=\"confirm_password\" placeholder=\"Confirm password\">\n </label>\n </div>\n\n <div class=\"row buttons\">\n <input type=\"submit\" class=\"btn btn-primary\" :value=\"_register ? 'Register' : 'Login'\">\n </div>\n\n <div class=\"row pull-right\">\n <label class=\"checkbox\">\n <input type=\"checkbox\" name=\"remember\">&nbsp;\n Keep me logged in on this device &nbsp;\n </label>\n </div>\n </form>\n </div>\n</template>\n\n<script>\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Login\",\n mixins: [Utils],\n props: {\n // Set to true for a registration form, false for a login form\n register: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n\n computed: {\n _register() {\n return this.parseBoolean(this.register)\n },\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\nbody {\n width: 100vw;\n height: 100vh;\n margin: 0;\n}\n\n.login-container {\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: $default-bg-6;\n}\n\n.header {\n font-size: 1.2em;\n margin-bottom: 2em;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .logo {\n width: 3em;\n height: 3em;\n display: inline-flex;\n background-size: cover;\n }\n\n .text {\n font-family: Poppins, sans-serif;\n margin-left: .5em;\n }\n}\n\nform {\n display: flex;\n flex-direction: column;\n padding: 4em;\n border: $default-border-3;\n border-radius: 3em;\n box-shadow: 2px 2px 3px 3px $border-color-2;\n background: $background-color;\n\n .row {\n margin: 0.5em 0;\n }\n\n input[type=text],\n input[type=password] {\n width: 100%;\n }\n\n input[type=submit],\n input[type=password] {\n border-radius: 1em;\n }\n\n input[type=password] {\n padding: .25em .5em;\n }\n\n .checkbox {\n display: flex;\n font-size: 0.8em;\n }\n\n .buttons {\n text-align: center;\n\n input[type=submit] {\n padding: .5em .75em;\n }\n }\n}\n\na {\n color: $default-link-fg;\n}\n</style>\n","import { render } from \"./Login.vue?vue&type=template&id=af0b14d0&scoped=true\"\nimport script from \"./Login.vue?vue&type=script&lang=js\"\nexport * from \"./Login.vue?vue&type=script&lang=js\"\n\nimport \"./Login.vue?vue&type=style&index=0&id=af0b14d0&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-af0b14d0\"]])\n\nexport default __exports__","<template>\n <Login :register=\"true\" />\n</template>\n\n<script>\nimport Login from \"@/views/Login\";\n\nexport default {\n name: \"Register\",\n mixins: [Login],\n components: {Login},\n props: {\n register: {\n type: Boolean,\n required: false,\n default: true,\n },\n },\n}\n</script>\n","import { render } from \"./Register.vue?vue&type=template&id=1244b238\"\nimport script from \"./Register.vue?vue&type=script&lang=js\"\nexport * from \"./Register.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <main>\n <Loading v-if=\"loading\" />\n <Nav :panels=\"components\" :selected-panel=\"selectedPanel\" :hostname=\"hostname\"\n @select=\"selectedPanel = $event\" v-else />\n\n <div class=\"canvas\" v-if=\"selectedPanel === 'settings'\">\n <div class=\"panel\">\n <Settings />\n </div>\n </div>\n\n <div class=\"canvas\" v-else>\n <div class=\"panel\" :class=\"{hidden: name !== selectedPanel}\" v-for=\"(panel, name) in components\" :key=\"name\">\n <component :is=\"panel.component\" :config=\"panel.config\" :plugin-name=\"name\" v-if=\"name === selectedPanel\" />\n </div>\n </div>\n </main>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from \"vue\";\nimport Utils from '@/Utils'\nimport Loading from \"@/components/Loading\";\nimport Nav from \"@/components/Nav\";\nimport Settings from \"@/components/panels/Settings/Index\";\n\nexport default {\n name: 'Panel',\n mixins: [Utils],\n components: {Settings, Nav, Loading},\n\n data() {\n return {\n loading: false,\n plugins: {},\n backends: {},\n procedures: {},\n components: {},\n hostname: undefined,\n selectedPanel: undefined,\n }\n },\n\n methods: {\n initSelectedPanel() {\n const match = this.$route.hash.match('#?([a-zA-Z0-9.]+)[?]?(.*)')\n const plugin = match ? match[1] : 'entities'\n if (plugin?.length)\n this.selectedPanel = plugin\n },\n\n initPanels() {\n const self = this\n this.components = {}\n\n Object.entries(this.plugins).forEach(async ([name, plugin]) => {\n const componentName = name.split('.').map((token) => token[0].toUpperCase() + token.slice(1)).join('')\n let comp = null\n try {\n comp = await import(`@/components/panels/${componentName}/Index`)\n } catch (e) {\n return\n }\n\n const component = shallowRef(defineAsyncComponent(async () => { return comp }))\n self.$options.components[name] = component\n self.components[name] = {\n component: component,\n pluginName: name,\n config: plugin,\n }\n })\n },\n\n async parseConfig() {\n [this.plugins, this.backends, this.procedures, this.hostname] =\n await Promise.all([\n this.request('config.get_plugins'),\n this.request('config.get_backends'),\n this.request('config.get_procedures'),\n this.request('config.get_device_id'),\n ])\n\n this.initializeDefaultViews()\n },\n\n initializeDefaultViews() {\n this.plugins.execute = {}\n this.plugins.entities = {}\n },\n },\n\n async mounted() {\n this.loading = true\n\n try {\n await this.parseConfig()\n this.initPanels()\n this.initSelectedPanel()\n } finally {\n this.loading = false\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\nmain {\n height: 100%;\n display: flex;\n\n @include until($tablet) {\n flex-direction: column;\n }\n\n .canvas {\n display: flex;\n flex-grow: 100;\n background: $menu-panel-bg;\n overflow: auto;\n\n .panel {\n width: 100%;\n height: 100%;\n display: flex;\n margin: 0 !important;\n box-shadow: none !important;\n overflow: auto;\n }\n }\n}\n</style>\n\n<style>\nhtml {\n overflow: auto !important;\n}\n</style>\n","<template>\n <nav :class=\"{collapsed: collapsed}\">\n <div class=\"toggler\" @click=\"collapsed = !collapsed\">\n <i class=\"fas fa-bars\" />\n <span class=\"hostname\" v-if=\"hostname\" v-text=\"hostname\" />\n </div>\n\n <ul class=\"plugins\">\n <li v-for=\"name in panelNames\" :key=\"name\" class=\"entry\" :class=\"{selected: name === selectedPanel}\"\n :title=\"name\" @click=\"onItemClick(name)\">\n <a :href=\"`/#${name}`\">\n <span class=\"icon\">\n <i :class=\"icons[name].class\" v-if=\"icons[name]?.class\" />\n <img :src=\"icons[name].imgUrl\" v-else-if=\"icons[name]?.imgUrl\" alt=\"name\"/>\n <i class=\"fas fa-puzzle-piece\" v-else />\n </span>\n <span class=\"name\" v-if=\"!collapsed\" v-text=\"name == 'entities' ? 'Home' : name\" />\n </a>\n </li>\n </ul>\n\n <ul class=\"footer\">\n <li :class=\"{selected: selectedPanel === 'settings'}\" title=\"Settings\" @click=\"onItemClick('settings')\">\n <!--suppress HtmlUnknownAnchorTarget -->\n <a href=\"/#settings\">\n <span class=\"icon\">\n <i class=\"fa fa-cog\" />\n </span>\n <span class=\"name\" v-if=\"!collapsed\">Settings</span>\n </a>\n </li>\n\n <li title=\"Logout\" @click=\"onItemClick('logout')\">\n <!--suppress HtmlUnknownTarget -->\n <a href=\"/logout\">\n <span class=\"icon\">\n <i class=\"fas fa-sign-out-alt\" />\n </span>\n <span class=\"name\" v-if=\"!collapsed\">Logout</span>\n </a>\n </li>\n </ul>\n </nav>\n</template>\n\n<script>\nimport icons from '@/assets/icons.json'\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Nav\",\n emits: ['select'],\n mixins: [Utils],\n props: {\n panels: {\n type: Object,\n required: true,\n },\n\n selectedPanel: {\n type: String,\n },\n\n hostname: {\n type: String,\n },\n },\n\n computed: {\n panelNames() {\n let panelNames = Object.keys(this.panels)\n const homeIdx = panelNames.indexOf('entities')\n if (homeIdx >= 0)\n return ['entities'].concat((panelNames.slice(0, homeIdx).concat(panelNames.slice(homeIdx+1))).sort())\n return panelNames.sort()\n },\n\n collapsedDefault() {\n if (this.isMobile() || this.isTablet())\n return true\n return false\n },\n },\n\n methods: {\n onItemClick(name) {\n this.$emit('select', name)\n this.collapsed = this.isMobile() ? true : this.collapsedDefault\n },\n },\n\n data() {\n return {\n collapsed: true,\n icons: icons,\n host: null,\n }\n },\n\n mounted() {\n this.collapsed = this.collapsedDefault\n },\n}\n</script>\n\n<!--suppress SassScssResolvedByNameOnly -->\n<style lang=\"scss\" scoped>\n$toggler-height: 2em;\n$footer-collapsed-height: 4em;\n$footer-expanded-height: 7.1em;\n\nnav {\n @media screen and (max-width: #{$tablet - 1px}) {\n width: 100%;\n height: 100vh;\n background: $nav-bg;\n color: $nav-fg;\n box-shadow: $nav-box-shadow-main;\n\n &.collapsed {\n box-shadow: 1px 1px 1px 1px $default-shadow-color;\n margin-bottom: 2px;\n z-index: 1;\n }\n\n &:not(.collapsed) {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 5;\n }\n }\n\n @media screen and (min-width: $tablet) {\n width: calc(16em - 2vw);\n min-width: calc(16em - 2vw);\n height: 100%;\n overflow: auto;\n background: $nav-bg;\n color: $nav-fg;\n box-shadow: $nav-box-shadow-main;\n z-index: 1;\n }\n\n @media screen and (min-width: $desktop) {\n width: 20em;\n min-width: 20em;\n }\n\n li {\n border-bottom: $nav-entry-border;\n cursor: pointer;\n list-style: none;\n\n a {\n display: block;\n color: $nav-fg;\n padding: 1em 0.5em;\n text-decoration: none;\n\n &:hover {\n color: $nav-fg;\n }\n }\n\n &.selected {\n background: $nav-entry-selected-bg;\n border: 1px solid rgba(0, 0, 0, 0);\n }\n\n &:hover {\n background: $nav-entry-hover-bg;\n border: 1px solid rgba(0, 0, 0, 0);\n }\n\n .name {\n margin-left: 0.5em;\n }\n\n .icon {\n margin-right: 0.5em;\n }\n }\n\n .toggler {\n width: 100%;\n height: $toggler-height;\n background: $nav-toggler-bg;\n display: flex;\n font-size: 1.5em;\n cursor: pointer;\n padding: 0.4em;\n align-items: center;\n box-shadow: $nav-toggler-shadow;\n }\n\n .hostname {\n font-size: 0.7em;\n margin-top: -0.2em;\n\n @media screen and (min-width: $tablet) {\n margin-left: 1em;\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n text-align: right;\n margin-right: 0.25em;\n flex-grow: 1;\n }\n }\n\n .plugins {\n height: calc(100% - #{$toggler-height} - #{$footer-expanded-height} - 1em);\n overflow: auto;\n }\n\n .footer {\n height: $footer-expanded-height;\n background: $nav-footer-bg;\n box-shadow: $nav-footer-shadow;\n padding: 0;\n margin: 0;\n\n li:last-child {\n border: 0;\n }\n }\n\n ul {\n li {\n .icon {\n margin-right: 0;\n\n & img {\n width: 1.25em;\n height: 1.25em;\n }\n }\n }\n }\n\n &.collapsed {\n display: flex;\n flex-direction: column;\n\n @media screen and (min-width: $tablet) {\n width: 2.5em;\n min-width: 2.5em;\n max-width: 2.5em;\n background: $nav-collapsed-bg;\n color: $nav-collapsed-fg;\n box-shadow: $nav-box-shadow-collapsed;\n\n .hostname {\n display: none;\n }\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n height: auto;\n }\n\n a {\n color: $nav-collapsed-fg;\n padding: 0.25em 0;\n &:hover {\n color: $nav-collapsed-fg;\n }\n }\n\n .toggler {\n height: $toggler-height;\n text-align: center;\n box-shadow: none;\n background: $nav-toggler-collapsed-bg;\n\n @media screen and (max-width: #{$tablet - 1px}) {\n background: $nav-toggler-collapsed-mobile-bg;\n color: $nav-toggler-collapsed-mobile-fg;\n }\n }\n\n .footer {\n height: $footer-collapsed-height;\n background: none;\n padding: 0;\n margin-bottom: .5em;\n box-shadow: none;\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n .footer {\n display: none;\n }\n }\n\n ul {\n display: flex;\n flex-direction: column;\n justify-content: center;\n height: calc(100% - #{$toggler-height} - #{$footer-collapsed-height});\n overflow: hidden;\n\n &.plugins {\n @media screen and (min-width: $tablet) and (max-width: #{$desktop - 1px}) {\n margin: 2em 0;\n }\n }\n\n &:hover {\n overflow: auto;\n }\n\n li {\n border: none;\n padding: 0;\n text-align: center;\n\n &.selected,\n &:hover {\n border-radius: 1em;\n margin: 0 0.2em;\n }\n\n &.selected {\n background: $nav-entry-collapsed-selected-bg;\n }\n\n &:hover {\n background: $nav-entry-collapsed-hover-bg;\n }\n\n .icon {\n margin-right: 0;\n }\n\n @media screen and (max-width: #{$tablet - 1px}) {\n display: none;\n }\n }\n }\n }\n}\n</style>\n","import { render } from \"./Nav.vue?vue&type=template&id=6d8984d5&scoped=true\"\nimport script from \"./Nav.vue?vue&type=script&lang=js\"\nexport * from \"./Nav.vue?vue&type=script&lang=js\"\n\nimport \"./Nav.vue?vue&type=style&index=0&id=6d8984d5&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6d8984d5\"]])\n\nexport default __exports__","import { render } from \"./Panel.vue?vue&type=template&id=fbc09254&scoped=true\"\nimport script from \"./Panel.vue?vue&type=script&lang=js\"\nexport * from \"./Panel.vue?vue&type=script&lang=js\"\n\nimport \"./Panel.vue?vue&type=style&index=0&id=fbc09254&lang=scss&scoped=true\"\nimport \"./Panel.vue?vue&type=style&index=1&id=fbc09254&lang=css\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-fbc09254\"]])\n\nexport default __exports__","<template>\n <main>\n <Loading v-if=\"loading\" />\n <div class=\"canvas\" v-else>\n <component :is=\"component\" :config=\"config\" :plugin-name=\"pluginName\" />\n </div>\n </main>\n</template>\n\n<script>\nimport { defineAsyncComponent, shallowRef } from \"vue\";\nimport Utils from '@/Utils'\nimport Loading from \"@/components/Loading\";\nimport Nav from \"@/components/Nav\";\nimport Settings from \"@/components/panels/Settings/Index\";\n\nexport default {\n name: 'Panel',\n mixins: [Utils],\n components: {Settings, Nav, Loading},\n\n data() {\n return {\n loading: false,\n config: {},\n plugins: {},\n backends: {},\n procedures: {},\n component: undefined,\n hostname: undefined,\n selectedPanel: undefined,\n }\n },\n\n computed: {\n pluginName() {\n return this.$route.params.plugin\n },\n },\n\n methods: {\n async initPanel() {\n const componentName = this.pluginName.split('.').map((token) => token[0].toUpperCase() + token.slice(1)).join('')\n let comp = null\n\n try {\n comp = await import(`@/components/panels/${componentName}/Index`)\n } catch (e) {\n console.error(e)\n this.notify({\n error: true,\n title: `Cannot load plugin ${this.pluginName}`,\n text: e.toString(),\n })\n\n return\n }\n\n this.component = shallowRef(defineAsyncComponent(async () => { return comp }))\n this.$options.components[componentName] = this.component\n },\n\n async initConfig() {\n const config = await this.request('config.get')\n this.config = config[this.pluginName] || {}\n this.hostname = await this.request('config.get_device_id')\n },\n },\n\n async mounted() {\n this.loading = true\n\n try {\n await this.initConfig()\n await this.initPanel()\n } finally {\n this.loading = false\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\nmain {\n height: 100%;\n display: flex;\n\n @media screen and (max-width: $tablet) {\n flex-direction: column;\n }\n\n .canvas {\n display: flex;\n flex-grow: 100;\n background: $menu-panel-bg;\n overflow: auto;\n\n .panel {\n width: 100%;\n height: 100%;\n display: flex;\n margin: 0 !important;\n box-shadow: none !important;\n overflow: auto;\n }\n }\n}\n</style>\n\n<style>\nhtml {\n overflow: auto !important;\n}\n</style>\n","import { render } from \"./Plugin.vue?vue&type=template&id=e339182c&scoped=true\"\nimport script from \"./Plugin.vue?vue&type=script&lang=js\"\nexport * from \"./Plugin.vue?vue&type=script&lang=js\"\n\nimport \"./Plugin.vue?vue&type=style&index=0&id=e339182c&lang=scss&scoped=true\"\nimport \"./Plugin.vue?vue&type=style&index=1&id=e339182c&lang=css\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e339182c\"]])\n\nexport default __exports__","import { createWebHistory, createRouter } from \"vue-router\";\nimport Dashboard from \"@/views/Dashboard.vue\";\nimport NotFound from \"@/views/NotFound\";\nimport Login from \"@/views/Login\";\nimport Register from \"@/views/Register\";\nimport Panel from \"@/views/Panel\";\nimport Plugin from \"@/views/Plugin\";\n\nconst routes = [\n {\n path: \"/\",\n name: \"Panel\",\n component: Panel,\n },\n\n {\n path: \"/dashboard/:name\",\n name: \"Dashboard\",\n component: Dashboard,\n },\n\n {\n path: \"/plugin/:plugin\",\n name: \"Plugin\",\n component: Plugin,\n },\n\n {\n path: \"/login\",\n name: \"Login\",\n component: Login,\n },\n\n {\n path: \"/register\",\n name: \"Register\",\n component: Register,\n },\n\n {\n path: \"/:catchAll(.*)\",\n component: NotFound,\n },\n];\n\nconst router = createRouter({\n history: createWebHistory(),\n routes,\n});\n\nexport default router;\n","/* eslint-disable no-console */\n\nimport { register } from 'register-service-worker'\n\nif (process.env.NODE_ENV === 'production') {\n register(`${process.env.BASE_URL}service-worker.js`, {\n ready () {\n console.log(\n 'App is being served from cache by a service worker.\\n' +\n 'For more details, visit https://goo.gl/AFskqB'\n )\n },\n registered () {\n console.log('Service worker has been registered.')\n },\n cached () {\n console.log('Content has been cached for offline use.')\n },\n updatefound () {\n console.log('New content is downloading.')\n },\n updated () {\n console.log('New content is available; please refresh.')\n },\n offline () {\n console.log('No internet connection found. App is running in offline mode.')\n },\n error (error) {\n console.error('Error during service worker registration:', error)\n }\n })\n}\n","import { createApp } from 'vue'\nimport App from '@/App.vue'\nimport router from '@/router'\nimport './registerServiceWorker'\n\nconst app = createApp(App)\napp.config.globalProperties._config = window.config\napp.use(router).mount('#app')\n","<script>\nimport axios from 'axios'\n\nexport default {\n name: \"Api\",\n methods: {\n execute(request, timeout=60000, showError=true) {\n const opts = {};\n\n if (!('target' in request) || !request['target']) {\n request['target'] = 'localhost'\n }\n\n if (!('type' in request) || !request['type']) {\n request['type'] = 'request'\n }\n\n if (timeout) {\n opts.timeout = timeout\n }\n\n return new Promise((resolve, reject) => {\n axios.post('/execute', request, opts)\n .then((response) => {\n response = response.data.response\n if (!response.errors?.length) {\n resolve(response.output);\n } else {\n const error = response.errors?.[0] || response\n this.notify({\n text: error,\n error: true,\n })\n\n reject(error)\n }\n })\n .catch((error) => {\n // No users present -> redirect to the registration page\n if (\n error?.response?.data?.code === 412 &&\n window.location.href.indexOf('/register') < 0\n ) {\n window.location.href = '/register?redirect=' + window.location.href\n return\n }\n\n // Unauthorized -> redirect to the login page\n if (\n error?.response?.data?.code === 401 &&\n window.location.href.indexOf('/login') < 0\n ) {\n window.location.href = '/login?redirect=' + window.location.href\n return\n }\n\n console.log(error)\n if (showError)\n this.notify({\n text: error,\n error: true,\n })\n\n reject(error)\n })\n })\n },\n\n request(action, args={}, timeout=60000, showError=true) {\n return this.execute({\n type: 'request',\n action: action,\n args: args,\n }, timeout, showError);\n }\n },\n}\n</script>\n\n","import script from \"./Api.vue?vue&type=script&lang=js\"\nexport * from \"./Api.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Cookies\",\n methods: {\n getCookies() {\n return document.cookie.split(/;\\s*/).reduce((obj, item) => {\n const [k, v] = item.split('=')\n obj[k] = v\n return obj\n }, {})\n }\n }\n}\n</script>\n","import script from \"./Cookies.vue?vue&type=script&lang=js\"\nexport * from \"./Cookies.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"DateTime\",\n methods: {\n formatDate(date, year=false) {\n if (typeof date === 'string')\n date = new Date(Date.parse(date))\n\n return date.toDateString().substring(0, year ? 15 : 10)\n },\n\n formatTime(date, seconds=true) {\n if (typeof date === 'string')\n date = new Date(Date.parse(date))\n\n return date.toTimeString().substring(0, seconds ? 8 : 5)\n },\n\n formatDateTime(date, year=false, seconds=true) {\n if (typeof date === 'string')\n date = new Date(Date.parse(date))\n\n return `${this.formatDate(date, year)}, ${this.formatTime(date, seconds)}`\n },\n },\n}\n</script>\n","import script from \"./DateTime.vue?vue&type=script&lang=js\"\nexport * from \"./DateTime.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Events\",\n computed: {\n _eventsReady() {\n return this.$root.$refs.events?.initialized\n },\n },\n\n methods: {\n subscribe(handler, handlerName, ...events) {\n const subFunc = () => {\n bus.emit('subscribe', {\n events: events,\n handler: handler,\n handlerName: handlerName || this.generateId(),\n })\n }\n\n if (this._eventsReady) {\n subFunc()\n return\n }\n\n const self = this\n const unwatch = this.$watch( () => self._eventsReady, (newVal) => {\n if (newVal) {\n subFunc()\n unwatch()\n }\n })\n\n return unwatch\n },\n\n unsubscribe(handlerName) {\n bus.emit('unsubscribe', handlerName)\n },\n\n generateId() {\n return btoa([...Array(11).keys()].map(() => String.fromCharCode(Math.round(Math.random() * 255))))\n },\n }\n}\n</script>\n","import script from \"./Events.vue?vue&type=script&lang=js\"\nexport * from \"./Events.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nimport { bus } from \"@/bus\";\n\nexport default {\n name: \"Notification\",\n methods: {\n notify(notification) {\n bus.publishNotification(notification)\n },\n\n notifyWarning(msg) {\n this.notify({\n text: msg,\n warning: true,\n })\n },\n\n notifyError(msg) {\n this.notify({\n text: msg,\n error: true,\n })\n\n throw msg\n },\n }\n}\n</script>\n","import script from \"./Notification.vue?vue&type=script&lang=js\"\nexport * from \"./Notification.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Screen\",\n methods: {\n isMobile() {\n return window.matchMedia(\"only screen and (max-width: 768px)\").matches\n },\n\n isTablet() {\n return (\n !this.isMobile() &&\n window.matchMedia(\"only screen and (max-width: 1023px)\").matches\n )\n },\n\n isDesktop() {\n return window.matchMedia(\"only screen and (min-width: 1024px)\").matches\n },\n },\n}\n</script>\n","import script from \"./Screen.vue?vue&type=script&lang=js\"\nexport * from \"./Screen.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Text\",\n methods: {\n capitalize(text) {\n if (!text?.length)\n return text\n\n return text.charAt(0).toUpperCase() + text.slice(1)\n },\n\n prettify(text) {\n return text.split('_').map((t) => this.capitalize(t)).join(' ')\n },\n },\n}\n</script>\n","import script from \"./Text.vue?vue&type=script&lang=js\"\nexport * from \"./Text.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nexport default {\n name: \"Types\",\n methods: {\n parseBoolean(value) {\n if (typeof value === 'string') {\n value = value.toLowerCase()\n if (value === 'true')\n return true\n if (value === 'false')\n return false\n\n return !!parseInt(value)\n }\n\n return !!value\n },\n\n convertSize(value) {\n if (typeof value === 'string')\n value = parseInt(value)\n\n let unit = null\n const units = ['B', 'KB', 'MB', 'GB', 'TB']\n\n units.forEach((u, i) => {\n if (value <= 1024 && unit == null) {\n unit = u\n } else if (value > 1024) {\n if (i === units.length-1) {\n unit = u\n } else {\n value = value/1024\n }\n }\n })\n\n return `${value.toFixed(2)} ${unit}`\n },\n\n convertTime(time) {\n const t = {}\n const ret = []\n\n time = parseFloat(time); // Normalize strings\n t.d = Math.round(time/86400)\n t.h = Math.round(time/3600 - t.d*24)\n t.m = Math.round(time/60 - (t.d*24 + t.h*60))\n t.s = Math.round(time - (t.d*24 + t.h*3600 + t.m*60), 1)\n\n if (parseInt(t.d)) {\n let d = t.d + ' day'\n if (t.d > 1) {\n d += 's'\n }\n ret.push(d)\n }\n\n if (parseInt(t.h)) {\n let h = t.h + ' hour'\n if (t.h > 1) {\n h += 's'\n }\n ret.push(h)\n }\n\n if (parseInt(t.m)) {\n let m = t.m + ' minute'\n if (t.m > 1) {\n m += 's'\n }\n ret.push(m)\n }\n\n let s = t.s + ' second'\n if (t.s > 1) {\n s += 's'\n }\n ret.push(s)\n\n return ret.join(' ')\n },\n\n objectsEqual(a, b) {\n if (typeof(a) !== 'object' || typeof(b) !== 'object')\n return false\n\n if (a == null || b == null) {\n return a == null && b == null\n }\n\n for (const p of Object.keys(a || {})) {\n switch(typeof(a[p])) {\n case 'object':\n if (!this.objectsEqual(a[p], b[p]))\n return false\n break\n\n case 'function':\n if (a[p].toString() != b[p]?.toString())\n return false\n break\n\n default:\n if (a[p] != b[p])\n return false\n break\n }\n }\n\n for (const p of Object.keys(b || {}))\n if (a[p] == null && b[p] != null)\n return false\n\n return true\n },\n },\n}\n</script>\n","import script from \"./Types.vue?vue&type=script&lang=js\"\nexport * from \"./Types.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<script>\nimport Api from \"@/utils/Api\";\nimport Cookies from \"@/utils/Cookies\";\nimport DateTime from \"@/utils/DateTime\";\nimport Events from \"@/utils/Events\";\nimport Notification from \"@/utils/Notification\";\nimport Screen from \"@/utils/Screen\";\nimport Text from \"@/utils/Text\";\nimport Types from \"@/utils/Types\";\n\nexport default {\n name: \"Utils\",\n mixins: [Api, Cookies, Notification, Events, DateTime, Screen, Text, Types],\n}\n</script>\n","import script from \"./Utils.vue?vue&type=script&lang=js\"\nexport * from \"./Utils.vue?vue&type=script&lang=js\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\n <div class=\"loading\">\n <div class=\"icon\">\n <div v-for=\"n in 4\" :key=\"n\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.loading {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 3em;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: $loading-bg;\n opacity: 0.5;\n}\n\n.icon {\n display: inline-block;\n position: relative;\n width: 80px;\n height: 80px;\n\n div {\n position: absolute;\n top: 33px;\n width: 13px;\n height: 13px;\n border-radius: 50%;\n background: #fff;\n animation-timing-function: cubic-bezier(0, 1, 1, 0);\n\n &:nth-child(1) {\n left: 8px;\n animation: lds-ellipsis1 0.6s infinite;\n }\n\n &:nth-child(2) {\n left: 8px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n\n &:nth-child(3) {\n left: 32px;\n animation: lds-ellipsis2 0.6s infinite;\n }\n\n &:nth-child(4) {\n left: 56px;\n animation: lds-ellipsis3 0.6s infinite;\n }\n }\n}\n\n@keyframes lds-ellipsis1 {\n 0% {\n transform: scale(0);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n@keyframes lds-ellipsis3 {\n 0% {\n transform: scale(1);\n }\n 100% {\n transform: scale(0);\n }\n}\n\n@keyframes lds-ellipsis2 {\n 0% {\n transform: translate(0, 0);\n }\n 100% {\n transform: translate(24px, 0);\n }\n}\n</style>","import { render } from \"./Loading.vue?vue&type=template&id=4d9c871b&scoped=true\"\nconst script = {}\n\nimport \"./Loading.vue?vue&type=style&index=0&id=4d9c871b&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4d9c871b\"]])\n\nexport default __exports__","<template>\n <div class=\"modal-container fade-in\" :id=\"id\" :class=\"{hidden: !isVisible}\"\n :style=\"{'--z-index': zIndex}\" @click=\"close\">\n <div class=\"modal\" :class=\"$attrs.class\">\n <div class=\"content\" :style=\"{'--width': width, '--height': height}\" @click=\"$event.stopPropagation()\">\n <div class=\"header\" v-if=\"title\">\n <div class=\"title\" v-text=\"title\" v-if=\"title\" />\n <button title=\"Close\" alt=\"Close\" @click=\"close\">\n <i class=\"fas fa-xmark\" />\n </button>\n </div>\n <div class=\"body\">\n <slot @modal-close=\"close\" />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Modal\",\n emits: ['close', 'open'],\n props: {\n // Modal ID\n id: {\n type: String,\n },\n\n // Modal title\n title: {\n type: String,\n },\n\n // Modal width\n width: {\n type: [Number, String],\n },\n\n // Modal height\n height: {\n type: [Number, String],\n },\n\n // Modal initial visibility value\n visible: {\n type: Boolean,\n default: false,\n },\n\n // Modal timeout in seconds\n timeout: {\n type: [Number, String],\n },\n\n // Modal z-index level\n level: {\n type: Number,\n default: 1,\n },\n },\n\n data() {\n return {\n timeoutId: undefined,\n prevVisible: this.visible,\n isVisible: this.visible,\n }\n },\n\n computed: {\n zIndex() {\n return 500 + this.level\n },\n },\n\n methods: {\n close() {\n this.prevVisible = this.isVisible\n this.isVisible = false\n },\n\n hide() {\n this.close()\n },\n\n show() {\n this.prevVisible = this.isVisible\n this.isVisible = true\n },\n\n toggle() {\n if (this.isVisible)\n this.close()\n else\n this.show()\n },\n\n onKeyUp(event) {\n event.stopPropagation()\n if (event.key === 'Escape') {\n this.close()\n }\n },\n },\n\n mounted() {\n const self = this\n const visibleHndl = (visible) => {\n if (!visible)\n self.$emit('close')\n else\n self.$emit('open')\n\n self.isVisible = visible\n }\n\n document.body.addEventListener('keyup', this.onKeyUp)\n this.$watch(() => this.visible, visibleHndl)\n this.$watch(() => this.isVisible, visibleHndl)\n },\n\n unmounted() {\n document.body.removeEventListener('keyup', this.onKeyUp)\n },\n\n updated() {\n this.prevVisible = this.isVisible\n if (this.isVisible) {\n // Make sure that a newly opened or visible+updated modal always comes to the front\n let maxZIndex = parseInt(getComputedStyle(this.$el).zIndex)\n let outermostModals = []\n\n for (const modal of document.querySelectorAll('.modal-container:not(.hidden)')) {\n const zIndex = parseInt(getComputedStyle(modal).zIndex)\n\n if (zIndex > maxZIndex) {\n maxZIndex = zIndex\n outermostModals = [modal]\n } else if (zIndex === maxZIndex) {\n outermostModals.push(modal)\n }\n }\n\n if (outermostModals.indexOf(this.$el) < 0 || outermostModals.length > 1) {\n this.$el.style.zIndex = maxZIndex+1\n }\n }\n\n if (this.isVisible && this.timeout && !this.timeoutId) {\n const handler = (self) => {\n return () => {\n // self.modalClose()\n self.close()\n self.timeoutId = undefined\n }\n }\n\n this.timeoutId = setTimeout(handler(this), 0+this.timeout)\n }\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-size: 1.5em;\n$icon-margin: 0.5em;\n\n.modal-container {\n position: fixed;\n display: flex;\n align-items: center;\n justify-content: center;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n z-index: var(--z-index);\n background: rgba(10,10,10,0.9);\n\n .modal {\n display: flex;\n\n .content {\n --width: auto;\n --height: auto;\n width: var(--width);\n height: var(--height);\n border-radius: 0.5em;\n background: $modal-body-bg;\n }\n\n .header {\n display: flex;\n position: relative;\n border-bottom: $modal-header-border;\n border-radius: 0.5em 0.5em 0 0;\n padding: 0.5em;\n text-align: center;\n justify-content: center;\n align-items: center;\n background: $modal-header-bg;\n text-transform: uppercase;\n\n button {\n width: $icon-size;\n height: $icon-size;\n position: absolute;\n right: 0;\n margin: auto $icon-margin;\n padding: 0;\n border: 0;\n background: transparent;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n }\n\n .body {\n max-height: 75vh;\n overflow: auto;\n padding: 2em;\n }\n }\n}\n</style>\n","import { render } from \"./Modal.vue?vue&type=template&id=18f9fdba&scoped=true\"\nimport script from \"./Modal.vue?vue&type=script&lang=js\"\nexport * from \"./Modal.vue?vue&type=script&lang=js\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=18f9fdba&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-18f9fdba\"]])\n\nexport default __exports__","<template>\n <Modal ref=\"modal\" :title=\"title\">\n <div class=\"dialog-content\">\n <slot />\n </div>\n\n <form class=\"buttons\" @submit.prevent=\"onConfirm\">\n <button type=\"submit\" class=\"ok-btn\" @click=\"onConfirm\" @touch=\"onConfirm\">\n <i class=\"fas fa-check\" /> &nbsp; {{ confirmText }}\n </button>\n <button type=\"button\" class=\"cancel-btn\" @click=\"close\" @touch=\"close\">\n <i class=\"fas fa-xmark\" /> &nbsp; {{ cancelText }}\n </button>\n </form>\n </Modal>\n</template>\n\n<script>\nimport Modal from \"@/components/Modal\";\n\nexport default {\n emits: ['input', 'click', 'touch'],\n components: {Modal},\n props: {\n title: {\n type: String,\n },\n\n confirmText: {\n type: String,\n default: \"OK\",\n },\n\n cancelText: {\n type: String,\n default: \"Cancel\",\n },\n },\n\n methods: {\n onConfirm() {\n this.$emit('input')\n this.close()\n },\n\n show() {\n this.$refs.modal.show()\n },\n\n close() {\n this.$refs.modal.hide()\n },\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n:deep(.modal) {\n .dialog-content {\n padding: 1em;\n }\n\n .buttons {\n display: flex;\n flex-direction: row;\n justify-content: right;\n margin-bottom: 1em;\n border: 0;\n border-radius: 0;\n\n button {\n margin-right: 1em;\n padding: 0.5em 1em;\n border: 1px solid $border-color-2;\n border-radius: 1em;\n\n &:hover {\n background: $hover-bg;\n }\n }\n }\n}\n</style>\n","import { render } from \"./ConfirmDialog.vue?vue&type=template&id=dda41b94&scoped=true\"\nimport script from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\nexport * from \"./ConfirmDialog.vue?vue&type=script&lang=js\"\n\nimport \"./ConfirmDialog.vue?vue&type=style&index=0&id=dda41b94&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-dda41b94\"]])\n\nexport default __exports__","<template>\n <div class=\"dropdown-container\" ref=\"container\">\n <button :title=\"title\" ref=\"button\" @click.stop=\"toggle($event)\">\n <i class=\"icon\" :class=\"iconClass\" v-if=\"iconClass\" />\n <span class=\"text\" v-text=\"text\" v-if=\"text\" />\n </button>\n\n <div class=\"dropdown fade-in\" :id=\"id\" :class=\"{hidden: !visible}\" ref=\"dropdown\">\n <slot />\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"Dropdown\",\n emits: ['click'],\n props: {\n id: {\n type: String,\n },\n\n items: {\n type: Array,\n default: () => [],\n },\n\n iconClass: {\n default: 'fa fa-ellipsis-h',\n },\n\n text: {\n type: String,\n },\n\n title: {\n type: String,\n },\n\n keepOpenOnItemClick: {\n type: Boolean,\n default: false,\n },\n },\n\n data() {\n return {\n visible: false,\n }\n },\n\n methods: {\n documentClickHndl(event) {\n if (!this.visible)\n return\n\n let element = event.target\n while (element) {\n if (!this.$refs.dropdown)\n break\n if (element === this.$refs.dropdown.element)\n return\n\n element = element.parentElement\n }\n\n this.close()\n },\n\n close() {\n this.visible = false\n document.removeEventListener('click', this.documentClickHndl)\n },\n\n open() {\n document.addEventListener('click', this.documentClickHndl)\n this.visible = true\n\n setTimeout(() => {\n const element = this.$refs.dropdown\n element.style.left = 0\n element.style.top = parseFloat(getComputedStyle(this.$refs.button).height) + 'px'\n\n if (element.getBoundingClientRect().left > window.innerWidth/2)\n element.style.left = (-element.clientWidth + parseFloat(getComputedStyle(this.$refs.button).width)) + 'px'\n\n if (element.getBoundingClientRect().top > window.innerHeight/2)\n element.style.top = (-element.clientHeight + parseFloat(getComputedStyle(this.$refs.button).height)) + 'px'\n }, 10)\n },\n\n toggle(event) {\n event.stopPropagation()\n this.$emit('click')\n this.visible ? this.close() : this.open()\n },\n\n onKeyUp(event) {\n event.stopPropagation()\n if (event.key === 'Escape') {\n this.close()\n }\n },\n },\n\n mounted() {\n document.body.addEventListener('keyup', this.onKeyUp)\n },\n\n unmounted() {\n document.body.removeEventListener('keyup', this.onKeyUp)\n },\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.dropdown-container {\n position: relative;\n display: inline-flex;\n flex-direction: column;\n\n button {\n background: $default-bg-2;\n border: 0;\n padding: 0.5em;\n\n &:hover {\n color: $default-hover-fg;\n }\n }\n\n .dropdown {\n position: absolute;\n width: max-content;\n background: $dropdown-bg;\n border-radius: .25em;\n border: $default-border-3;\n box-shadow: $dropdown-shadow;\n display: flex;\n flex-direction: column;\n z-index: 1;\n }\n}\n\n:deep(.dropdown-container) {\n button {\n width: 100%;\n height: 100%;\n color: $default-fg-2;\n background: $dropdown-bg;\n border: 0;\n padding: 0.75em 0.5em;\n text-align: left;\n letter-spacing: 0.01em;\n\n &:hover {\n background: $hover-bg;\n color: $default-fg-2;\n }\n\n .text {\n padding-left: 0.25em;\n }\n }\n}\n\n</style>\n","import { render } from \"./Dropdown.vue?vue&type=template&id=5b964c03&scoped=true\"\nimport script from \"./Dropdown.vue?vue&type=script&lang=js\"\nexport * from \"./Dropdown.vue?vue&type=script&lang=js\"\n\nimport \"./Dropdown.vue?vue&type=style&index=0&id=5b964c03&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5b964c03\"]])\n\nexport default __exports__","<template>\n <div class=\"row item\" :class=\"itemClass\" @click=\"clicked\">\n <div class=\"col-2 icon\" v-if=\"iconClass?.length || iconUrl?.length\">\n <Icon :class=\"iconClass\" :url=\"iconUrl\" />\n </div>\n <div class=\"text\" :class=\"{'col-10': iconClass != null}\" v-text=\"text\" />\n </div>\n</template>\n\n<script>\nimport Icon from \"@/components/elements/Icon\";\n\nexport default {\n name: \"DropdownItem\",\n components: {Icon},\n props: {\n iconClass: {\n type: String,\n },\n\n iconUrl: {\n type: String,\n },\n\n text: {\n type: String,\n },\n\n disabled: {\n type: Boolean,\n default: false,\n },\n\n itemClass: {}\n },\n\n methods: {\n clicked(event) {\n if (this.disabled)\n return false\n\n this.$parent.$emit('click', event)\n if (!this.$parent.keepOpenOnItemClick)\n this.$parent.visible = false\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.item {\n display: flex;\n padding: 0.75em 0.5em;\n cursor: pointer;\n align-items: center;\n color: $default-fg-2;\n border: 0;\n box-shadow: none;\n\n &:hover {\n background: $hover-bg;\n }\n\n &.selected {\n font-weight: bold;\n }\n\n &.disabled {\n color: $dropdown-disabled-color;\n cursor: initial;\n }\n\n .text {\n text-align: left;\n margin-left: 0.5em;\n }\n\n .icon {\n width: 1.5em;\n display: inline-flex;\n align-items: center;\n }\n\n ::v-deep(.icon-container) {\n width: 2em;\n display: inline-flex;\n align-items: center;\n\n .icon {\n margin: 0 1.5em 0 .5em;\n }\n }\n}\n</style>\n","import { render } from \"./DropdownItem.vue?vue&type=template&id=282d16b4&scoped=true\"\nimport script from \"./DropdownItem.vue?vue&type=script&lang=js\"\nexport * from \"./DropdownItem.vue?vue&type=script&lang=js\"\n\nimport \"./DropdownItem.vue?vue&type=style&index=0&id=282d16b4&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-282d16b4\"]])\n\nexport default __exports__","<template>\n <div class=\"icon-container\">\n <img class=\"icon\" :src=\"url\" :alt=\"alt\" v-if=\"url?.length\">\n <i class=\"icon\" :class=\"className\" :style=\"{color: color}\"\n v-else-if=\"className?.length\" />\n </div>\n</template>\n\n<script>\nexport default {\n props: {\n class: {\n type: String,\n },\n url: {\n type: String,\n },\n color: {\n type: String,\n default: '',\n },\n alt: {\n type: String,\n default: '',\n },\n },\n\n computed: {\n className() {\n return this.class\n }\n }\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.icon-container {\n display: inline-flex;\n width: $icon-container-size;\n justify-content: center;\n text-align: center;\n\n .icon {\n width: 1em;\n height: 1em;\n }\n}\n</style>\n","import { render } from \"./Icon.vue?vue&type=template&id=706a3bd1&scoped=true\"\nimport script from \"./Icon.vue?vue&type=script&lang=js\"\nexport * from \"./Icon.vue?vue&type=script&lang=js\"\n\nimport \"./Icon.vue?vue&type=style&index=0&id=706a3bd1&lang=scss&scoped=true\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-706a3bd1\"]])\n\nexport default __exports__","<template>\n <div class=\"settings-container\">\n <header>\n <div class=\"col-8\">\n <Dropdown title=\"Select a category\" icon-class=\"fa fa-ellipsis-h\">\n <DropdownItem text=\"Users\" icon-class=\"fa fa-user\"\n :item-class=\"{selected: selectedView === 'users'}\"\n @click=\"selectedView = 'users'\" />\n <DropdownItem text=\"Generate a token\" icon-class=\"fa fa-key\"\n :item-class=\"{selected: selectedView === 'token'}\"\n @click=\"selectedView = 'token'\" />\n </Dropdown>\n </div>\n\n <div class=\"col-4 pull-right\">\n <button title=\"Add User\" @click=\"$refs.usersView.$refs.addUserModal.show()\" v-if=\"selectedView === 'users'\">\n <i class=\"fa fa-plus\" />\n </button>\n </div>\n </header>\n\n <main>\n <Users :session-token=\"sessionToken\" :current-user=\"currentUser\"\n v-if=\"selectedView === 'users'\" ref=\"usersView\" />\n <Token :session-token=\"sessionToken\" :current-user=\"currentUser\"\n v-else-if=\"selectedView === 'token'\" ref=\"tokenView\" />\n </main>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\nimport Token from \"@/components/panels/Settings/Token\";\nimport Users from \"@/components/panels/Settings/Users\";\nimport Utils from \"@/Utils\";\n\nexport default {\n name: \"Settings\",\n components: {Dropdown, DropdownItem, Users, Token},\n mixins: [Utils],\n\n data() {\n return {\n selectedView: 'users',\n currentUser: null,\n sessionToken: null,\n }\n },\n\n methods: {\n async refresh() {\n this.sessionToken = this.getCookies()['session_token']\n this.currentUser = await this.request('user.get_user_by_session', {session_token: this.sessionToken})\n }\n },\n\n mounted() {\n this.refresh()\n }\n}\n</script>\n\n<style lang=\"scss\">\n$header-height: 3em;\n\n.settings-container {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n\n header {\n width: 100%;\n height: $header-height;\n display: flex;\n background: $background-color;\n box-shadow: $border-shadow-bottom;\n padding: .5em;\n\n select {\n width: 100%;\n }\n\n button {\n padding-top: .25em;\n }\n }\n\n main {\n height: calc(100% - #{$header-height});\n overflow: auto;\n }\n\n button {\n background: none;\n border: none;\n\n &:hover {\n border: none;\n color: $default-hover-fg;\n }\n }\n\n form {\n padding: 0;\n border: none;\n border-radius: 0;\n box-shadow: none;\n\n input {\n margin-bottom: 1em;\n }\n }\n\n input[type=password] {\n border-radius: 1em;\n }\n}\n</style>\n","<template>\n <div class=\"token-container\">\n <Loading v-if=\"loading\" />\n\n <Modal ref=\"tokenModal\">\n <div class=\"token-container\">\n <label>\n This is your generated token. Treat it carefully and do not share it with untrusted parties.<br/>\n Also, make sure to save it - it WILL NOT be displayed again.\n\n <textarea class=\"token\" v-text=\"token\" @focus=\"onTokenSelect\" />\n </label>\n </div>\n </Modal>\n\n <div class=\"body\">\n <div class=\"description\">\n <p>Generate a JWT authentication token that can be used for API calls to the <tt>/execute</tt> endpoint.</p><br/>\n <p>You can include the token in your requests in any of the following ways:</p>\n\n <ul>\n <li>Specify it on the <tt>Authorization: Bearer</tt> header;</li>\n <li>Specify it on the <tt>X-Token</tt> header;</li>\n <li>Specify it as a URL parameter: <tt>http://site:8008/execute?token=...</tt>;</li>\n <li>Specify it on the body of your JSON request: <tt>{\"type\":\"request\", \"action\", \"...\", \"token\":\"...\"}</tt>.</li>\n </ul>\n\n Confirm your credentials in order to generate a new token.\n </div>\n\n <div class=\"form-container\">\n <form @submit.prevent=\"generateToken\" ref=\"generateTokenForm\">\n <label>\n <span>Username</span>\n <span>\n <input type=\"text\" name=\"username\" :value=\"currentUser.username\" disabled>\n </span>\n </label>\n\n <label>\n <span>Confirm password</span>\n <span>\n <input type=\"password\" name=\"password\">\n </span>\n </label>\n\n <label>\n <span>Token validity in days</span>\n <span>\n <input type=\"text\" name=\"validityDays\">\n </span>\n <span class=\"note\">\n Decimal values are also supported (e.g. <i>0.5</i> to identify 6 hours). An empty or zero value means that\n the token has no expiry date.\n </span>\n </label>\n\n <label>\n <input type=\"submit\" class=\"btn btn-primary\" value=\"Generate token\">\n </label>\n </form>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport axios from \"axios\";\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\nimport Modal from \"@/components/Modal\";\n\nexport default {\n name: \"Token\",\n components: {Modal, Loading},\n mixins: [Utils],\n\n props: {\n currentUser: {\n type: Object,\n required: true,\n },\n },\n\n data() {\n return {\n loading: false,\n token: null,\n }\n },\n\n methods: {\n async generateToken(event) {\n const username = this.currentUser.username\n const password = event.target.password.value\n let validityDays = event.target.validityDays?.length ? parseInt(event.target.validityDays.value) : 0\n if (!validityDays)\n validityDays = null\n\n this.loading = true\n try {\n this.token = (await axios.post('/auth', {\n username: username,\n password: password,\n expiry_days: validityDays,\n })).data.token\n\n if (this.token?.length)\n this.$refs.tokenModal.show()\n } catch (e) {\n console.error(e.toString())\n this.notify({\n text: e.toString(),\n error: true,\n })\n } finally {\n this.loading = false\n }\n },\n\n onTokenSelect(event) {\n event.target.select()\n document.execCommand('copy')\n\n this.notify({\n text: 'Token copied to clipboard',\n image: {\n iconClass: 'fa fa-check',\n }\n })\n },\n }\n}\n</script>\n\n<style lang=\"scss\">\n.token-container {\n width: 100%;\n display: flex;\n margin-top: .15em;\n\n .body {\n background: $background-color;\n display: flex;\n\n .description {\n text-align: left;\n padding: 1em;\n }\n }\n\n ul {\n margin: 1em .5em;\n\n li {\n list-style: initial;\n }\n }\n\n .form-container {\n display: flex;\n }\n\n form {\n max-width: 250pt;\n\n .note {\n display: block;\n font-size: .75em;\n margin: -.75em 0 2em 0;\n }\n\n span {\n input {\n width: 100%;\n }\n }\n }\n\n input[type=password] {\n border-radius: 1em;\n }\n\n .modal {\n .content {\n width: 90%;\n }\n\n .body {\n margin-top: 0;\n }\n }\n\n .token-container {\n label {\n display: flex;\n flex-direction: column;\n\n span {\n display: block;\n width: 100%;\n }\n }\n\n textarea {\n height: 10em;\n margin-top: 1em;\n border-radius: 1em;\n }\n }\n}\n\n@media screen and (max-width: calc(#{$desktop} - 1px)) {\n .token-container {\n .body {\n flex-direction: column;\n }\n }\n\n .form-container {\n justify-content: center;\n box-shadow: $border-shadow-top;\n margin-top: -1em;\n padding-top: 1em;\n }\n}\n\n@media screen and (min-width: $desktop) {\n .token-container {\n justify-content: center;\n align-items: center;\n\n .description {\n width: 50%;\n }\n\n .form-container {\n width: 50%;\n justify-content: right;\n padding: 1em;\n\n label {\n text-align: left;\n }\n }\n\n .body {\n max-width: 650pt;\n flex-direction: row;\n justify-content: left;\n margin-top: 1.5em;\n border-radius: 1em;\n border: $default-border-2;\n }\n }\n}\n</style>\n","import { render } from \"./Token.vue?vue&type=template&id=2a4d58dc\"\nimport script from \"./Token.vue?vue&type=script&lang=js\"\nexport * from \"./Token.vue?vue&type=script&lang=js\"\n\nimport \"./Token.vue?vue&type=style&index=0&id=2a4d58dc&lang=scss\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <Loading v-if=\"loading\" />\n\n <Modal ref=\"addUserModal\" title=\"Add User\">\n <form action=\"#\" method=\"POST\" ref=\"addUserForm\" @submit=\"createUser\">\n <label>\n <input type=\"text\" name=\"username\" placeholder=\"Username\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"password\" placeholder=\"Password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"confirm_password\" placeholder=\"Confirm password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"submit\" class=\"btn btn-primary\" value=\"Create User\" :disabled=\"commandRunning\">\n </label>\n </form>\n </Modal>\n\n <Modal ref=\"changePasswordModal\" title=\"Change Password\">\n <form action=\"#\" method=\"POST\" ref=\"changePasswordForm\" @submit=\"changePassword\">\n <label>\n <input type=\"text\" name=\"username\" placeholder=\"Username\" :value=\"selectedUser\" disabled=\"disabled\">\n </label>\n <label>\n <input type=\"password\" name=\"password\" placeholder=\"Current password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"new_password\" placeholder=\"New password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"password\" name=\"confirm_new_password\" placeholder=\"Confirm new password\" :disabled=\"commandRunning\">\n </label>\n <label>\n <input type=\"submit\" class=\"btn btn-primary\" value=\"Change Password\" :disabled=\"commandRunning\">\n </label>\n </form>\n </modal>\n\n <div class=\"body\">\n <ul class=\"users-list\">\n <li v-for=\"user in users\" :key=\"user.user_id\" class=\"item user\" @click=\"selectedUser = user.username\">\n <div class=\"name col-8\" v-text=\"user.username\" />\n <div class=\"actions pull-right col-4\">\n <Dropdown title=\"User Actions\" icon-class=\"fa fa-cog\">\n <DropdownItem text=\"Change Password\" :disabled=\"commandRunning\" icon-class=\"fa fa-key\"\n @click=\"selectedUser = user.username; $refs.changePasswordModal.show()\" />\n <DropdownItem text=\"Delete User\" :disabled=\"commandRunning\" icon-class=\"fa fa-trash\"\n @click=\"deleteUser(user)\" />\n </Dropdown>\n </div>\n </li>\n </ul>\n </div>\n</template>\n\n<script>\nimport Dropdown from \"@/components/elements/Dropdown\";\nimport Modal from \"@/components/Modal\";\nimport Loading from \"@/components/Loading\";\nimport Utils from \"@/Utils\";\nimport DropdownItem from \"@/components/elements/DropdownItem\";\n\nexport default {\n name: \"Users\",\n components: {DropdownItem, Loading, Modal, Dropdown},\n mixins: [Utils],\n\n props: {\n sessionToken: {\n type: String,\n required: true,\n },\n\n currentUser: {\n type: Object,\n required: true,\n }\n },\n\n data() {\n return {\n users: [],\n commandRunning: false,\n loading: false,\n selectedUser: null,\n }\n },\n\n methods: {\n async refresh() {\n this.loading = true\n try {\n this.users = await this.request('user.get_users')\n } finally {\n this.loading = false\n }\n },\n\n async createUser(event) {\n event.preventDefault()\n\n const form = [...this.$refs.addUserForm.querySelectorAll('input[name]')].reduce((map, input) => {\n map[input.name] = input.value\n return map\n }, {})\n\n if (form.password !== form.confirm_password) {\n this.notify({\n title: 'Unable to create user',\n text: 'Please check that the passwords match',\n error: true,\n image: {\n iconClass: 'fas fa-times',\n },\n })\n\n return\n }\n\n this.commandRunning = true\n try {\n await this.request('user.create_user', {\n username: form.username,\n password: form.password,\n session_token: this.sessionToken,\n })\n } finally {\n this.commandRunning = false\n }\n\n this.notify({\n text: 'User ' + form.username + ' created',\n image: {\n iconClass: 'fas fa-check',\n },\n })\n\n this.$refs.addUserModal.close()\n await this.refresh()\n },\n\n async changePassword(event) {\n event.preventDefault()\n\n const form = [...this.$refs.changePasswordForm.querySelectorAll('input[name]')].reduce((map, input) => {\n map[input.name] = input.value\n return map\n }, {})\n\n if (form.new_password !== form.confirm_new_password) {\n this.notify({\n title: 'Unable to update password',\n text: 'Please check that the passwords match',\n error: true,\n image: {\n iconClass: 'fas fa-times',\n },\n })\n\n return\n }\n\n this.commandRunning = true\n let success = false\n\n try {\n success = await this.request('user.update_password', {\n username: form.username,\n old_password: form.password,\n new_password: form.new_password,\n })\n } finally {\n this.commandRunning = false\n }\n\n if (success) {\n this.$refs.changePasswordModal.close()\n this.notify({\n text: 'Password successfully updated',\n image: {\n iconClass: 'fas fa-check',\n },\n })\n } else {\n this.notify({\n title: 'Unable to update password',\n text: 'The current password is incorrect',\n error: true,\n image: {\n iconClass: 'fas fa-times',\n },\n })\n }\n },\n\n async deleteUser(user) {\n if (!confirm('Are you sure that you want to remove the user ' + user.username + '?'))\n return\n\n this.commandRunning = true\n try {\n await this.request('user.delete_user', {\n username: user.username,\n session_token: this.sessionToken,\n })\n } finally {\n this.commandRunning = false\n }\n\n this.notify({\n text: 'User ' + user.username + ' removed',\n image: {\n iconClass: 'fas fa-check',\n },\n })\n\n await this.refresh()\n },\n },\n\n mounted() {\n this.refresh()\n },\n}\n</script>\n\n<style lang=\"scss\">\n.settings-container {\n .body {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n }\n\n .modal {\n .body {\n height: auto;\n }\n }\n\n form {\n label {\n display: block;\n text-align: center;\n }\n }\n\n .users-list {\n background: $background-color;\n margin-top: .15em;\n height: max-content;\n\n .user {\n display: flex;\n align-items: center;\n padding: .75em;\n box-shadow: $border-shadow-bottom;\n\n &:hover {\n background: $hover-bg;\n }\n\n .actions {\n display: inline-flex;\n justify-content: right;\n\n button {\n width: min-content;\n }\n }\n }\n }\n\n @media screen and (max-width: $desktop) {\n .users-list {\n width: 100%;\n }\n }\n\n @media screen and (min-width: $desktop) {\n .users-list {\n min-width: 400pt;\n max-width: 600pt;\n margin-top: 1em;\n border-radius: 1em;\n box-shadow: $border-shadow-bottom;\n\n .user {\n border-radius: 1em;\n }\n }\n }\n}\n</style>\n","import { render } from \"./Users.vue?vue&type=template&id=8de4f27c\"\nimport script from \"./Users.vue?vue&type=script&lang=js\"\nexport * from \"./Users.vue?vue&type=script&lang=js\"\n\nimport \"./Users.vue?vue&type=style&index=0&id=8de4f27c&lang=scss\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./Index.vue?vue&type=template&id=37be3587\"\nimport script from \"./Index.vue?vue&type=script&lang=js\"\nexport * from \"./Index.vue?vue&type=script&lang=js\"\n\nimport \"./Index.vue?vue&type=style&index=0&id=37be3587&lang=scss\"\n\nimport exportComponent from \"/home/blacklight/git_tree/platypush/platypush/backend/http/webapp/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","var map = {\n\t\"./Camera/Index\": [\n\t\t5528,\n\t\t5528\n\t],\n\t\"./CameraAndroidIpcam/Index\": [\n\t\t6739,\n\t\t6739\n\t],\n\t\"./CameraCv/Index\": [\n\t\t8184,\n\t\t5528,\n\t\t8184\n\t],\n\t\"./CameraFfmpeg/Index\": [\n\t\t5111,\n\t\t5528,\n\t\t5111\n\t],\n\t\"./CameraGstreamer/Index\": [\n\t\t699,\n\t\t5528,\n\t\t699\n\t],\n\t\"./CameraIrMlx90640/Index\": [\n\t\t9895,\n\t\t5528,\n\t\t9895\n\t],\n\t\"./CameraPi/Index\": [\n\t\t4548,\n\t\t5528,\n\t\t4548\n\t],\n\t\"./Entities/Index\": [\n\t\t8725,\n\t\t201\n\t],\n\t\"./Execute/Index\": [\n\t\t3710,\n\t\t3710\n\t],\n\t\"./Light/Index\": [\n\t\t8448,\n\t\t7782,\n\t\t3490,\n\t\t8448\n\t],\n\t\"./LightHue/Index\": [\n\t\t3724,\n\t\t7782,\n\t\t3490,\n\t\t8448,\n\t\t3724\n\t],\n\t\"./Media/Index\": [\n\t\t4196,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t779,\n\t\t4196\n\t],\n\t\"./MediaMplayer/Index\": [\n\t\t6509,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t779,\n\t\t4196,\n\t\t6509\n\t],\n\t\"./MediaMpv/Index\": [\n\t\t5895,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t779,\n\t\t4196,\n\t\t5895\n\t],\n\t\"./MediaOmxplayer/Index\": [\n\t\t9633,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t779,\n\t\t4196,\n\t\t9633\n\t],\n\t\"./MediaVlc/Index\": [\n\t\t767,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t779,\n\t\t4196,\n\t\t767\n\t],\n\t\"./Music/Index\": [\n\t\t5781,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t6833\n\t],\n\t\"./MusicMpd/Index\": [\n\t\t2957,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t6833,\n\t\t2957\n\t],\n\t\"./MusicSnapcast/Index\": [\n\t\t2790,\n\t\t7782,\n\t\t3490,\n\t\t2790\n\t],\n\t\"./MusicSpotify/Index\": [\n\t\t7196,\n\t\t7782,\n\t\t8337,\n\t\t7029,\n\t\t6833,\n\t\t7196\n\t],\n\t\"./Rtorrent/Index\": [\n\t\t2820,\n\t\t8337,\n\t\t779,\n\t\t6162,\n\t\t2820\n\t],\n\t\"./Settings/Index\": [\n\t\t2715\n\t],\n\t\"./Sound/Index\": [\n\t\t5193,\n\t\t5193\n\t],\n\t\"./Torrent/Index\": [\n\t\t9299,\n\t\t8337,\n\t\t779,\n\t\t6162,\n\t\t9299\n\t],\n\t\"./Tts/Index\": [\n\t\t2466,\n\t\t4021,\n\t\t2466\n\t],\n\t\"./TtsGoogle/Index\": [\n\t\t1938,\n\t\t4021,\n\t\t1938\n\t],\n\t\"./TvSamsungWs/Index\": [\n\t\t615,\n\t\t615\n\t],\n\t\"./ZigbeeMqtt/Index\": [\n\t\t4848,\n\t\t7782,\n\t\t3490,\n\t\t4848\n\t],\n\t\"./Zwave/Index\": [\n\t\t8586,\n\t\t7782,\n\t\t3490,\n\t\t906,\n\t\t6027\n\t],\n\t\"./ZwaveMqtt/Index\": [\n\t\t2362,\n\t\t7782,\n\t\t3490,\n\t\t906,\n\t\t2362\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 3379;\nmodule.exports = webpackAsyncContext;","var map = {\n\t\"./Calendar/Index\": [\n\t\t345,\n\t\t345\n\t],\n\t\"./Camera/Index\": [\n\t\t2346,\n\t\t2346\n\t],\n\t\"./Component/Index\": [\n\t\t5824,\n\t\t7782,\n\t\t3490,\n\t\t5824\n\t],\n\t\"./DateTime/Index\": [\n\t\t1595,\n\t\t9575,\n\t\t1595\n\t],\n\t\"./DateTimeWeather/Index\": [\n\t\t346,\n\t\t1798,\n\t\t9575,\n\t\t346\n\t],\n\t\"./ImageCarousel/Index\": [\n\t\t6003,\n\t\t1798,\n\t\t9575,\n\t\t6003\n\t],\n\t\"./Music/Index\": [\n\t\t6013,\n\t\t6013\n\t],\n\t\"./Plugin/Index\": [\n\t\t1818,\n\t\t1818\n\t],\n\t\"./RssNews/Index\": [\n\t\t7420,\n\t\t7420\n\t],\n\t\"./Weather/Index\": [\n\t\t1798,\n\t\t1798\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 6725;\nmodule.exports = webpackAsyncContext;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","var getProto = Object.getPrototypeOf ? function(obj) { return Object.getPrototypeOf(obj); } : function(obj) { return obj.__proto__; };\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach(function(key) { def[key] = function() { return value[key]; }; });\n\t}\n\tdef['default'] = function() { return value; };\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \"-legacy.\" + {\"65\":\"a4e6662a\",\"201\":\"9dc75ca4\",\"345\":\"dcb6e74e\",\"346\":\"f3cfa402\",\"615\":\"fba0e1b5\",\"675\":\"6f3d0433\",\"699\":\"cb1ccfbb\",\"767\":\"f33d812b\",\"779\":\"4b8d600b\",\"906\":\"23975966\",\"1196\":\"9aa73c4d\",\"1300\":\"526f4cf3\",\"1595\":\"69aea4ae\",\"1767\":\"0d72ab23\",\"1798\":\"b42f39d9\",\"1818\":\"03a52113\",\"1938\":\"e350f72d\",\"2346\":\"4845c2ae\",\"2362\":\"034c153c\",\"2466\":\"b6981a49\",\"2790\":\"4cad67a6\",\"2806\":\"a4faf9ad\",\"2820\":\"869be689\",\"2957\":\"a0d5f651\",\"3194\":\"8b9635f4\",\"3303\":\"337cf4d7\",\"3490\":\"d482e29b\",\"3710\":\"c79204f1\",\"3724\":\"b00820ce\",\"4021\":\"a3380d38\",\"4196\":\"7ab38e3c\",\"4548\":\"e2883bdd\",\"4848\":\"0b09aeb3\",\"4981\":\"c4835180\",\"5111\":\"262ea3c5\",\"5157\":\"090db2a1\",\"5193\":\"d8c2e027\",\"5207\":\"b6625280\",\"5498\":\"8c82ec84\",\"5528\":\"c6626d00\",\"5824\":\"6527ca08\",\"5895\":\"e1ce8e90\",\"5924\":\"7c59be4f\",\"6003\":\"f3446996\",\"6013\":\"b02eb716\",\"6027\":\"15704eec\",\"6162\":\"bf13f6e2\",\"6164\":\"73de3e0f\",\"6358\":\"e74bed57\",\"6509\":\"ab6d64c3\",\"6739\":\"c665b953\",\"6815\":\"7ba5187b\",\"6833\":\"78ead800\",\"7029\":\"85f01cbd\",\"7141\":\"d485cb27\",\"7196\":\"a47a2493\",\"7420\":\"a57de4be\",\"7503\":\"ad9a73d9\",\"7782\":\"724314a6\",\"8135\":\"e2055fdf\",\"8184\":\"702db0b7\",\"8337\":\"fcf13df8\",\"8444\":\"b113ba12\",\"8448\":\"fd3bc403\",\"9276\":\"c3089257\",\"9299\":\"adb4a75b\",\"9387\":\"a7ab196d\",\"9418\":\"06c89318\",\"9450\":\"ba028d4c\",\"9575\":\"fb8eab70\",\"9633\":\"8a00fadb\",\"9895\":\"acee9428\"}[chunkId] + \".js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/css/\" + chunkId + \".\" + {\"65\":\"ae3723d7\",\"201\":\"3ba92d09\",\"345\":\"25d1c562\",\"346\":\"bec1b050\",\"615\":\"6d3a8446\",\"675\":\"10cdb721\",\"779\":\"2e68c420\",\"906\":\"a114eea0\",\"1196\":\"78925ff5\",\"1300\":\"180d2070\",\"1767\":\"f9545a14\",\"1798\":\"3a165bb4\",\"1818\":\"8db287b9\",\"2346\":\"ed463bd2\",\"2790\":\"a0725ecc\",\"2806\":\"9c9d5a57\",\"3194\":\"a07dd4e2\",\"3303\":\"bfeafcb0\",\"3490\":\"fcf11255\",\"3710\":\"1112d8b7\",\"3724\":\"234438b4\",\"4021\":\"58663e3e\",\"4196\":\"539db457\",\"4848\":\"72a7d113\",\"4981\":\"c5c2f5dd\",\"5193\":\"47f020c5\",\"5207\":\"950597e1\",\"5498\":\"ef565a73\",\"5528\":\"22b025de\",\"5824\":\"8f1b2b15\",\"5924\":\"f0111959\",\"6003\":\"fbbaf2b7\",\"6013\":\"504d6c0b\",\"6162\":\"c92d9d38\",\"6164\":\"ea3fa7cb\",\"6358\":\"1f06089f\",\"6739\":\"49b1f262\",\"6815\":\"f1dc7909\",\"6833\":\"28cb5e3d\",\"7029\":\"b6585c35\",\"7141\":\"4b3e6b00\",\"7420\":\"4bf56b11\",\"7503\":\"34698020\",\"7782\":\"a6a32303\",\"8135\":\"1460504e\",\"8444\":\"95911650\",\"8448\":\"6ad0f775\",\"9276\":\"518b169b\",\"9387\":\"74d3b3a3\",\"9418\":\"9f2b9c3a\",\"9450\":\"fd9ed6f2\",\"9575\":\"1b22f65c\"}[chunkId] + \".css\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"platypush:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/\";","var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"65\":1,\"201\":1,\"345\":1,\"346\":1,\"615\":1,\"675\":1,\"779\":1,\"906\":1,\"1196\":1,\"1300\":1,\"1767\":1,\"1798\":1,\"1818\":1,\"2346\":1,\"2790\":1,\"2806\":1,\"3194\":1,\"3303\":1,\"3490\":1,\"3710\":1,\"3724\":1,\"4021\":1,\"4196\":1,\"4848\":1,\"4981\":1,\"5193\":1,\"5207\":1,\"5498\":1,\"5528\":1,\"5824\":1,\"5924\":1,\"6003\":1,\"6013\":1,\"6162\":1,\"6164\":1,\"6358\":1,\"6739\":1,\"6815\":1,\"6833\":1,\"7029\":1,\"7141\":1,\"7420\":1,\"7503\":1,\"7782\":1,\"8135\":1,\"8444\":1,\"8448\":1,\"9276\":1,\"9387\":1,\"9418\":1,\"9450\":1,\"9575\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t2143: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(!/^(1300|3490|4021|4981|6162|7782|9575)$/.test(chunkId)) {\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkplatypush\"] = self[\"webpackChunkplatypush\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [4998], function() { return __webpack_require__(9631); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["bus","mitt","publishEntity","entity","emit","onEntity","callback","on","publishNotification","notification","onNotification","hasWebsocket","ref","hasAssistant","hasPushbullet","hasNtfy","installPWA","class","notifications","id","index","key","text","html","title","link","image","warning","error","destroy","clicked","src","alt","icon","style","color","iconClass","name","props","methods","this","window","open","$emit","__exports__","components","Notification","duration","type","Number","default","data","timeouts","create","args","parseInt","setTimeout","bind","ws","initialized","pending","opened","timeout","reconnectMsecs","minReconnectMsecs","maxReconnectMsecs","handlers","handlerNameToEventTypes","onWebsocketTimeout","console","log","Math","min","close","onClose","onMessage","event","JSON","parse","e","warn","debug","push","Object","values","handler","Array","Function","onOpen","onclose","clearTimeout","undefined","onError","code","reason","init","protocol","location","url","host","WebSocket","err","onmessage","onopen","onerror","subscribe","msg","events","length","handlerName","unsubscribe","keys","created","state","alerting","responding","speechRecognized","listening","Modal","mixins","Utils","responseText","phrase","hideTimeout","reset","conversationStart","$refs","assistantModal","show","conversationEnd","self","response","response_text","alertOn","alertOff","registerHandlers","mounted","notify","message","push_type","body","ConfirmDialog","Pushbullet","Ntfy","Notifications","Events","VoiceAssistant","config","userAuthenticated","pwaInstallEvent","computed","initConfig","request","prompt","pwaDialog","beforeMount","addEventListener","preventDefault","render","loading","classes","rows","row","i","widgets","widget","j","component","getWidgetProps","String","required","split","concat","Widget","Loading","Row","refreshSeconds","parseTemplate","tmpl","node","DOMParser","parseFromString","childNodes","attributes","nodeValue","getElementsByTagName","map","children","el","nodeName","attrs","reduce","obj","content","innerHTML","$options","refreshDashboard","$route","params","template","notifyError","setInterval","toFixed","method","placeholder","_register","value","register","Boolean","parseBoolean","Login","panels","selectedPanel","hostname","$event","panel","href","collapsed","panelNames","onItemClick","icons","imgUrl","emits","homeIdx","indexOf","slice","sort","collapsedDefault","isMobile","isTablet","Settings","Nav","plugins","backends","procedures","initSelectedPanel","match","hash","plugin","initPanels","entries","forEach","componentName","token","toUpperCase","join","comp","pluginName","parseConfig","Promise","all","initializeDefaultViews","execute","entities","initPanel","toString","routes","path","Panel","Dashboard","Plugin","Register","NotFound","router","createRouter","history","createWebHistory","process","ready","registered","cached","updatefound","updated","offline","app","createApp","App","globalProperties","_config","use","mount","showError","opts","resolve","reject","then","errors","output","catch","action","getCookies","document","cookie","item","k","v","formatDate","date","year","Date","toDateString","substring","formatTime","seconds","toTimeString","formatDateTime","_eventsReady","$root","subFunc","generateId","unwatch","$watch","newVal","btoa","fromCharCode","round","random","notifyWarning","matchMedia","matches","isDesktop","capitalize","charAt","prettify","t","toLowerCase","convertSize","unit","units","u","convertTime","time","ret","parseFloat","d","h","m","s","objectsEqual","a","b","p","Api","Cookies","DateTime","Screen","Text","Types","n","script","isVisible","zIndex","$attrs","width","height","stopPropagation","visible","level","timeoutId","prevVisible","hide","toggle","onKeyUp","visibleHndl","unmounted","removeEventListener","maxZIndex","getComputedStyle","$el","outermostModals","querySelectorAll","modal","onConfirm","confirmText","cancelText","items","keepOpenOnItemClick","documentClickHndl","element","target","dropdown","parentElement","left","top","button","getBoundingClientRect","innerWidth","clientWidth","innerHeight","clientHeight","itemClass","iconUrl","Icon","disabled","$parent","className","selectedView","usersView","addUserModal","sessionToken","currentUser","onTokenSelect","generateToken","username","password","validityDays","expiry_days","tokenModal","select","execCommand","createUser","commandRunning","changePassword","selectedUser","users","user","user_id","changePasswordModal","deleteUser","DropdownItem","Dropdown","refresh","form","addUserForm","input","confirm_password","session_token","changePasswordForm","new_password","confirm_new_password","success","old_password","confirm","Users","Token","webpackAsyncContext","req","__webpack_require__","o","Error","ids","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","r","getter","__esModule","leafPrototypes","getProto","getPrototypeOf","__proto__","mode","ns","def","current","getOwnPropertyNames","definition","defineProperty","enumerable","get","f","chunkId","promises","miniCssF","g","globalThis","prop","prototype","hasOwnProperty","call","inProgress","dataWebpackPrefix","l","done","needAttach","scripts","getAttribute","createElement","charset","nc","setAttribute","onScriptComplete","prev","onload","doneFns","parentNode","removeChild","head","appendChild","Symbol","toStringTag","createStylesheet","fullhref","linkTag","rel","onLinkComplete","errorType","realHref","findStylesheet","existingLinkTags","tag","dataHref","existingStyleTags","loadStylesheet","installedCssChunks","miniCss","cssChunks","installedChunks","installedChunkData","test","promise","loadingEnded","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""}