|
|
@ -332,6 +332,7 @@ export default {
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
props: {
|
|
|
|
props: {
|
|
|
|
|
|
|
|
/** Override for the status page slug */
|
|
|
|
overrideSlug: {
|
|
|
|
overrideSlug: {
|
|
|
|
type: String,
|
|
|
|
type: String,
|
|
|
|
required: false,
|
|
|
|
required: false,
|
|
|
@ -582,10 +583,16 @@ export default {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Provide syntax highlighting for CSS
|
|
|
|
|
|
|
|
* @param {string} code Text to highlight
|
|
|
|
|
|
|
|
* @returns {string}
|
|
|
|
|
|
|
|
*/
|
|
|
|
highlighter(code) {
|
|
|
|
highlighter(code) {
|
|
|
|
return highlight(code, languages.css);
|
|
|
|
return highlight(code, languages.css);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Update the heartbeat list and update favicon if neccessary */
|
|
|
|
updateHeartbeatList() {
|
|
|
|
updateHeartbeatList() {
|
|
|
|
// If editMode, it will use the data from websocket.
|
|
|
|
// If editMode, it will use the data from websocket.
|
|
|
|
if (! this.editMode) {
|
|
|
|
if (! this.editMode) {
|
|
|
@ -614,6 +621,7 @@ export default {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Enable editing mode */
|
|
|
|
edit() {
|
|
|
|
edit() {
|
|
|
|
if (this.hasToken) {
|
|
|
|
if (this.hasToken) {
|
|
|
|
this.$root.initSocketIO(true);
|
|
|
|
this.$root.initSocketIO(true);
|
|
|
@ -622,6 +630,7 @@ export default {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Save the status page */
|
|
|
|
save() {
|
|
|
|
save() {
|
|
|
|
let startTime = new Date();
|
|
|
|
let startTime = new Date();
|
|
|
|
this.config.slug = this.config.slug.trim().toLowerCase();
|
|
|
|
this.config.slug = this.config.slug.trim().toLowerCase();
|
|
|
@ -649,10 +658,12 @@ export default {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Show dialog confirming deletion */
|
|
|
|
deleteDialog() {
|
|
|
|
deleteDialog() {
|
|
|
|
this.$refs.confirmDelete.show();
|
|
|
|
this.$refs.confirmDelete.show();
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Request deletion of this status page */
|
|
|
|
deleteStatusPage() {
|
|
|
|
deleteStatusPage() {
|
|
|
|
this.$root.getSocket().emit("deleteStatusPage", this.slug, (res) => {
|
|
|
|
this.$root.getSocket().emit("deleteStatusPage", this.slug, (res) => {
|
|
|
|
if (res.ok) {
|
|
|
|
if (res.ok) {
|
|
|
@ -664,10 +675,16 @@ export default {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Returns label for a specifed monitor
|
|
|
|
|
|
|
|
* @param {Object} monitor Object representing monitor
|
|
|
|
|
|
|
|
* @returns {string}
|
|
|
|
|
|
|
|
*/
|
|
|
|
monitorSelectorLabel(monitor) {
|
|
|
|
monitorSelectorLabel(monitor) {
|
|
|
|
return `${monitor.name}`;
|
|
|
|
return `${monitor.name}`;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Add a group to the status page */
|
|
|
|
addGroup() {
|
|
|
|
addGroup() {
|
|
|
|
let groupName = this.$t("Untitled Group");
|
|
|
|
let groupName = this.$t("Untitled Group");
|
|
|
|
|
|
|
|
|
|
|
@ -681,27 +698,32 @@ export default {
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Add a domain to the status page */
|
|
|
|
addDomainField() {
|
|
|
|
addDomainField() {
|
|
|
|
this.config.domainNameList.push("");
|
|
|
|
this.config.domainNameList.push("");
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Discard changes to status page */
|
|
|
|
discard() {
|
|
|
|
discard() {
|
|
|
|
location.href = "/status/" + this.slug;
|
|
|
|
location.href = "/status/" + this.slug;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Crop Success
|
|
|
|
* Set URL of new image after successful crop operation
|
|
|
|
|
|
|
|
* @param {string} imgDataUrl URL of image in data:// format
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
cropSuccess(imgDataUrl) {
|
|
|
|
cropSuccess(imgDataUrl) {
|
|
|
|
this.imgDataUrl = imgDataUrl;
|
|
|
|
this.imgDataUrl = imgDataUrl;
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Show image crop dialog if in edit mode */
|
|
|
|
showImageCropUploadMethod() {
|
|
|
|
showImageCropUploadMethod() {
|
|
|
|
if (this.editMode) {
|
|
|
|
if (this.editMode) {
|
|
|
|
this.showImageCropUpload = true;
|
|
|
|
this.showImageCropUpload = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Create an incident for this status page */
|
|
|
|
createIncident() {
|
|
|
|
createIncident() {
|
|
|
|
this.enableEditIncidentMode = true;
|
|
|
|
this.enableEditIncidentMode = true;
|
|
|
|
|
|
|
|
|
|
|
@ -716,6 +738,7 @@ export default {
|
|
|
|
};
|
|
|
|
};
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Post the incident to the status page */
|
|
|
|
postIncident() {
|
|
|
|
postIncident() {
|
|
|
|
if (this.incident.title === "" || this.incident.content === "") {
|
|
|
|
if (this.incident.title === "" || this.incident.content === "") {
|
|
|
|
toast.error(this.$t("Please input title and content"));
|
|
|
|
toast.error(this.$t("Please input title and content"));
|
|
|
@ -735,14 +758,13 @@ export default {
|
|
|
|
|
|
|
|
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/** Click Edit Button */
|
|
|
|
* Click Edit Button
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
editIncident() {
|
|
|
|
editIncident() {
|
|
|
|
this.enableEditIncidentMode = true;
|
|
|
|
this.enableEditIncidentMode = true;
|
|
|
|
this.previousIncident = Object.assign({}, this.incident);
|
|
|
|
this.previousIncident = Object.assign({}, this.incident);
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Cancel creation or editing of incident */
|
|
|
|
cancelIncident() {
|
|
|
|
cancelIncident() {
|
|
|
|
this.enableEditIncidentMode = false;
|
|
|
|
this.enableEditIncidentMode = false;
|
|
|
|
|
|
|
|
|
|
|
@ -752,16 +774,25 @@ export default {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** Unpin the incident */
|
|
|
|
unpinIncident() {
|
|
|
|
unpinIncident() {
|
|
|
|
this.$root.getSocket().emit("unpinIncident", this.slug, () => {
|
|
|
|
this.$root.getSocket().emit("unpinIncident", this.slug, () => {
|
|
|
|
this.incident = null;
|
|
|
|
this.incident = null;
|
|
|
|
});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Get the relative time difference of a date from now
|
|
|
|
|
|
|
|
* @returns {string}
|
|
|
|
|
|
|
|
*/
|
|
|
|
dateFromNow(date) {
|
|
|
|
dateFromNow(date) {
|
|
|
|
return dayjs.utc(date).fromNow();
|
|
|
|
return dayjs.utc(date).fromNow();
|
|
|
|
},
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
|
|
* Remove a domain from the status page
|
|
|
|
|
|
|
|
* @param {number} index Index of domain to remove
|
|
|
|
|
|
|
|
*/
|
|
|
|
removeDomain(index) {
|
|
|
|
removeDomain(index) {
|
|
|
|
this.config.domainNameList.splice(index, 1);
|
|
|
|
this.config.domainNameList.splice(index, 1);
|
|
|
|
},
|
|
|
|
},
|
|
|
|