mirror of
				https://github.com/louislam/uptime-kuma.git
				synced 2025-10-31 11:29:20 +08:00 
			
		
		
		
	Added JSDoc for src/components/*
Signed-off-by: Matthew Nickson <mnickson@sidingsmedia.com>
This commit is contained in:
		| @@ -25,10 +25,12 @@ export default { | |||||||
|         CertificateInfoRow, |         CertificateInfoRow, | ||||||
|     }, |     }, | ||||||
|     props: { |     props: { | ||||||
|  |         /** Object representing certificate */ | ||||||
|         certInfo: { |         certInfo: { | ||||||
|             type: Object, |             type: Object, | ||||||
|             required: true, |             required: true, | ||||||
|         }, |         }, | ||||||
|  |         /** Is the TLS certificate valid? */ | ||||||
|         valid: { |         valid: { | ||||||
|             type: Boolean, |             type: Boolean, | ||||||
|             required: true, |             required: true, | ||||||
|   | |||||||
| @@ -56,12 +56,19 @@ export default { | |||||||
|         Datetime, |         Datetime, | ||||||
|     }, |     }, | ||||||
|     props: { |     props: { | ||||||
|  |         /** Object representing certificate */ | ||||||
|         cert: { |         cert: { | ||||||
|             type: Object, |             type: Object, | ||||||
|             required: true, |             required: true, | ||||||
|         }, |         }, | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** | ||||||
|  |          * Format the subject of the certificate | ||||||
|  |          * @param {Object} subject Object representing the certificates | ||||||
|  |          * subject | ||||||
|  |          * @returns {string} | ||||||
|  |          */ | ||||||
|         formatSubject(subject) { |         formatSubject(subject) { | ||||||
|             if (subject.O && subject.CN && subject.C) { |             if (subject.O && subject.CN && subject.C) { | ||||||
|                 return `${subject.CN} - ${subject.O} (${subject.C})`; |                 return `${subject.CN} - ${subject.O} (${subject.C})`; | ||||||
|   | |||||||
| @@ -29,14 +29,17 @@ import { Modal } from "bootstrap"; | |||||||
|  |  | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** Style of button */ | ||||||
|         btnStyle: { |         btnStyle: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "btn-primary", |             default: "btn-primary", | ||||||
|         }, |         }, | ||||||
|  |         /** Text to use as yes */ | ||||||
|         yesText: { |         yesText: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "Yes",     // TODO: No idea what to translate this |             default: "Yes",     // TODO: No idea what to translate this | ||||||
|         }, |         }, | ||||||
|  |         /** Text to use as no */ | ||||||
|         noText: { |         noText: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "No", |             default: "No", | ||||||
| @@ -50,9 +53,13 @@ export default { | |||||||
|         this.modal = new Modal(this.$refs.modal); |         this.modal = new Modal(this.$refs.modal); | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Show the confirm dialog */ | ||||||
|         show() { |         show() { | ||||||
|             this.modal.show(); |             this.modal.show(); | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * @emits string A string that simply says "yes" | ||||||
|  |          */ | ||||||
|         yes() { |         yes() { | ||||||
|             this.$emit("yes"); |             this.$emit("yes"); | ||||||
|         }, |         }, | ||||||
|   | |||||||
| @@ -25,33 +25,41 @@ let timeout; | |||||||
|  |  | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** ID of this input */ | ||||||
|         id: { |         id: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "" |             default: "" | ||||||
|         }, |         }, | ||||||
|  |         /** Type of input */ | ||||||
|         type: { |         type: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "text" |             default: "text" | ||||||
|         }, |         }, | ||||||
|  |         /** The value of the input */ | ||||||
|         modelValue: { |         modelValue: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "" |             default: "" | ||||||
|         }, |         }, | ||||||
|  |         /** A placeholder to use */ | ||||||
|         placeholder: { |         placeholder: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "" |             default: "" | ||||||
|         }, |         }, | ||||||
|  |         /** Should the field auto complete */ | ||||||
|         autocomplete: { |         autocomplete: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: undefined, |             default: undefined, | ||||||
|         }, |         }, | ||||||
|  |         /** Is the input required? */ | ||||||
|         required: { |         required: { | ||||||
|             type: Boolean |             type: Boolean | ||||||
|         }, |         }, | ||||||
|  |         /** Should the input be read only? */ | ||||||
|         readonly: { |         readonly: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: undefined, |             default: undefined, | ||||||
|         }, |         }, | ||||||
|  |         /** Is the input disabled? */ | ||||||
|         disabled: { |         disabled: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: undefined, |             default: undefined, | ||||||
| @@ -79,14 +87,21 @@ export default { | |||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |  | ||||||
|  |         /** Show the input */ | ||||||
|         showInput() { |         showInput() { | ||||||
|             this.visibility = "text"; |             this.visibility = "text"; | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Hide the input */ | ||||||
|         hideInput() { |         hideInput() { | ||||||
|             this.visibility = "password"; |             this.visibility = "password"; | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Copy the provided text to the users clipboard | ||||||
|  |          * @param {string} textToCopy | ||||||
|  |          * @returns {Promise<void>} | ||||||
|  |          */ | ||||||
|         copyToClipboard(textToCopy) { |         copyToClipboard(textToCopy) { | ||||||
|             this.icon = "check"; |             this.icon = "check"; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -10,6 +10,7 @@ import { sleep } from "../util.ts"; | |||||||
| export default { | export default { | ||||||
|  |  | ||||||
|     props: { |     props: { | ||||||
|  |         /** Value to count */ | ||||||
|         value: { |         value: { | ||||||
|             type: [ String, Number ], |             type: [ String, Number ], | ||||||
|             default: 0, |             default: 0, | ||||||
| @@ -18,6 +19,7 @@ export default { | |||||||
|             type: Number, |             type: Number, | ||||||
|             default: 0.3, |             default: 0.3, | ||||||
|         }, |         }, | ||||||
|  |         /** Unit of the value */ | ||||||
|         unit: { |         unit: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "ms", |             default: "ms", | ||||||
| @@ -43,9 +45,7 @@ export default { | |||||||
|             let frames = 12; |             let frames = 12; | ||||||
|             let step = Math.floor(diff / frames); |             let step = Math.floor(diff / frames); | ||||||
|  |  | ||||||
|             if (isNaN(step) || ! this.isNum || (diff > 0 && step < 1) || (diff < 0 && step > 1) || diff === 0) { |             if (! (isNaN(step) || ! this.isNum || (diff > 0 && step < 1) || (diff < 0 && step > 1) || diff === 0)) { | ||||||
|                 // Lazy to NOT this condition, hahaha. |  | ||||||
|             } else { |  | ||||||
|                 for (let i = 1; i < frames; i++) { |                 for (let i = 1; i < frames; i++) { | ||||||
|                     this.output += step; |                     this.output += step; | ||||||
|                     await sleep(15); |                     await sleep(15); | ||||||
|   | |||||||
| @@ -13,10 +13,12 @@ dayjs.extend(relativeTime); | |||||||
|  |  | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** Value of data time */ | ||||||
|         value: { |         value: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: null, |             default: null, | ||||||
|         }, |         }, | ||||||
|  |         /** Should only the date be displayed? */ | ||||||
|         dateOnly: { |         dateOnly: { | ||||||
|             type: Boolean, |             type: Boolean, | ||||||
|             default: false, |             default: false, | ||||||
|   | |||||||
| @@ -17,14 +17,17 @@ | |||||||
|  |  | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** Size of the heart beat bar */ | ||||||
|         size: { |         size: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "big", |             default: "big", | ||||||
|         }, |         }, | ||||||
|  |         /** ID of the monitor */ | ||||||
|         monitorId: { |         monitorId: { | ||||||
|             type: Number, |             type: Number, | ||||||
|             required: true, |             required: true, | ||||||
|         }, |         }, | ||||||
|  |         /** Array of the monitors heart beats */ | ||||||
|         heartbeatList: { |         heartbeatList: { | ||||||
|             type: Array, |             type: Array, | ||||||
|             default: null, |             default: null, | ||||||
| @@ -160,12 +163,18 @@ export default { | |||||||
|         this.resize(); |         this.resize(); | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Resize the heartbeat bar */ | ||||||
|         resize() { |         resize() { | ||||||
|             if (this.$refs.wrap) { |             if (this.$refs.wrap) { | ||||||
|                 this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatMargin * 2)); |                 this.maxBeat = Math.floor(this.$refs.wrap.clientWidth / (this.beatWidth + this.beatMargin * 2)); | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Get the title of the beat | ||||||
|  |          * @param {Object} beat Beat to get title from | ||||||
|  |          * @returns {string} | ||||||
|  |          */ | ||||||
|         getBeatTitle(beat) { |         getBeatTitle(beat) { | ||||||
|             return `${this.$root.datetime(beat.time)}` + ((beat.msg) ? ` - ${beat.msg}` : ""); |             return `${this.$root.datetime(beat.time)}` + ((beat.msg) ? ` - ${beat.msg}` : ""); | ||||||
|         }, |         }, | ||||||
|   | |||||||
| @@ -24,25 +24,31 @@ | |||||||
| <script> | <script> | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** The value of the input */ | ||||||
|         modelValue: { |         modelValue: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "" |             default: "" | ||||||
|         }, |         }, | ||||||
|  |         /** A placeholder to use */ | ||||||
|         placeholder: { |         placeholder: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "" |             default: "" | ||||||
|         }, |         }, | ||||||
|  |         /** Maximum lenght of the input */ | ||||||
|         maxlength: { |         maxlength: { | ||||||
|             type: Number, |             type: Number, | ||||||
|             default: 255 |             default: 255 | ||||||
|         }, |         }, | ||||||
|  |         /** Should the field auto complete */ | ||||||
|         autocomplete: { |         autocomplete: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: undefined, |             default: undefined, | ||||||
|         }, |         }, | ||||||
|  |         /** Is the input required? */ | ||||||
|         required: { |         required: { | ||||||
|             type: Boolean |             type: Boolean | ||||||
|         }, |         }, | ||||||
|  |         /** Should the input be read only? */ | ||||||
|         readonly: { |         readonly: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: undefined, |             default: undefined, | ||||||
| @@ -68,9 +74,11 @@ export default { | |||||||
|  |  | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Show users input in plain text */ | ||||||
|         showInput() { |         showInput() { | ||||||
|             this.visibility = "text"; |             this.visibility = "text"; | ||||||
|         }, |         }, | ||||||
|  |         /** Censor users input */ | ||||||
|         hideInput() { |         hideInput() { | ||||||
|             this.visibility = "password"; |             this.visibility = "password"; | ||||||
|         }, |         }, | ||||||
|   | |||||||
| @@ -55,6 +55,7 @@ export default { | |||||||
|         }; |         }; | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Submit the user details and attempt to log in */ | ||||||
|         submit() { |         submit() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -58,6 +58,7 @@ export default { | |||||||
|         Tag, |         Tag, | ||||||
|     }, |     }, | ||||||
|     props: { |     props: { | ||||||
|  |         /** Should the scrollbar be shown */ | ||||||
|         scrollbar: { |         scrollbar: { | ||||||
|             type: Boolean, |             type: Boolean, | ||||||
|         }, |         }, | ||||||
| @@ -124,6 +125,7 @@ export default { | |||||||
|         window.removeEventListener("scroll", this.onScroll); |         window.removeEventListener("scroll", this.onScroll); | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Called when the user scrolls */ | ||||||
|         onScroll() { |         onScroll() { | ||||||
|             if (window.top.scrollY <= 133) { |             if (window.top.scrollY <= 133) { | ||||||
|                 this.windowTop = window.top.scrollY; |                 this.windowTop = window.top.scrollY; | ||||||
| @@ -131,9 +133,15 @@ export default { | |||||||
|                 this.windowTop = 133; |                 this.windowTop = 133; | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Get URL of monitor | ||||||
|  |          * @param {number} id ID of monitor | ||||||
|  |          * @returns {string} Relative URL of monitor | ||||||
|  |          */ | ||||||
|         monitorURL(id) { |         monitorURL(id) { | ||||||
|             return getMonitorRelativeURL(id); |             return getMonitorRelativeURL(id); | ||||||
|         }, |         }, | ||||||
|  |         /** Clear the search bar */ | ||||||
|         clearSearchText() { |         clearSearchText() { | ||||||
|             this.searchText = ""; |             this.searchText = ""; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -125,11 +125,16 @@ export default { | |||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |  | ||||||
|  |         /** Show dialog to confirm deletion */ | ||||||
|         deleteConfirm() { |         deleteConfirm() { | ||||||
|             this.modal.hide(); |             this.modal.hide(); | ||||||
|             this.$refs.confirmDelete.show(); |             this.$refs.confirmDelete.show(); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Show settings for specified notification | ||||||
|  |          * @param {number} notificationID ID of notification to show | ||||||
|  |          */ | ||||||
|         show(notificationID) { |         show(notificationID) { | ||||||
|             if (notificationID) { |             if (notificationID) { | ||||||
|                 this.id = notificationID; |                 this.id = notificationID; | ||||||
| @@ -152,6 +157,7 @@ export default { | |||||||
|             this.modal.show(); |             this.modal.show(); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Submit the form to the server */ | ||||||
|         submit() { |         submit() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|             this.$root.getSocket().emit("addNotification", this.notification, this.id, (res) => { |             this.$root.getSocket().emit("addNotification", this.notification, this.id, (res) => { | ||||||
| @@ -170,6 +176,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Test the notification endpoint */ | ||||||
|         test() { |         test() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|             this.$root.getSocket().emit("testNotification", this.notification, (res) => { |             this.$root.getSocket().emit("testNotification", this.notification, (res) => { | ||||||
| @@ -178,6 +185,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Delete the notification endpoint */ | ||||||
|         deleteNotification() { |         deleteNotification() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|             this.$root.getSocket().emit("deleteNotification", this.id, (res) => { |             this.$root.getSocket().emit("deleteNotification", this.id, (res) => { | ||||||
| @@ -190,6 +198,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|         /** |         /** | ||||||
|  |          * Get a unique default name for the notification | ||||||
|          * @param {keyof NotificationFormList} notificationKey |          * @param {keyof NotificationFormList} notificationKey | ||||||
|          * @return {string} |          * @return {string} | ||||||
|          */ |          */ | ||||||
|   | |||||||
| @@ -35,6 +35,7 @@ Chart.register(LineController, BarController, LineElement, PointElement, TimeSca | |||||||
| export default { | export default { | ||||||
|     components: { LineChart }, |     components: { LineChart }, | ||||||
|     props: { |     props: { | ||||||
|  |         /** ID of monitor */ | ||||||
|         monitorId: { |         monitorId: { | ||||||
|             type: Number, |             type: Number, | ||||||
|             required: true, |             required: true, | ||||||
|   | |||||||
| @@ -130,11 +130,16 @@ export default { | |||||||
|     }, |     }, | ||||||
|  |  | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Show dialog to confirm delection */ | ||||||
|         deleteConfirm() { |         deleteConfirm() { | ||||||
|             this.modal.hide(); |             this.modal.hide(); | ||||||
|             this.$refs.confirmDelete.show(); |             this.$refs.confirmDelete.show(); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Show settings for specified proxy | ||||||
|  |          * @param {number} proxyID ID of proxy to show | ||||||
|  |          */ | ||||||
|         show(proxyID) { |         show(proxyID) { | ||||||
|             if (proxyID) { |             if (proxyID) { | ||||||
|                 this.id = proxyID; |                 this.id = proxyID; | ||||||
| @@ -163,6 +168,7 @@ export default { | |||||||
|             this.modal.show(); |             this.modal.show(); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Submit form data for saving */ | ||||||
|         submit() { |         submit() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|             this.$root.getSocket().emit("addProxy", this.proxy, this.id, (res) => { |             this.$root.getSocket().emit("addProxy", this.proxy, this.id, (res) => { | ||||||
| @@ -180,6 +186,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Delete this proxy */ | ||||||
|         deleteProxy() { |         deleteProxy() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|             this.$root.getSocket().emit("deleteProxy", this.id, (res) => { |             this.$root.getSocket().emit("deleteProxy", this.id, (res) => { | ||||||
|   | |||||||
| @@ -72,10 +72,12 @@ export default { | |||||||
|         Tag, |         Tag, | ||||||
|     }, |     }, | ||||||
|     props: { |     props: { | ||||||
|  |         /** Are we in edit mode? */ | ||||||
|         editMode: { |         editMode: { | ||||||
|             type: Boolean, |             type: Boolean, | ||||||
|             required: true, |             required: true, | ||||||
|         }, |         }, | ||||||
|  |         /** Should tags be shown? */ | ||||||
|         showTags: { |         showTags: { | ||||||
|             type: Boolean, |             type: Boolean, | ||||||
|         } |         } | ||||||
| @@ -94,10 +96,20 @@ export default { | |||||||
|  |  | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** | ||||||
|  |          * Remove the specified group | ||||||
|  |          * @param {number} index Index of group to remove | ||||||
|  |          */ | ||||||
|         removeGroup(index) { |         removeGroup(index) { | ||||||
|             this.$root.publicGroupList.splice(index, 1); |             this.$root.publicGroupList.splice(index, 1); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** | ||||||
|  |          * Remove a monitor from a group | ||||||
|  |          * @param {number} groupIndex Index of group to remove monitor | ||||||
|  |          * from | ||||||
|  |          * @param {number} index Index of monitor to remove | ||||||
|  |          */ | ||||||
|         removeMonitor(groupIndex, index) { |         removeMonitor(groupIndex, index) { | ||||||
|             this.$root.publicGroupList[groupIndex].monitorList.splice(index, 1); |             this.$root.publicGroupList[groupIndex].monitorList.splice(index, 1); | ||||||
|         }, |         }, | ||||||
|   | |||||||
| @@ -5,6 +5,7 @@ | |||||||
| <script> | <script> | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** Current status of monitor */ | ||||||
|         status: { |         status: { | ||||||
|             type: Number, |             type: Number, | ||||||
|             default: 0, |             default: 0, | ||||||
|   | |||||||
| @@ -20,14 +20,20 @@ | |||||||
| <script> | <script> | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** Object representing tag */ | ||||||
|         item: { |         item: { | ||||||
|             type: Object, |             type: Object, | ||||||
|             required: true, |             required: true, | ||||||
|         }, |         }, | ||||||
|  |         /** Function to remove tag */ | ||||||
|         remove: { |         remove: { | ||||||
|             type: Function, |             type: Function, | ||||||
|             default: null, |             default: null, | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Size of tag | ||||||
|  |          * @values normal, small | ||||||
|  |          */ | ||||||
|         size: { |         size: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "normal", |             default: "normal", | ||||||
|   | |||||||
| @@ -139,6 +139,7 @@ export default { | |||||||
|         VueMultiselect, |         VueMultiselect, | ||||||
|     }, |     }, | ||||||
|     props: { |     props: { | ||||||
|  |         /** Array of tags to be pre-selected */ | ||||||
|         preSelectedTags: { |         preSelectedTags: { | ||||||
|             type: Array, |             type: Array, | ||||||
|             default: () => [], |             default: () => [], | ||||||
| @@ -241,9 +242,11 @@ export default { | |||||||
|         this.getExistingTags(); |         this.getExistingTags(); | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Show the add tag dialog */ | ||||||
|         showAddDialog() { |         showAddDialog() { | ||||||
|             this.modal.show(); |             this.modal.show(); | ||||||
|         }, |         }, | ||||||
|  |         /** Get all existing tags */ | ||||||
|         getExistingTags() { |         getExistingTags() { | ||||||
|             this.$root.getSocket().emit("getTags", (res) => { |             this.$root.getSocket().emit("getTags", (res) => { | ||||||
|                 if (res.ok) { |                 if (res.ok) { | ||||||
| @@ -253,6 +256,10 @@ export default { | |||||||
|                 } |                 } | ||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Delete the specified tag | ||||||
|  |          * @param {Object} tag Object representing tag to delete | ||||||
|  |          */ | ||||||
|         deleteTag(item) { |         deleteTag(item) { | ||||||
|             if (item.new) { |             if (item.new) { | ||||||
|                 // Undo Adding a new Tag |                 // Undo Adding a new Tag | ||||||
| @@ -262,6 +269,13 @@ export default { | |||||||
|                 this.deleteTags.push(item); |                 this.deleteTags.push(item); | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Set colour of text | ||||||
|  |          * @param {Object} option Object representing color choice. If | ||||||
|  |          * option.color is set, the text color will be white, else it | ||||||
|  |          * be chosen based upon application theme | ||||||
|  |          * @returns string | ||||||
|  |          */ | ||||||
|         textColor(option) { |         textColor(option) { | ||||||
|             if (option.color) { |             if (option.color) { | ||||||
|                 return "white"; |                 return "white"; | ||||||
| @@ -269,6 +283,7 @@ export default { | |||||||
|                 return this.$root.theme === "light" ? "var(--bs-body-color)" : "inherit"; |                 return this.$root.theme === "light" ? "var(--bs-body-color)" : "inherit"; | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         /** Add a draft tag */ | ||||||
|         addDraftTag() { |         addDraftTag() { | ||||||
|             console.log("Adding Draft Tag: ", this.newDraftTag); |             console.log("Adding Draft Tag: ", this.newDraftTag); | ||||||
|             if (this.newDraftTag.select != null) { |             if (this.newDraftTag.select != null) { | ||||||
| @@ -296,6 +311,7 @@ export default { | |||||||
|             } |             } | ||||||
|             this.clearDraftTag(); |             this.clearDraftTag(); | ||||||
|         }, |         }, | ||||||
|  |         /** Remove a draft tag */ | ||||||
|         clearDraftTag() { |         clearDraftTag() { | ||||||
|             this.newDraftTag = { |             this.newDraftTag = { | ||||||
|                 name: null, |                 name: null, | ||||||
| @@ -307,26 +323,51 @@ export default { | |||||||
|             }; |             }; | ||||||
|             this.modal.hide(); |             this.modal.hide(); | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Add a tag asynchronously | ||||||
|  |          * @param {Object} newTag Object representing new tag to add | ||||||
|  |          * @returns {Promise<void>} | ||||||
|  |          */ | ||||||
|         addTagAsync(newTag) { |         addTagAsync(newTag) { | ||||||
|             return new Promise((resolve) => { |             return new Promise((resolve) => { | ||||||
|                 this.$root.getSocket().emit("addTag", newTag, resolve); |                 this.$root.getSocket().emit("addTag", newTag, resolve); | ||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Add a tag to a monitor asynchronously | ||||||
|  |          * @param {number} tagId ID of tag to add | ||||||
|  |          * @param {number} monitorId ID of monitor to add tag to | ||||||
|  |          * @param {string} value Value of tag | ||||||
|  |          * @returns {Promise<void>} | ||||||
|  |          */ | ||||||
|         addMonitorTagAsync(tagId, monitorId, value) { |         addMonitorTagAsync(tagId, monitorId, value) { | ||||||
|             return new Promise((resolve) => { |             return new Promise((resolve) => { | ||||||
|                 this.$root.getSocket().emit("addMonitorTag", tagId, monitorId, value, resolve); |                 this.$root.getSocket().emit("addMonitorTag", tagId, monitorId, value, resolve); | ||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Delete a tag from a monitor asynchronously | ||||||
|  |          * @param {number} tagId ID of tag to remove | ||||||
|  |          * @param {number} monitorId ID of monitor to remove tag from | ||||||
|  |          * @param {string} value Value of tag | ||||||
|  |          * @returns {Promise<void>} | ||||||
|  |          */ | ||||||
|         deleteMonitorTagAsync(tagId, monitorId, value) { |         deleteMonitorTagAsync(tagId, monitorId, value) { | ||||||
|             return new Promise((resolve) => { |             return new Promise((resolve) => { | ||||||
|                 this.$root.getSocket().emit("deleteMonitorTag", tagId, monitorId, value, resolve); |                 this.$root.getSocket().emit("deleteMonitorTag", tagId, monitorId, value, resolve); | ||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |         /** Called as user types input */ | ||||||
|         onEnter() { |         onEnter() { | ||||||
|             if (!this.validateDraftTag.invalid) { |             if (!this.validateDraftTag.invalid) { | ||||||
|                 this.addDraftTag(); |                 this.addDraftTag(); | ||||||
|             } |             } | ||||||
|         }, |         }, | ||||||
|  |         /** | ||||||
|  |          * Submit the form data | ||||||
|  |          * @param {number} monitorId ID of monitor this change affects | ||||||
|  |          * @returns {void} | ||||||
|  |          */ | ||||||
|         async submit(monitorId) { |         async submit(monitorId) { | ||||||
|             console.log(`Submitting tag changes for monitor ${monitorId}...`); |             console.log(`Submitting tag changes for monitor ${monitorId}...`); | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|   | |||||||
| @@ -29,10 +29,12 @@ | |||||||
| <script> | <script> | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** Heading to use */ | ||||||
|         heading: { |         heading: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: "", |             default: "", | ||||||
|         }, |         }, | ||||||
|  |         /** Should the selection be open by default? */ | ||||||
|         defaultOpen: { |         defaultOpen: { | ||||||
|             type: Boolean, |             type: Boolean, | ||||||
|             default: false, |             default: false, | ||||||
|   | |||||||
| @@ -100,18 +100,22 @@ export default { | |||||||
|         this.getStatus(); |         this.getStatus(); | ||||||
|     }, |     }, | ||||||
|     methods: { |     methods: { | ||||||
|  |         /** Show the dialog */ | ||||||
|         show() { |         show() { | ||||||
|             this.modal.show(); |             this.modal.show(); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Show dialog to confirm enabling 2FA */ | ||||||
|         confirmEnableTwoFA() { |         confirmEnableTwoFA() { | ||||||
|             this.$refs.confirmEnableTwoFA.show(); |             this.$refs.confirmEnableTwoFA.show(); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Show dialog to confirm disabling 2FA */ | ||||||
|         confirmDisableTwoFA() { |         confirmDisableTwoFA() { | ||||||
|             this.$refs.confirmDisableTwoFA.show(); |             this.$refs.confirmDisableTwoFA.show(); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Prepare 2FA configuration */ | ||||||
|         prepare2FA() { |         prepare2FA() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|  |  | ||||||
| @@ -126,6 +130,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Save the current 2FA configuration */ | ||||||
|         save2FA() { |         save2FA() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|  |  | ||||||
| @@ -143,6 +148,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Disable 2FA for this user */ | ||||||
|         disable2FA() { |         disable2FA() { | ||||||
|             this.processing = true; |             this.processing = true; | ||||||
|  |  | ||||||
| @@ -160,6 +166,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Verify the token generated by the user */ | ||||||
|         verifyToken() { |         verifyToken() { | ||||||
|             this.$root.getSocket().emit("verifyToken", this.token, this.currentPassword, (res) => { |             this.$root.getSocket().emit("verifyToken", this.token, this.currentPassword, (res) => { | ||||||
|                 if (res.ok) { |                 if (res.ok) { | ||||||
| @@ -170,6 +177,7 @@ export default { | |||||||
|             }); |             }); | ||||||
|         }, |         }, | ||||||
|  |  | ||||||
|  |         /** Get current status of 2FA */ | ||||||
|         getStatus() { |         getStatus() { | ||||||
|             this.$root.getSocket().emit("twoFAStatus", (res) => { |             this.$root.getSocket().emit("twoFAStatus", (res) => { | ||||||
|                 if (res.ok) { |                 if (res.ok) { | ||||||
|   | |||||||
| @@ -5,14 +5,17 @@ | |||||||
| <script> | <script> | ||||||
| export default { | export default { | ||||||
|     props: { |     props: { | ||||||
|  |         /** Monitor this represents */ | ||||||
|         monitor: { |         monitor: { | ||||||
|             type: Object, |             type: Object, | ||||||
|             default: null, |             default: null, | ||||||
|         }, |         }, | ||||||
|  |         /** Type of monitor */ | ||||||
|         type: { |         type: { | ||||||
|             type: String, |             type: String, | ||||||
|             default: null, |             default: null, | ||||||
|         }, |         }, | ||||||
|  |         /** Is this a pill */ | ||||||
|         pill: { |         pill: { | ||||||
|             type: Boolean, |             type: Boolean, | ||||||
|             default: false, |             default: false, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user