From 1952e34110957a3ed81b68d0ad9afb78f0da4ac4 Mon Sep 17 00:00:00 2001 From: Ponkhy Date: Sun, 29 Aug 2021 18:47:01 +0200 Subject: [PATCH 01/49] Added the possibility to clear monitor data --- server/server.js | 48 ++++++++++++++++++++++ src/assets/vars.scss | 2 + src/languages/de-DE.js | 5 +++ src/languages/en.js | 2 + src/mixins/socket.js | 7 ++++ src/pages/Details.vue | 93 ++++++++++++++++++++++++++++++++++++++++-- 6 files changed, 153 insertions(+), 4 deletions(-) diff --git a/server/server.js b/server/server.js index d4fe668b..3530981b 100644 --- a/server/server.js +++ b/server/server.js @@ -552,6 +552,54 @@ let indexHTML = fs.readFileSync("./dist/index.html").toString(); } }); + socket.on("clearEvents", async (monitorID, callback) => { + try { + checkLogin(socket) + + console.log(`Clear Events Monitor: ${monitorID} User ID: ${socket.userID}`) + + await R.exec("UPDATE heartbeat SET msg = ?, important = ? WHERE monitor_id = ? ", [ + "", + "0", + monitorID, + ]); + + callback({ + ok: true, + msg: "Events Successfully Cleared.", + }); + + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + + socket.on("clearHeartbeats", async (monitorID, callback) => { + try { + checkLogin(socket) + + console.log(`Clear Heartbeats Monitor: ${monitorID} User ID: ${socket.userID}`) + + await R.exec("DELETE FROM heartbeat WHERE monitor_id = ?", [ + monitorID + ]); + + callback({ + ok: true, + msg: "Heartbeats Successfully Cleared.", + }); + + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + debug("added all socket handlers") // *************************** diff --git a/src/assets/vars.scss b/src/assets/vars.scss index 9d487eb2..2f436983 100644 --- a/src/assets/vars.scss +++ b/src/assets/vars.scss @@ -16,3 +16,5 @@ $dark-border-color: #1d2634; $easing-in: cubic-bezier(0.54, 0.78, 0.55, 0.97); $easing-out: cubic-bezier(0.25, 0.46, 0.45, 0.94); $easing-in-out: cubic-bezier(0.79, 0.14, 0.15, 0.86); + +$dropdown-border-radius: 0.5rem; diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js index ba852cf3..58d283a3 100644 --- a/src/languages/de-DE.js +++ b/src/languages/de-DE.js @@ -104,4 +104,9 @@ export default { rrtypeDescription: "Wähle den RR-Typ aus, welchen du überwachen möchtest.", "Last Result": "Letztes Ergebnis", pauseMonitorMsg: "Bist du sicher das du den Monitor pausieren möchtest?", + clearEventsMsg: "Bist du sicher das du alle Ereignisse löschen möchtest?", + clearHeartbeatsMsg: "Bist du sicher das du alle Statistiken löschen möchtest?", + "Clear Data": "Lösche Daten", + "Events": "Ereignisse", + "Heartbeats": "Statistiken", } diff --git a/src/languages/en.js b/src/languages/en.js index 75c25dd5..0729e2e7 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -16,4 +16,6 @@ export default { resoverserverDescription: "Cloudflare is the default server, you can change the resolver server anytime.", rrtypeDescription: "Select the RR-Type you want to monitor", pauseMonitorMsg: "Are you sure want to pause?", + clearEventsMsg: "Are you sure want to delete all events?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats?", } diff --git a/src/mixins/socket.js b/src/mixins/socket.js index 454422e9..6f6f033a 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -254,6 +254,13 @@ export default { this.importantHeartbeatList = {} }, + clearEvents(monitorID, callback) { + socket.emit("clearEvents", monitorID, callback) + }, + + clearHeartbeats(monitorID, callback) { + socket.emit("clearHeartbeats", monitorID, callback) + }, }, computed: { diff --git a/src/pages/Details.vue b/src/pages/Details.vue index cc45e403..8ceae1d2 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -133,6 +133,23 @@
+ @@ -172,6 +189,14 @@ {{ $t("deleteMonitorMsg") }} + + + {{ $t("clearEventsMsg") }} + + + + {{ $t("clearHeartbeatsMsg") }} + @@ -313,6 +338,14 @@ export default { this.$refs.confirmDelete.show(); }, + clearEventsDialog() { + this.$refs.confirmClearEvents.show(); + }, + + clearHeartbeatsDialog() { + this.$refs.confirmClearHeartbeats.show(); + }, + deleteMonitor() { this.$root.deleteMonitor(this.monitor.id, (res) => { if (res.ok) { @@ -324,6 +357,27 @@ export default { }) }, + clearEvents() { + this.$root.clearEvents(this.monitor.id, (res) => { + if (res.ok) { + toast.success(res.msg); + this.$router.go(); + } else { + toast.error(res.msg); + } + }) + }, + + clearHeartbeats() { + this.$root.clearHeartbeats(this.monitor.id, (res) => { + if (res.ok) { + toast.success(res.msg); + this.$router.go(); + } else { + toast.error(res.msg); + } + }) + }, }, } @@ -340,16 +394,20 @@ export default { @media (max-width: 550px) { .functions { text-align: center; - } - button, a { - margin-left: 10px !important; - margin-right: 10px !important; + button, a { + margin-left: 10px !important; + margin-right: 10px !important; + } } .ping-chart-wrapper { padding: 10px !important; } + + .dropdown-clear-data { + margin-bottom: 10px; + } } @media (max-width: 400px) { @@ -364,6 +422,13 @@ export default { padding-left: 25px; padding-right: 25px; } + + .dropdown-clear-data { + button { + display: block; + padding-top: 4px; + } + } } .url { @@ -417,9 +482,29 @@ table { color: black; } +.dropdown-clear-data { + float: right; +} + .dark { .keyword { color: $dark-font-color; } + + .dropdown-clear-data { + ul { + background-color: $dark-bg; + border-color: $dark-bg2; + border-width: 2px; + + li button{ + color: $dark-font-color; + } + + li button:hover { + background-color: $dark-bg2; + } + } + } } From 7b92166d18e0759d3cc805c9cd96ef39fbdcee61 Mon Sep 17 00:00:00 2001 From: Ponkhy Date: Wed, 1 Sep 2021 00:36:24 +0200 Subject: [PATCH 02/49] Added clear all db statistics function --- server/server.js | 22 ++++++++++++++++++++-- src/languages/de-DE.js | 5 +++-- src/languages/en.js | 5 +++-- src/mixins/socket.js | 4 ++++ src/pages/Details.vue | 2 -- src/pages/Settings.vue | 18 ++++++++++++++++++ 6 files changed, 48 insertions(+), 8 deletions(-) diff --git a/server/server.js b/server/server.js index 3530981b..6c49b8c2 100644 --- a/server/server.js +++ b/server/server.js @@ -566,7 +566,6 @@ let indexHTML = fs.readFileSync("./dist/index.html").toString(); callback({ ok: true, - msg: "Events Successfully Cleared.", }); } catch (e) { @@ -589,7 +588,26 @@ let indexHTML = fs.readFileSync("./dist/index.html").toString(); callback({ ok: true, - msg: "Heartbeats Successfully Cleared.", + }); + + } catch (e) { + callback({ + ok: false, + msg: e.message, + }); + } + }); + + socket.on("clearStatistics", async (callback) => { + try { + checkLogin(socket) + + console.log(`Clear Statistics User ID: ${socket.userID}`) + + await R.exec("DELETE FROM heartbeat"); + + callback({ + ok: true, }); } catch (e) { diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js index 58d283a3..182f9e1a 100644 --- a/src/languages/de-DE.js +++ b/src/languages/de-DE.js @@ -104,9 +104,10 @@ export default { rrtypeDescription: "Wähle den RR-Typ aus, welchen du überwachen möchtest.", "Last Result": "Letztes Ergebnis", pauseMonitorMsg: "Bist du sicher das du den Monitor pausieren möchtest?", - clearEventsMsg: "Bist du sicher das du alle Ereignisse löschen möchtest?", - clearHeartbeatsMsg: "Bist du sicher das du alle Statistiken löschen möchtest?", + clearEventsMsg: "Bist du sicher das du alle Ereignisse für diesen Monitor löschen möchtest?", + clearHeartbeatsMsg: "Bist du sicher das du alle Statistiken für diesen Monitor löschen möchtest?", "Clear Data": "Lösche Daten", "Events": "Ereignisse", "Heartbeats": "Statistiken", + confirmClearStatisticsMsg: "Bist du sicher das du ALLE Statistiken löschen möchtest?", } diff --git a/src/languages/en.js b/src/languages/en.js index 0729e2e7..f7241807 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -16,6 +16,7 @@ export default { resoverserverDescription: "Cloudflare is the default server, you can change the resolver server anytime.", rrtypeDescription: "Select the RR-Type you want to monitor", pauseMonitorMsg: "Are you sure want to pause?", - clearEventsMsg: "Are you sure want to delete all events?", - clearHeartbeatsMsg: "Are you sure want to delete all heartbeats?", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", } diff --git a/src/mixins/socket.js b/src/mixins/socket.js index 6f6f033a..64560ea7 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -261,6 +261,10 @@ export default { clearHeartbeats(monitorID, callback) { socket.emit("clearHeartbeats", monitorID, callback) }, + + clearStatistics(callback) { + socket.emit("clearStatistics", callback) + }, }, computed: { diff --git a/src/pages/Details.vue b/src/pages/Details.vue index 5c05b3dd..907e2d12 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -360,7 +360,6 @@ export default { clearEvents() { this.$root.clearEvents(this.monitor.id, (res) => { if (res.ok) { - toast.success(res.msg); this.$router.go(); } else { toast.error(res.msg); @@ -371,7 +370,6 @@ export default { clearHeartbeats() { this.$root.clearHeartbeats(this.monitor.id, (res) => { if (res.ok) { - toast.success(res.msg); this.$router.go(); } else { toast.error(res.msg); diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue index d71ec109..da56613e 100644 --- a/src/pages/Settings.vue +++ b/src/pages/Settings.vue @@ -126,6 +126,7 @@ + @@ -184,6 +185,10 @@

Bitte mit Vorsicht nutzen.

+ + + {{ $t("confirmClearStatisticsMsg") }} + @@ -282,6 +287,10 @@ export default { this.$refs.confirmDisableAuth.show(); }, + confirmClearStatistics() { + this.$refs.confirmClearStatistics.show(); + }, + disableAuth() { this.settings.disableAuth = true; this.saveSettings(); @@ -293,6 +302,15 @@ export default { this.$root.storage().removeItem("token"); }, + clearStatistics() { + this.$root.clearStatistics((res) => { + if (res.ok) { + this.$router.go(); + } else { + toast.error(res.msg); + } + }) + }, }, } From 532ad3044cb3e0b7e7771863c2d871f45b1e22b5 Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Thu, 2 Sep 2021 21:55:25 +0800 Subject: [PATCH 03/49] Add space to pushbullet and lunasea notifications Start changes regarding standardization of notification messages --- server/notification.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/server/notification.js b/server/notification.js index 472012af..9417e733 100644 --- a/server/notification.js +++ b/server/notification.js @@ -491,7 +491,7 @@ class Notification { if (heartbeatJSON["status"] == 0) { let downdata = { - "title": "UptimeKuma Alert:" + monitorJSON["name"], + "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[🔴 Down]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], } await axios.post(lunaseadevice, downdata) @@ -500,7 +500,7 @@ class Notification { if (heartbeatJSON["status"] == 1) { let updata = { - "title": "UptimeKuma Alert:" + monitorJSON["name"], + "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[✅ Up]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], } await axios.post(lunaseadevice, updata) @@ -530,14 +530,14 @@ class Notification { } else if (heartbeatJSON["status"] == 0) { let downdata = { "type": "note", - "title": "UptimeKuma Alert:" + monitorJSON["name"], + "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[🔴 Down]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], } await axios.post(pushbulletUrl, downdata, config) } else if (heartbeatJSON["status"] == 1) { let updata = { "type": "note", - "title": "UptimeKuma Alert:" + monitorJSON["name"], + "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[✅ Up]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], } await axios.post(pushbulletUrl, updata, config) From dca5c59982f35a2dc29b1e61f25da198f28cfb30 Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 18:24:43 +0800 Subject: [PATCH 04/49] Update lunasea body content Co-authored-by: Adam Stachowicz --- server/notification.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/notification.js b/server/notification.js index 9417e733..fb132ced 100644 --- a/server/notification.js +++ b/server/notification.js @@ -492,7 +492,7 @@ class Notification { if (heartbeatJSON["status"] == 0) { let downdata = { "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[🔴 Down]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], + "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], } await axios.post(lunaseadevice, downdata) return okMsg; From 3bf380c684a902b8c5f5d1f6a76536fa0ca5c98d Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 18:26:10 +0800 Subject: [PATCH 05/49] Update lunasea "up" body content Co-authored-by: Adam Stachowicz --- server/notification.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/notification.js b/server/notification.js index fb132ced..274f99cb 100644 --- a/server/notification.js +++ b/server/notification.js @@ -501,7 +501,7 @@ class Notification { if (heartbeatJSON["status"] == 1) { let updata = { "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[✅ Up]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], + "body": "[✅ Up] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], } await axios.post(lunaseadevice, updata) return okMsg; From d346afd33bb2e349c4f8f08fb3b6d201bab208e2 Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 18:26:38 +0800 Subject: [PATCH 06/49] Update pushbullet up body Co-authored-by: Adam Stachowicz --- server/notification.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/notification.js b/server/notification.js index 274f99cb..fecc639c 100644 --- a/server/notification.js +++ b/server/notification.js @@ -538,7 +538,7 @@ class Notification { let updata = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[✅ Up]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], + "body": "[✅ Up] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], } await axios.post(pushbulletUrl, updata, config) } From 9c32adfb55bb629bf32b665afb1bece1c9e36da1 Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 18:26:44 +0800 Subject: [PATCH 07/49] Update pushbullet down body Co-authored-by: Adam Stachowicz --- server/notification.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/notification.js b/server/notification.js index fecc639c..b9eba5a0 100644 --- a/server/notification.js +++ b/server/notification.js @@ -531,7 +531,7 @@ class Notification { let downdata = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], - "body": "[🔴 Down]" + heartbeatJSON["msg"] + "\nTime (UTC):" + heartbeatJSON["time"], + "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], } await axios.post(pushbulletUrl, downdata, config) } else if (heartbeatJSON["status"] == 1) { From 6ae279c7f387ffe79a9341eaa9c11e9257d2989f Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 11:06:06 +0800 Subject: [PATCH 08/49] Move title generation to notification class --- server/model/monitor.js | 11 +---------- server/notification.js | 14 +++++++++++++- server/server.js | 2 +- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 19f21d92..126d59b1 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -270,18 +270,9 @@ class Monitor extends BeanModel { this.id, ]) - let text; - if (bean.status === UP) { - text = "✅ Up" - } else { - text = "🔴 Down" - } - - let msg = `[${this.name}] [${text}] ${bean.msg}`; - for (let notification of notificationList) { try { - await Notification.send(JSON.parse(notification.config), msg, await this.toJSON(), bean.toJSON()) + await Notification.send(JSON.parse(notification.config), this.name, await this.toJSON(), bean.toJSON()) } catch (e) { console.error("Cannot send notification to " + notification.name); console.log(e); diff --git a/server/notification.js b/server/notification.js index b9eba5a0..42c4627d 100644 --- a/server/notification.js +++ b/server/notification.js @@ -15,9 +15,21 @@ class Notification { * @returns {Promise} Successful msg * Throw Error with fail msg */ - static async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { + static async send(notification, monitorName = null, monitorJSON = null, heartbeatJSON = null) { let okMsg = "Sent Successfully. "; + let msg = `[${notification.name}] Testing`; + // heartbeatJSON is only defined if we're not testing + if(heartbeatJSON) { + let text; + if (heartbeatJSON["status"] === 1) { + text = "✅ Up" + } else { + text = "🔴 Down" + } + msg = `[${monitorName}] [${text}] ${heartbeatJSON["msg"]}`; + } + if (notification.type === "telegram") { try { await axios.get(`https://api.telegram.org/bot${notification.telegramBotToken}/sendMessage`, { diff --git a/server/server.js b/server/server.js index 39191de7..8f4516dc 100644 --- a/server/server.js +++ b/server/server.js @@ -552,7 +552,7 @@ let indexHTML = fs.readFileSync("./dist/index.html").toString(); try { checkLogin(socket) - let msg = await Notification.send(notification, notification.name + " Testing") + let msg = await Notification.send(notification) callback({ ok: true, From e9cd9be03abc36f0d6b03df38fcc726a7acfa057 Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 11:09:34 +0800 Subject: [PATCH 09/49] Use constants for UP/DOWN through notifications class --- server/notification.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/server/notification.js b/server/notification.js index 42c4627d..520d78dd 100644 --- a/server/notification.js +++ b/server/notification.js @@ -4,6 +4,8 @@ const FormData = require("form-data"); const nodemailer = require("nodemailer"); const child_process = require("child_process"); +const { UP, DOWN } = require("../src/util"); + class Notification { /** @@ -22,7 +24,7 @@ class Notification { // heartbeatJSON is only defined if we're not testing if(heartbeatJSON) { let text; - if (heartbeatJSON["status"] === 1) { + if (heartbeatJSON["status"] === UP) { text = "✅ Up" } else { text = "🔴 Down" @@ -121,7 +123,7 @@ class Notification { } // If heartbeatJSON is not null, we go into the normal alerting loop. - if (heartbeatJSON["status"] == 0) { + if (heartbeatJSON["status"] == DOWN) { let discorddowndata = { username: discordDisplayName, embeds: [{ @@ -151,7 +153,7 @@ class Notification { await axios.post(notification.discordWebhookUrl, discorddowndata) return okMsg; - } else if (heartbeatJSON["status"] == 1) { + } else if (heartbeatJSON["status"] == UP) { let discordupdata = { username: discordDisplayName, embeds: [{ @@ -355,7 +357,7 @@ class Notification { const mattermostIconEmoji = notification.mattermosticonemo; const mattermostIconUrl = notification.mattermosticonurl; - if (heartbeatJSON["status"] == 0) { + if (heartbeatJSON["status"] == DOWN) { let mattermostdowndata = { username: mattermostUserName, text: "Uptime Kuma Alert", @@ -399,7 +401,7 @@ class Notification { mattermostdowndata ); return okMsg; - } else if (heartbeatJSON["status"] == 1) { + } else if (heartbeatJSON["status"] == UP) { let mattermostupdata = { username: mattermostUserName, text: "Uptime Kuma Alert", @@ -501,7 +503,7 @@ class Notification { return okMsg; } - if (heartbeatJSON["status"] == 0) { + if (heartbeatJSON["status"] == DOWN) { let downdata = { "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], @@ -510,7 +512,7 @@ class Notification { return okMsg; } - if (heartbeatJSON["status"] == 1) { + if (heartbeatJSON["status"] == UP) { let updata = { "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[✅ Up] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], @@ -539,14 +541,14 @@ class Notification { "body": "Testing Successful.", } await axios.post(pushbulletUrl, testdata, config) - } else if (heartbeatJSON["status"] == 0) { + } else if (heartbeatJSON["status"] == DOWN) { let downdata = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], "body": "[🔴 Down] " + heartbeatJSON["msg"] + "\nTime (UTC): " + heartbeatJSON["time"], } await axios.post(pushbulletUrl, downdata, config) - } else if (heartbeatJSON["status"] == 1) { + } else if (heartbeatJSON["status"] == UP) { let updata = { "type": "note", "title": "UptimeKuma Alert: " + monitorJSON["name"], @@ -578,7 +580,7 @@ class Notification { ] } await axios.post(lineAPIUrl, testMessage, config) - } else if (heartbeatJSON["status"] == 0) { + } else if (heartbeatJSON["status"] == DOWN) { let downMessage = { "to": notification.lineUserID, "messages": [ @@ -589,7 +591,7 @@ class Notification { ] } await axios.post(lineAPIUrl, downMessage, config) - } else if (heartbeatJSON["status"] == 1) { + } else if (heartbeatJSON["status"] == UP) { let upMessage = { "to": notification.lineUserID, "messages": [ From b0acda52f9b6b47aedb3ce1b05ea78d73c6b7be0 Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 11:27:18 +0800 Subject: [PATCH 10/49] Add time to smtp body content --- server/notification.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/server/notification.js b/server/notification.js index 520d78dd..beb1ff9d 100644 --- a/server/notification.js +++ b/server/notification.js @@ -94,7 +94,7 @@ class Notification { } } else if (notification.type === "smtp") { - return await Notification.smtp(notification, msg) + return await Notification.smtp(notification, msg, heartbeatJSON) } else if (notification.type === "discord") { try { @@ -648,7 +648,7 @@ class Notification { await R.trash(bean) } - static async smtp(notification, msg) { + static async smtp(notification, msg, heartbeatJSON = null) { const config = { host: notification.smtpHost, @@ -666,12 +666,17 @@ class Notification { let transporter = nodemailer.createTransport(config); + let bodyTextContent = msg; + if(heartbeatJSON) { + bodyTextContent = `${msg}\nTime (UTC): ${heartbeatJSON["time"]}`; + } + // send mail with defined transport object await transporter.sendMail({ from: `"Uptime Kuma" <${notification.smtpFrom}>`, to: notification.smtpTo, subject: msg, - text: msg, + text: bodyTextContent, }); return "Sent Successfully."; From 0d87a6dfea184bb74a6f2253cd5126d7c52ea1d7 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 4 Sep 2021 14:41:45 +0800 Subject: [PATCH 11/49] update vue to 3.2.8 --- package-lock.json | 867 +++++++++++++++++++++++----------------------- package.json | 2 +- 2 files changed, 435 insertions(+), 434 deletions(-) diff --git a/package-lock.json b/package-lock.json index 25be1477..dcf5077d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "uptime-kuma", - "version": "1.5.0", + "version": "1.5.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "uptime-kuma", - "version": "1.5.0", + "version": "1.5.2", "license": "MIT", "dependencies": { "@fortawesome/fontawesome-svg-core": "^1.2.36", @@ -26,19 +26,19 @@ "express": "^4.17.1", "express-basic-auth": "^1.2.0", "form-data": "^4.0.0", - "http-graceful-shutdown": "^3.1.3", + "http-graceful-shutdown": "^3.1.4", "jsonwebtoken": "^8.5.1", "nodemailer": "^6.6.3", "password-hash": "^1.2.2", "prom-client": "^13.2.0", "prometheus-api-metrics": "^3.2.0", "redbean-node": "0.1.2", - "socket.io": "^4.1.3", - "socket.io-client": "^4.1.3", + "socket.io": "^4.2.0", + "socket.io-client": "^4.2.0", "sqlite3": "github:mapbox/node-sqlite3#593c9d", "tcp-ping": "^0.1.1", "v-pagination-3": "^0.1.6", - "vue": "^3.2.2", + "vue": "^3.2.8", "vue-chart-3": "^0.5.7", "vue-confirm-dialog": "^1.0.2", "vue-i18n": "^9.1.7", @@ -48,19 +48,19 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.15.0", - "@types/bootstrap": "^5.1.1", - "@vitejs/plugin-legacy": "^1.5.1", - "@vitejs/plugin-vue": "^1.4.0", - "@vue/compiler-sfc": "^3.2.2", - "core-js": "^3.16.1", + "@types/bootstrap": "^5.1.2", + "@vitejs/plugin-legacy": "^1.5.2", + "@vitejs/plugin-vue": "^1.6.0", + "@vue/compiler-sfc": "^3.2.6", + "core-js": "^3.17.0", "dns2": "^2.0.1", "eslint": "^7.32.0", - "eslint-plugin-vue": "^7.16.0", - "sass": "^1.37.5", + "eslint-plugin-vue": "^7.17.0", + "sass": "^1.38.2", "stylelint": "^13.13.1", "stylelint-config-standard": "^22.0.0", - "typescript": "^4.3.5", - "vite": "^2.4.4" + "typescript": "^4.4.2", + "vite": "^2.5.3" }, "engines": { "node": "14.*" @@ -85,20 +85,20 @@ } }, "node_modules/@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.4.tgz", + "integrity": "sha512-Lkcv9I4a8bgUI8LJOLM6IKv6hnz1KOju6KM1lceqVMKlKKqNRopYd2Pc9MgIurqvMJ6BooemrnJz8jlIiQIpsA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/generator": "^7.15.4", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -151,9 +151,9 @@ } }, "node_modules/@babel/eslint-parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.0.tgz", - "integrity": "sha512-+gSPtjSBxOZz4Uh8Ggqu7HbfpB8cT1LwW0DnVVLZEJvzXauiD0Di3zszcBkRmfGGrLdYeHUwcflG7i3tr9kQlw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.4.tgz", + "integrity": "sha512-hPMIAmGNbmQzXJIo2P43Zj9UhRmGev5f9nqdBFOWNGDGh6XKmjby79woBvg6y0Jur6yRfQBneDbUQ8ZVc1krFw==", "dev": true, "dependencies": { "eslint-scope": "^5.1.1", @@ -169,12 +169,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "dependencies": { - "@babel/types": "^7.15.0", + "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -192,9 +192,9 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "dependencies": { "@babel/compat-data": "^7.15.0", @@ -210,132 +210,132 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "dependencies": { - "@babel/types": "^7.15.0" + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", + "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "dependencies": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "dependencies": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" @@ -359,14 +359,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "dependencies": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" @@ -458,9 +458,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.4.tgz", + "integrity": "sha512-xmzz+7fRpjrvDUj+GV7zfz/R3gSK2cOxGlazaXooxspCr539cbTXJKvBJzSVI2pPhcRGquoOtaIkKCsHQUiO3w==", "bin": { "parser": "bin/babel-parser.js" }, @@ -469,23 +469,23 @@ } }, "node_modules/@babel/standalone": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.15.3.tgz", - "integrity": "sha512-Bst2YWEyQ2ROyO0+jxPVnnkSmUh44/x54+LSbe5M4N5LGfOkxpajEUKVE4ndXtIVrLlHCyuiqCPwv3eC1ItnCg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.15.4.tgz", + "integrity": "sha512-UO0QCTFjX5NSuwX/i8+/pesmRPoRTtf46Cpn8VHcXvNinEr2lxqe8Ix10TfU/UK5qsaOrcKk24We8wH1G0nTZA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" }, "engines": { "node": ">=6.9.0" @@ -504,18 +504,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -545,9 +545,9 @@ } }, "node_modules/@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", "dependencies": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -817,9 +817,9 @@ } }, "node_modules/@popperjs/core": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz", - "integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==", + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz", + "integrity": "sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -870,9 +870,9 @@ } }, "node_modules/@types/bootstrap": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.1.2.tgz", - "integrity": "sha512-dSQvMi2dMyNwJU6LZjP0pimuBowsMUvGScYdfqqeiDUoj9TxXZCpfu0cTl94U0Zvw/tdH9j/9ToOhi4LKNLZhg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.1.4.tgz", + "integrity": "sha512-VAY+o6sCKrJ7Xix/lugdvQz0PpOn7Go+fQzCXOZvIdp7E/TDaiJddInVhNB/84bk9NX6uuKFSfl2pqslNYH9aA==", "dev": true, "dependencies": { "@popperjs/core": "^2.9.2", @@ -1013,9 +1013,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "16.7.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.8.tgz", - "integrity": "sha512-8upnoQU0OPzbIkm+ZMM0zCeFCkw2s3mS0IWdx0+AAaWqm4fkBb0UJp8Edl7FVKRamYbpJC/aVsHpKWBIbiC7Zg==" + "version": "16.7.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", + "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", @@ -1061,9 +1061,9 @@ "dev": true }, "node_modules/@vitejs/plugin-legacy": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-1.5.1.tgz", - "integrity": "sha512-g+0iy0X3NJRUSKZK+OCeSxNWnCuuE/6lsmr2WLWPOEt1vp6LdfHuNCYRooCm6s0ccTZ/SiumVk8vt9DWSYs+8A==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-1.5.2.tgz", + "integrity": "sha512-b1CaWY/wi7gQZnZaxH+ujPTPb91bEPgnnk7l0WIwxoQtW5UC5MQywRcAbFX+Ise62exXctOMBtsnXKJw2KajXw==", "dev": true, "dependencies": { "@babel/standalone": "^7.14.9", @@ -1092,40 +1092,40 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.6.tgz", - "integrity": "sha512-vbwnz7+OhtLO5p5i630fTuQCL+MlUpEMTKHuX+RfetQ+3pFCkItt2JUH+9yMaBG2Hkz6av+T9mwN/acvtIwpbw==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.8.tgz", + "integrity": "sha512-Sx8qJ030+QM/NakUrkQuUGCeDEb+0d0AgFOl5W4qRvR6e+YgLnW2ew0jREf4T1hak9Fdk8Edl67StECHrhEuew==", "dependencies": { "@babel/parser": "^7.15.0", "@babel/types": "^7.15.0", - "@vue/shared": "3.2.6", + "@vue/shared": "3.2.8", "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.6.tgz", - "integrity": "sha512-+a/3oBAzFIXhHt8L5IHJOTP4a5egzvpXYyi13jR7CUYOR1S+Zzv7vBWKYBnKyJLwnrxTZnTQVjeHCgJq743XKg==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.8.tgz", + "integrity": "sha512-nxBW6k8FMWQ74294CRbqR+iEJRO5vIjx85I3YCOyZFD6FsDHyFL60g76TcJzucp+F2XXIDaYz+A+F4gQlDatjw==", "dependencies": { - "@vue/compiler-core": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/compiler-core": "3.2.8", + "@vue/shared": "3.2.8" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.6.tgz", - "integrity": "sha512-Ariz1eDsf+2fw6oWXVwnBNtfKHav72RjlWXpEgozYBLnfRPzP+7jhJRw4Nq0OjSsLx2HqjF3QX7HutTjYB0/eA==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.8.tgz", + "integrity": "sha512-XClueQAXoWtN2EToKgfYH9FCL70Ac4bxx6OZFZzxYSg1bei8IB9srJP1UOfnJb2IpnM1heikAz1dp1HI1wHcyQ==", "dev": true, "dependencies": { "@babel/parser": "^7.15.0", "@babel/types": "^7.15.0", "@types/estree": "^0.0.48", - "@vue/compiler-core": "3.2.6", - "@vue/compiler-dom": "3.2.6", - "@vue/compiler-ssr": "3.2.6", - "@vue/ref-transform": "3.2.6", - "@vue/shared": "3.2.6", + "@vue/compiler-core": "3.2.8", + "@vue/compiler-dom": "3.2.8", + "@vue/compiler-ssr": "3.2.8", + "@vue/ref-transform": "3.2.8", + "@vue/shared": "3.2.8", "consolidate": "^0.16.0", "estree-walker": "^2.0.2", "hash-sum": "^2.0.0", @@ -1139,13 +1139,13 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.6.tgz", - "integrity": "sha512-A7IKRKHSyPnTC4w1FxHkjzoyjXInsXkcs/oX22nBQ+6AWlXj2Tt1le96CWPOXy5vYlsTYkF1IgfBaKIdeN/39g==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.8.tgz", + "integrity": "sha512-QqyiFRiIl55W0abDNQ6cNG/7iIfBHmbXVtssUAjX3IlI87ELeT0xackmrCyTSnfIX12ixljg9AN0COIZwlvt5A==", "dev": true, "dependencies": { - "@vue/compiler-dom": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/compiler-dom": "3.2.8", + "@vue/shared": "3.2.8" } }, "node_modules/@vue/devtools-api": { @@ -1154,49 +1154,49 @@ "integrity": "sha512-quBx4Jjpexo6KDiNUGFr/zF/2A4srKM9S9v2uHgMXSU//hjgq1eGzqkIFql8T9gfX5ZaVOUzYBP3jIdIR3PKIA==" }, "node_modules/@vue/reactivity": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.6.tgz", - "integrity": "sha512-8vIDD2wpCnYisNNZjmcIj+Rixn0uhZNY3G1vzlgdVdLygeRSuFjkmnZk6WwvGzUWpKfnG0e/NUySM3mVi59hAA==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.8.tgz", + "integrity": "sha512-/Hj3Uz28SG+xB5SDWPOXUs0emvHkq82EmTgk44/plTVFeswCZ3i3Hd7WmsrPT4rGajlDKd5uqMmW0ith1ED0FA==", "dependencies": { - "@vue/shared": "3.2.6" + "@vue/shared": "3.2.8" } }, "node_modules/@vue/ref-transform": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.6.tgz", - "integrity": "sha512-ie39+Y4nbirDLvH+WEq6Eo/l3n3mFATayqR+kEMSphrtMW6Uh/eEMx1Gk2Jnf82zmj3VLRq7dnmPx72JLcBYkQ==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.8.tgz", + "integrity": "sha512-9LdADd4JM3klt+b2qNT8a7b7JvBETNBy2Btv5rDzyPrAVS4Vrw+1WWay6gZBgnxfJ9TPSvG8f/9zu6gNGHmJLA==", "dev": true, "dependencies": { "@babel/parser": "^7.15.0", - "@vue/compiler-core": "3.2.6", - "@vue/shared": "3.2.6", + "@vue/compiler-core": "3.2.8", + "@vue/shared": "3.2.8", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "node_modules/@vue/runtime-core": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.6.tgz", - "integrity": "sha512-3mqtgpj/YSGFxtvTufSERRApo92B16JNNxz9p+5eG6PPuqTmuRJz214MqhKBEgLEAIQ6R6YCbd83ZDtjQnyw2g==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.8.tgz", + "integrity": "sha512-hwzXLGw1njBEY5JSyRXIIdCtzMFFF6F38WcKMmoIE3p7da30jEbWt8EwwrBomjT8ZbqzElOGlewBcnXNOiiIUg==", "dependencies": { - "@vue/reactivity": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/reactivity": "3.2.8", + "@vue/shared": "3.2.8" } }, "node_modules/@vue/runtime-dom": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.6.tgz", - "integrity": "sha512-fq33urnP0BNCGm2O3KCzkJlKIHI80C94HJ4qDZbjsTtxyOn5IHqwKSqXVN3RQvO6epcQH+sWS+JNwcNDPzoasg==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.8.tgz", + "integrity": "sha512-A/aRrlGLJ5y4Z7eNbnO/xHwx2RiPijQo7D3OIwESroG3HNP+dpuoqamajo5TXS9ZGjbMOih82COoe7xb9P4BZw==", "dependencies": { - "@vue/runtime-core": "3.2.6", - "@vue/shared": "3.2.6", + "@vue/runtime-core": "3.2.8", + "@vue/shared": "3.2.8", "csstype": "^2.6.8" } }, "node_modules/@vue/shared": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.6.tgz", - "integrity": "sha512-uwX0Qs2e6kdF+WmxwuxJxOnKs/wEkMArtYpHSm7W+VY/23Tl8syMRyjnzEeXrNCAP0/8HZxEGkHJsjPEDNRuHw==" + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.8.tgz", + "integrity": "sha512-E2DQQnG7Qr4GwTs3GlfPPlHliGVADoufTnhpwfoViw7JlyLMmYtjfnTwM6nXAwvSJWiF7D+7AxpnWBBT3VWo6Q==" }, "node_modules/abbrev": { "version": "1.1.1", @@ -1315,9 +1315,9 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "node_modules/are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -2022,9 +2022,9 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "node_modules/core-js": { - "version": "3.16.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.4.tgz", - "integrity": "sha512-Tq4GVE6XCjE+hcyW6hPy0ofN3hwtLudz5ZRdrlCnsnD/xkm/PWQRudzYHiKgZKUcefV6Q57fhDHjZHJP5dpfSg==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.17.2.tgz", + "integrity": "sha512-XkbXqhcXeMHPRk2ItS+zQYliAMilea2euoMsnpRRdDad6b2VY6CQQcwz1K8AnWesfw4p165RzY0bTnr3UrbYiA==", "dev": true, "hasInstallScript": true, "funding": { @@ -2033,9 +2033,9 @@ } }, "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/cors": { "version": "2.8.5", @@ -2313,9 +2313,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/electron-to-chromium": { - "version": "1.3.824", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.824.tgz", - "integrity": "sha512-Fk+5aD0HDi9i9ZKt9n2VPOZO1dQy7PV++hz2wJ/KIn+CvVfu4fny39squHtyVDPuHNuoJGAZIbuReEklqYIqfA==", + "version": "1.3.830", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz", + "integrity": "sha512-gBN7wNAxV5vl1430dG+XRcQhD4pIeYeak6p6rjdCtlz5wWNwDad8jwvphe5oi1chL5MV6RNRikfffBBiFuj+rQ==", "dev": true }, "node_modules/emoji-regex": { @@ -2431,9 +2431,9 @@ } }, "node_modules/esbuild": { - "version": "0.12.24", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.24.tgz", - "integrity": "sha512-C0ibY+HsXzYB6L/pLWEiWjMpghKsIc58Q5yumARwBQsHl9DXPakW+5NI/Y9w4YXiz0PEP6XTGTT/OV4Nnsmb4A==", + "version": "0.12.25", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.25.tgz", + "integrity": "sha512-woie0PosbRSoN8gQytrdCzUbS2ByKgO8nD1xCZkEup3D9q92miCze4PqEI9TZDYAuwn6CruEnQpJxgTRWdooAg==", "dev": true, "hasInstallScript": true, "bin": { @@ -2960,9 +2960,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", - "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==", + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", + "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==", "funding": [ { "type": "individual", @@ -3922,9 +3922,9 @@ } }, "node_modules/knex": { - "version": "0.95.10", - "resolved": "https://registry.npmjs.org/knex/-/knex-0.95.10.tgz", - "integrity": "sha512-I60A8TXcMdeJlE6h7DSgEYyY37S7kgLObz1qlJ7QvPMD6vnKO5dtuLEht5pMia9Qf5BomqVgkWCdVTqcC/ImOA==", + "version": "0.95.11", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.95.11.tgz", + "integrity": "sha512-grDetD91O8VoQVCFqeWTgkzdq5406W6rggF/lK1hHuwzmjDs/0m9KxyncGdZbklTi7aUgHvw3+Cfy4x7FvpdaQ==", "dependencies": { "colorette": "1.2.1", "commander": "^7.1.0", @@ -5789,9 +5789,9 @@ } }, "node_modules/redbean-node/node_modules/@types/node": { - "version": "14.17.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.12.tgz", - "integrity": "sha512-vhUqgjJR1qxwTWV5Ps5txuy2XMdf7Fw+OrdChRboy8BmWUPkckOhphaohzFG6b8DW7CrxaBMdrdJ47SYFq1okw==" + "version": "14.17.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.14.tgz", + "integrity": "sha512-rsAj2u8Xkqfc332iXV12SqIsjVi07H479bOP4q94NAcjzmAvapumEhuVIt53koEf7JFrpjgNKjBga5Pnn/GL8A==" }, "node_modules/redent": { "version": "3.0.0", @@ -6032,9 +6032,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sass": { - "version": "1.38.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.38.2.tgz", - "integrity": "sha512-Bz1fG6qiyF0FX6m/I+VxtdVKz1Dfmg/e9kfDy2PhWOkq3T384q2KxwIfP0fXpeI+EyyETdOauH+cRHQDFASllA==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.39.0.tgz", + "integrity": "sha512-F4o+RhJkNOIG0b6QudYU8c78ZADKZjKDk5cyrf8XTKWfrgbtyVVXImFstJrc+1pkQDCggyidIOytq6gS4gCCZg==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0" @@ -7220,6 +7220,12 @@ "extsprintf": "^1.2.0" } }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "optional": true + }, "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", @@ -7251,9 +7257,9 @@ } }, "node_modules/vite": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.2.tgz", - "integrity": "sha512-JK5uhiVyMqHiAJbgBa8rCvpP8bEhAE9dKDv1gCmP+EUP2FSPmEeW3WXlCXauPB3MDa8behPW+ntyNXqnGaxslg==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.3.tgz", + "integrity": "sha512-1wMDnjflvtTTkMov8O/Xb5+w1/VW/Gw8oCf8f6dqgHn8lMOEqq0SaPtFEQeikFcOKCfSbiU0nEi0LDIx6DNsaQ==", "dev": true, "dependencies": { "esbuild": "^0.12.17", @@ -7272,19 +7278,19 @@ } }, "node_modules/vue": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.6.tgz", - "integrity": "sha512-Zlb3LMemQS3Xxa6xPsecu45bNjr1hxO8Bh5FUmE0Dr6Ot0znZBKiM47rK6O7FTcakxOnvVN+NTXWJF6u8ajpCQ==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.8.tgz", + "integrity": "sha512-x7lwdnOSkceHQUXRVVHBaZzcp6v7M2CYtSZH75zZaT1mTjB4plC4KZHKP/5jAvdqOLBHZGwDSMkWXm3YbAufrA==", "dependencies": { - "@vue/compiler-dom": "3.2.6", - "@vue/runtime-dom": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/compiler-dom": "3.2.8", + "@vue/runtime-dom": "3.2.8", + "@vue/shared": "3.2.8" } }, "node_modules/vue-chart-3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/vue-chart-3/-/vue-chart-3-0.5.7.tgz", - "integrity": "sha512-BccfPv2rodY6IOppYHvMluVmIJE1CHfp5uW2DXrHrm1kIzaafLwpQ5SwdrxuCevn/QhKoi7azzcxwRcoWbX9hg==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/vue-chart-3/-/vue-chart-3-0.5.8.tgz", + "integrity": "sha512-VJEBTdMgWOaYqekXtz4LVBIeYyIx3qDlQnFyY4Ao1GwizokYZBycCeRN3oKDcYbbZi5yxYqTy6+Tm+m+SOPUPA==", "dependencies": { "@vue/runtime-core": "latest", "@vue/runtime-dom": "latest", @@ -7560,20 +7566,20 @@ "dev": true }, "@babel/core": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.0.tgz", - "integrity": "sha512-tXtmTminrze5HEUPn/a0JtOzzfp0nk+UEXQ/tqIJo3WDGypl/2OFQEMll/zSFU8f/lfmfLXvTaORHF3cfXIQMw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.4.tgz", + "integrity": "sha512-Lkcv9I4a8bgUI8LJOLM6IKv6hnz1KOju6KM1lceqVMKlKKqNRopYd2Pc9MgIurqvMJ6BooemrnJz8jlIiQIpsA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-compilation-targets": "^7.15.0", - "@babel/helper-module-transforms": "^7.15.0", - "@babel/helpers": "^7.14.8", - "@babel/parser": "^7.15.0", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/generator": "^7.15.4", + "@babel/helper-compilation-targets": "^7.15.4", + "@babel/helper-module-transforms": "^7.15.4", + "@babel/helpers": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -7609,9 +7615,9 @@ } }, "@babel/eslint-parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.0.tgz", - "integrity": "sha512-+gSPtjSBxOZz4Uh8Ggqu7HbfpB8cT1LwW0DnVVLZEJvzXauiD0Di3zszcBkRmfGGrLdYeHUwcflG7i3tr9kQlw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.15.4.tgz", + "integrity": "sha512-hPMIAmGNbmQzXJIo2P43Zj9UhRmGev5f9nqdBFOWNGDGh6XKmjby79woBvg6y0Jur6yRfQBneDbUQ8ZVc1krFw==", "dev": true, "requires": { "eslint-scope": "^5.1.1", @@ -7620,12 +7626,12 @@ } }, "@babel/generator": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.0.tgz", - "integrity": "sha512-eKl4XdMrbpYvuB505KTta4AV9g+wWzmVBW69tX0H2NwKVKd2YJbKgyK6M8j/rgLbmHOYJn6rUklV677nOyJrEQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.4.tgz", + "integrity": "sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==", "dev": true, "requires": { - "@babel/types": "^7.15.0", + "@babel/types": "^7.15.4", "jsesc": "^2.5.1", "source-map": "^0.5.0" }, @@ -7639,9 +7645,9 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.0.tgz", - "integrity": "sha512-h+/9t0ncd4jfZ8wsdAsoIxSa61qhBYlycXiHWqJaQBCXAhDCMbPRSMTGnZIkkmt1u4ag+UQmuqcILwqKzZ4N2A==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz", + "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==", "dev": true, "requires": { "@babel/compat-data": "^7.15.0", @@ -7651,105 +7657,105 @@ } }, "@babel/helper-function-name": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", - "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz", + "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.14.5", - "@babel/template": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/helper-get-function-arity": "^7.15.4", + "@babel/template": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-get-function-arity": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", - "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz", + "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-hoist-variables": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", - "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz", + "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz", - "integrity": "sha512-Jq8H8U2kYiafuj2xMTPQwkTBnEEdGKpT35lJEQsRRjnG0LW3neucsaMWLgKcwu3OHKNeYugfw+Z20BXBSEs2Lg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz", + "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==", "dev": true, "requires": { - "@babel/types": "^7.15.0" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-imports": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", - "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz", + "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-module-transforms": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz", - "integrity": "sha512-RkGiW5Rer7fpXv9m1B3iHIFDZdItnO2/BLfWVW/9q7+KqQSDY5kUfQEbzdXM1MVhJGcugKV7kRrNVzNxmk7NBg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz", + "integrity": "sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.14.5", - "@babel/helper-replace-supers": "^7.15.0", - "@babel/helper-simple-access": "^7.14.8", - "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-module-imports": "^7.15.4", + "@babel/helper-replace-supers": "^7.15.4", + "@babel/helper-simple-access": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", "@babel/helper-validator-identifier": "^7.14.9", - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-optimise-call-expression": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", - "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz", + "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-replace-supers": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.0.tgz", - "integrity": "sha512-6O+eWrhx+HEra/uJnifCwhwMd6Bp5+ZfZeJwbqUTuqkhIT6YcRhiZCOOFChRypOIe0cV46kFrRBlm+t5vHCEaA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz", + "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.15.0", - "@babel/helper-optimise-call-expression": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/helper-member-expression-to-functions": "^7.15.4", + "@babel/helper-optimise-call-expression": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/helper-simple-access": { - "version": "7.14.8", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz", - "integrity": "sha512-TrFN4RHh9gnWEU+s7JloIho2T76GPwRHhdzOWLqTrMnlas8T9O7ec+oEDNsRXndOmru9ymH9DFrEOxpzPoSbdg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz", + "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==", "dev": true, "requires": { - "@babel/types": "^7.14.8" + "@babel/types": "^7.15.4" } }, "@babel/helper-split-export-declaration": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", - "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz", + "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==", "dev": true, "requires": { - "@babel/types": "^7.14.5" + "@babel/types": "^7.15.4" } }, "@babel/helper-validator-identifier": { @@ -7764,14 +7770,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.3.tgz", - "integrity": "sha512-HwJiz52XaS96lX+28Tnbu31VeFSQJGOeKHJeaEPQlTl7PnlhFElWPj8tUXtqFIzeN86XxXoBr+WFAyK2PPVz6g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz", + "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==", "dev": true, "requires": { - "@babel/template": "^7.14.5", - "@babel/traverse": "^7.15.0", - "@babel/types": "^7.15.0" + "@babel/template": "^7.15.4", + "@babel/traverse": "^7.15.4", + "@babel/types": "^7.15.4" } }, "@babel/highlight": { @@ -7844,25 +7850,25 @@ } }, "@babel/parser": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.3.tgz", - "integrity": "sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==" + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.4.tgz", + "integrity": "sha512-xmzz+7fRpjrvDUj+GV7zfz/R3gSK2cOxGlazaXooxspCr539cbTXJKvBJzSVI2pPhcRGquoOtaIkKCsHQUiO3w==" }, "@babel/standalone": { - "version": "7.15.3", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.15.3.tgz", - "integrity": "sha512-Bst2YWEyQ2ROyO0+jxPVnnkSmUh44/x54+LSbe5M4N5LGfOkxpajEUKVE4ndXtIVrLlHCyuiqCPwv3eC1ItnCg==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.15.4.tgz", + "integrity": "sha512-UO0QCTFjX5NSuwX/i8+/pesmRPoRTtf46Cpn8VHcXvNinEr2lxqe8Ix10TfU/UK5qsaOrcKk24We8wH1G0nTZA==", "dev": true }, "@babel/template": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", - "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz", + "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/parser": "^7.14.5", - "@babel/types": "^7.14.5" + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4" }, "dependencies": { "@babel/code-frame": { @@ -7877,18 +7883,18 @@ } }, "@babel/traverse": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.0.tgz", - "integrity": "sha512-392d8BN0C9eVxVWd8H6x9WfipgVH5IaIoLp23334Sc1vbKKWINnvwRpb4us0xtPaCumlwbTtIYNA0Dv/32sVFw==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz", + "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==", "dev": true, "requires": { "@babel/code-frame": "^7.14.5", - "@babel/generator": "^7.15.0", - "@babel/helper-function-name": "^7.14.5", - "@babel/helper-hoist-variables": "^7.14.5", - "@babel/helper-split-export-declaration": "^7.14.5", - "@babel/parser": "^7.15.0", - "@babel/types": "^7.15.0", + "@babel/generator": "^7.15.4", + "@babel/helper-function-name": "^7.15.4", + "@babel/helper-hoist-variables": "^7.15.4", + "@babel/helper-split-export-declaration": "^7.15.4", + "@babel/parser": "^7.15.4", + "@babel/types": "^7.15.4", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -7911,9 +7917,9 @@ } }, "@babel/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.0.tgz", - "integrity": "sha512-OBvfqnllOIdX4ojTHpwZbpvz4j3EWyjkZEdmjH0/cgsd6QOdSgU8rLSk6ard/pcW7rlmjdVSX/AWOaORR1uNOQ==", + "version": "7.15.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.15.4.tgz", + "integrity": "sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==", "requires": { "@babel/helper-validator-identifier": "^7.14.9", "to-fast-properties": "^2.0.0" @@ -7968,8 +7974,7 @@ "@fortawesome/vue-fontawesome": { "version": "3.0.0-4", "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.0-4.tgz", - "integrity": "sha512-dQVhhMRcUPCb0aqk5ohm0KGk5OJ7wFZ9aYapLzJB3Z+xs7LhkRWLTb87reelUAG5PFDjutDAXuloT9hi6cz72A==", - "requires": {} + "integrity": "sha512-dQVhhMRcUPCb0aqk5ohm0KGk5OJ7wFZ9aYapLzJB3Z+xs7LhkRWLTb87reelUAG5PFDjutDAXuloT9hi6cz72A==" }, "@humanwhocodes/config-array": { "version": "0.5.0", @@ -8115,9 +8120,9 @@ } }, "@popperjs/core": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.9.3.tgz", - "integrity": "sha512-xDu17cEfh7Kid/d95kB6tZsLOmSWKCZKtprnhVepjsSaCij+lM3mItSJDuuHDMbCWTh8Ejmebwb+KONcCJ0eXQ==" + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz", + "integrity": "sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw==" }, "@stylelint/postcss-css-in-js": { "version": "0.37.2", @@ -8156,9 +8161,9 @@ } }, "@types/bootstrap": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.1.2.tgz", - "integrity": "sha512-dSQvMi2dMyNwJU6LZjP0pimuBowsMUvGScYdfqqeiDUoj9TxXZCpfu0cTl94U0Zvw/tdH9j/9ToOhi4LKNLZhg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.1.4.tgz", + "integrity": "sha512-VAY+o6sCKrJ7Xix/lugdvQz0PpOn7Go+fQzCXOZvIdp7E/TDaiJddInVhNB/84bk9NX6uuKFSfl2pqslNYH9aA==", "dev": true, "requires": { "@popperjs/core": "^2.9.2", @@ -8299,9 +8304,9 @@ "dev": true }, "@types/node": { - "version": "16.7.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.8.tgz", - "integrity": "sha512-8upnoQU0OPzbIkm+ZMM0zCeFCkw2s3mS0IWdx0+AAaWqm4fkBb0UJp8Edl7FVKRamYbpJC/aVsHpKWBIbiC7Zg==" + "version": "16.7.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.10.tgz", + "integrity": "sha512-S63Dlv4zIPb8x6MMTgDq5WWRJQe56iBEY0O3SOFA9JrRienkOVDXSXBjjJw6HTNQYSE2JI6GMCR6LVbIMHJVvA==" }, "@types/normalize-package-data": { "version": "2.4.1", @@ -8347,9 +8352,9 @@ "dev": true }, "@vitejs/plugin-legacy": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-1.5.1.tgz", - "integrity": "sha512-g+0iy0X3NJRUSKZK+OCeSxNWnCuuE/6lsmr2WLWPOEt1vp6LdfHuNCYRooCm6s0ccTZ/SiumVk8vt9DWSYs+8A==", + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-1.5.2.tgz", + "integrity": "sha512-b1CaWY/wi7gQZnZaxH+ujPTPb91bEPgnnk7l0WIwxoQtW5UC5MQywRcAbFX+Ise62exXctOMBtsnXKJw2KajXw==", "dev": true, "requires": { "@babel/standalone": "^7.14.9", @@ -8363,44 +8368,43 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-1.6.0.tgz", "integrity": "sha512-n3i8htn8pTg9M+kM3cnEfsPZx/6ngInlTroth6fA1LQTJq5aTVQ8ggaE5pPoAy9vCgHPtcaXMzwpldhqRAkebQ==", - "dev": true, - "requires": {} + "dev": true }, "@vue/compiler-core": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.6.tgz", - "integrity": "sha512-vbwnz7+OhtLO5p5i630fTuQCL+MlUpEMTKHuX+RfetQ+3pFCkItt2JUH+9yMaBG2Hkz6av+T9mwN/acvtIwpbw==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.8.tgz", + "integrity": "sha512-Sx8qJ030+QM/NakUrkQuUGCeDEb+0d0AgFOl5W4qRvR6e+YgLnW2ew0jREf4T1hak9Fdk8Edl67StECHrhEuew==", "requires": { "@babel/parser": "^7.15.0", "@babel/types": "^7.15.0", - "@vue/shared": "3.2.6", + "@vue/shared": "3.2.8", "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "@vue/compiler-dom": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.6.tgz", - "integrity": "sha512-+a/3oBAzFIXhHt8L5IHJOTP4a5egzvpXYyi13jR7CUYOR1S+Zzv7vBWKYBnKyJLwnrxTZnTQVjeHCgJq743XKg==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.8.tgz", + "integrity": "sha512-nxBW6k8FMWQ74294CRbqR+iEJRO5vIjx85I3YCOyZFD6FsDHyFL60g76TcJzucp+F2XXIDaYz+A+F4gQlDatjw==", "requires": { - "@vue/compiler-core": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/compiler-core": "3.2.8", + "@vue/shared": "3.2.8" } }, "@vue/compiler-sfc": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.6.tgz", - "integrity": "sha512-Ariz1eDsf+2fw6oWXVwnBNtfKHav72RjlWXpEgozYBLnfRPzP+7jhJRw4Nq0OjSsLx2HqjF3QX7HutTjYB0/eA==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.8.tgz", + "integrity": "sha512-XClueQAXoWtN2EToKgfYH9FCL70Ac4bxx6OZFZzxYSg1bei8IB9srJP1UOfnJb2IpnM1heikAz1dp1HI1wHcyQ==", "dev": true, "requires": { "@babel/parser": "^7.15.0", "@babel/types": "^7.15.0", "@types/estree": "^0.0.48", - "@vue/compiler-core": "3.2.6", - "@vue/compiler-dom": "3.2.6", - "@vue/compiler-ssr": "3.2.6", - "@vue/ref-transform": "3.2.6", - "@vue/shared": "3.2.6", + "@vue/compiler-core": "3.2.8", + "@vue/compiler-dom": "3.2.8", + "@vue/compiler-ssr": "3.2.8", + "@vue/ref-transform": "3.2.8", + "@vue/shared": "3.2.8", "consolidate": "^0.16.0", "estree-walker": "^2.0.2", "hash-sum": "^2.0.0", @@ -8414,13 +8418,13 @@ } }, "@vue/compiler-ssr": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.6.tgz", - "integrity": "sha512-A7IKRKHSyPnTC4w1FxHkjzoyjXInsXkcs/oX22nBQ+6AWlXj2Tt1le96CWPOXy5vYlsTYkF1IgfBaKIdeN/39g==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.8.tgz", + "integrity": "sha512-QqyiFRiIl55W0abDNQ6cNG/7iIfBHmbXVtssUAjX3IlI87ELeT0xackmrCyTSnfIX12ixljg9AN0COIZwlvt5A==", "dev": true, "requires": { - "@vue/compiler-dom": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/compiler-dom": "3.2.8", + "@vue/shared": "3.2.8" } }, "@vue/devtools-api": { @@ -8429,49 +8433,49 @@ "integrity": "sha512-quBx4Jjpexo6KDiNUGFr/zF/2A4srKM9S9v2uHgMXSU//hjgq1eGzqkIFql8T9gfX5ZaVOUzYBP3jIdIR3PKIA==" }, "@vue/reactivity": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.6.tgz", - "integrity": "sha512-8vIDD2wpCnYisNNZjmcIj+Rixn0uhZNY3G1vzlgdVdLygeRSuFjkmnZk6WwvGzUWpKfnG0e/NUySM3mVi59hAA==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.2.8.tgz", + "integrity": "sha512-/Hj3Uz28SG+xB5SDWPOXUs0emvHkq82EmTgk44/plTVFeswCZ3i3Hd7WmsrPT4rGajlDKd5uqMmW0ith1ED0FA==", "requires": { - "@vue/shared": "3.2.6" + "@vue/shared": "3.2.8" } }, "@vue/ref-transform": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.6.tgz", - "integrity": "sha512-ie39+Y4nbirDLvH+WEq6Eo/l3n3mFATayqR+kEMSphrtMW6Uh/eEMx1Gk2Jnf82zmj3VLRq7dnmPx72JLcBYkQ==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.8.tgz", + "integrity": "sha512-9LdADd4JM3klt+b2qNT8a7b7JvBETNBy2Btv5rDzyPrAVS4Vrw+1WWay6gZBgnxfJ9TPSvG8f/9zu6gNGHmJLA==", "dev": true, "requires": { "@babel/parser": "^7.15.0", - "@vue/compiler-core": "3.2.6", - "@vue/shared": "3.2.6", + "@vue/compiler-core": "3.2.8", + "@vue/shared": "3.2.8", "estree-walker": "^2.0.2", "magic-string": "^0.25.7" } }, "@vue/runtime-core": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.6.tgz", - "integrity": "sha512-3mqtgpj/YSGFxtvTufSERRApo92B16JNNxz9p+5eG6PPuqTmuRJz214MqhKBEgLEAIQ6R6YCbd83ZDtjQnyw2g==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.2.8.tgz", + "integrity": "sha512-hwzXLGw1njBEY5JSyRXIIdCtzMFFF6F38WcKMmoIE3p7da30jEbWt8EwwrBomjT8ZbqzElOGlewBcnXNOiiIUg==", "requires": { - "@vue/reactivity": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/reactivity": "3.2.8", + "@vue/shared": "3.2.8" } }, "@vue/runtime-dom": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.6.tgz", - "integrity": "sha512-fq33urnP0BNCGm2O3KCzkJlKIHI80C94HJ4qDZbjsTtxyOn5IHqwKSqXVN3RQvO6epcQH+sWS+JNwcNDPzoasg==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.2.8.tgz", + "integrity": "sha512-A/aRrlGLJ5y4Z7eNbnO/xHwx2RiPijQo7D3OIwESroG3HNP+dpuoqamajo5TXS9ZGjbMOih82COoe7xb9P4BZw==", "requires": { - "@vue/runtime-core": "3.2.6", - "@vue/shared": "3.2.6", + "@vue/runtime-core": "3.2.8", + "@vue/shared": "3.2.8", "csstype": "^2.6.8" } }, "@vue/shared": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.6.tgz", - "integrity": "sha512-uwX0Qs2e6kdF+WmxwuxJxOnKs/wEkMArtYpHSm7W+VY/23Tl8syMRyjnzEeXrNCAP0/8HZxEGkHJsjPEDNRuHw==" + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.8.tgz", + "integrity": "sha512-E2DQQnG7Qr4GwTs3GlfPPlHliGVADoufTnhpwfoViw7JlyLMmYtjfnTwM6nXAwvSJWiF7D+7AxpnWBBT3VWo6Q==" }, "abbrev": { "version": "1.1.1", @@ -8497,8 +8501,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "requires": {} + "dev": true }, "agent-base": { "version": "6.0.2", @@ -8557,9 +8560,9 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -8853,8 +8856,7 @@ "bootstrap": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.0.tgz", - "integrity": "sha512-bs74WNI9BgBo3cEovmdMHikSKoXnDgA6VQjJ7TyTotU6L7d41ZyCEEelPwkYEzsG/Zjv3ie9IE3EMAje0W9Xew==", - "requires": {} + "integrity": "sha512-bs74WNI9BgBo3cEovmdMHikSKoXnDgA6VQjJ7TyTotU6L7d41ZyCEEelPwkYEzsG/Zjv3ie9IE3EMAje0W9Xew==" }, "brace-expansion": { "version": "1.1.11", @@ -8968,8 +8970,7 @@ "chartjs-adapter-dayjs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/chartjs-adapter-dayjs/-/chartjs-adapter-dayjs-1.0.0.tgz", - "integrity": "sha512-EnbVqTJGFKLpg1TROLdCEufrzbmIa2oeLGx8O2Wdjw2EoMudoOo9+YFu+6CM0Z0hQ/v3yq/e/Y6efQMu22n8Jg==", - "requires": {} + "integrity": "sha512-EnbVqTJGFKLpg1TROLdCEufrzbmIa2oeLGx8O2Wdjw2EoMudoOo9+YFu+6CM0Z0hQ/v3yq/e/Y6efQMu22n8Jg==" }, "chokidar": { "version": "3.5.2", @@ -9107,15 +9108,15 @@ "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, "core-js": { - "version": "3.16.4", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.4.tgz", - "integrity": "sha512-Tq4GVE6XCjE+hcyW6hPy0ofN3hwtLudz5ZRdrlCnsnD/xkm/PWQRudzYHiKgZKUcefV6Q57fhDHjZHJP5dpfSg==", + "version": "3.17.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.17.2.tgz", + "integrity": "sha512-XkbXqhcXeMHPRk2ItS+zQYliAMilea2euoMsnpRRdDad6b2VY6CQQcwz1K8AnWesfw4p165RzY0bTnr3UrbYiA==", "dev": true }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cors": { "version": "2.8.5", @@ -9335,9 +9336,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.824", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.824.tgz", - "integrity": "sha512-Fk+5aD0HDi9i9ZKt9n2VPOZO1dQy7PV++hz2wJ/KIn+CvVfu4fny39squHtyVDPuHNuoJGAZIbuReEklqYIqfA==", + "version": "1.3.830", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.830.tgz", + "integrity": "sha512-gBN7wNAxV5vl1430dG+XRcQhD4pIeYeak6p6rjdCtlz5wWNwDad8jwvphe5oi1chL5MV6RNRikfffBBiFuj+rQ==", "dev": true }, "emoji-regex": { @@ -9434,9 +9435,9 @@ } }, "esbuild": { - "version": "0.12.24", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.24.tgz", - "integrity": "sha512-C0ibY+HsXzYB6L/pLWEiWjMpghKsIc58Q5yumARwBQsHl9DXPakW+5NI/Y9w4YXiz0PEP6XTGTT/OV4Nnsmb4A==", + "version": "0.12.25", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.25.tgz", + "integrity": "sha512-woie0PosbRSoN8gQytrdCzUbS2ByKgO8nD1xCZkEup3D9q92miCze4PqEI9TZDYAuwn6CruEnQpJxgTRWdooAg==", "dev": true }, "escalade": { @@ -9861,9 +9862,9 @@ "dev": true }, "follow-redirects": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.2.tgz", - "integrity": "sha512-yLR6WaE2lbF0x4K2qE2p9PEXKLDjUjnR/xmjS3wHAYxtlsI9MLLBJUZirAHKzUZDGLxje7w/cXR49WOUo4rbsA==" + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.3.tgz", + "integrity": "sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==" }, "forever-agent": { "version": "0.6.1", @@ -10261,8 +10262,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true, - "requires": {} + "dev": true }, "ignore": { "version": "4.0.6", @@ -10584,9 +10584,9 @@ "dev": true }, "knex": { - "version": "0.95.10", - "resolved": "https://registry.npmjs.org/knex/-/knex-0.95.10.tgz", - "integrity": "sha512-I60A8TXcMdeJlE6h7DSgEYyY37S7kgLObz1qlJ7QvPMD6vnKO5dtuLEht5pMia9Qf5BomqVgkWCdVTqcC/ImOA==", + "version": "0.95.11", + "resolved": "https://registry.npmjs.org/knex/-/knex-0.95.11.tgz", + "integrity": "sha512-grDetD91O8VoQVCFqeWTgkzdq5406W6rggF/lK1hHuwzmjDs/0m9KxyncGdZbklTi7aUgHvw3+Cfy4x7FvpdaQ==", "requires": { "colorette": "1.2.1", "commander": "^7.1.0", @@ -11463,8 +11463,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true, - "requires": {} + "dev": true }, "postcss-modules-local-by-default": { "version": "4.0.0", @@ -11783,8 +11782,7 @@ "version": "0.36.2", "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", - "dev": true, - "requires": {} + "dev": true }, "postcss-value-parser": { "version": "4.1.0", @@ -12002,9 +12000,9 @@ }, "dependencies": { "@types/node": { - "version": "14.17.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.12.tgz", - "integrity": "sha512-vhUqgjJR1qxwTWV5Ps5txuy2XMdf7Fw+OrdChRboy8BmWUPkckOhphaohzFG6b8DW7CrxaBMdrdJ47SYFq1okw==" + "version": "14.17.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.14.tgz", + "integrity": "sha512-rsAj2u8Xkqfc332iXV12SqIsjVi07H479bOP4q94NAcjzmAvapumEhuVIt53koEf7JFrpjgNKjBga5Pnn/GL8A==" } } }, @@ -12176,9 +12174,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass": { - "version": "1.38.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.38.2.tgz", - "integrity": "sha512-Bz1fG6qiyF0FX6m/I+VxtdVKz1Dfmg/e9kfDy2PhWOkq3T384q2KxwIfP0fXpeI+EyyETdOauH+cRHQDFASllA==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.39.0.tgz", + "integrity": "sha512-F4o+RhJkNOIG0b6QudYU8c78ZADKZjKDk5cyrf8XTKWfrgbtyVVXImFstJrc+1pkQDCggyidIOytq6gS4gCCZg==", "dev": true, "requires": { "chokidar": ">=3.0.0 <4.0.0" @@ -12680,8 +12678,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-5.0.0.tgz", "integrity": "sha512-c8aubuARSu5A3vEHLBeOSJt1udOdS+1iue7BmJDTSXoCBmfEQmmWX+59vYIj3NQdJBY6a/QRv1ozVFpaB9jaqA==", - "dev": true, - "requires": {} + "dev": true }, "stylelint-config-standard": { "version": "22.0.0", @@ -13113,6 +13110,14 @@ "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" + }, + "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "optional": true + } } }, "vfile": { @@ -13138,9 +13143,9 @@ } }, "vite": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.2.tgz", - "integrity": "sha512-JK5uhiVyMqHiAJbgBa8rCvpP8bEhAE9dKDv1gCmP+EUP2FSPmEeW3WXlCXauPB3MDa8behPW+ntyNXqnGaxslg==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.5.3.tgz", + "integrity": "sha512-1wMDnjflvtTTkMov8O/Xb5+w1/VW/Gw8oCf8f6dqgHn8lMOEqq0SaPtFEQeikFcOKCfSbiU0nEi0LDIx6DNsaQ==", "dev": true, "requires": { "esbuild": "^0.12.17", @@ -13151,19 +13156,19 @@ } }, "vue": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.6.tgz", - "integrity": "sha512-Zlb3LMemQS3Xxa6xPsecu45bNjr1hxO8Bh5FUmE0Dr6Ot0znZBKiM47rK6O7FTcakxOnvVN+NTXWJF6u8ajpCQ==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.2.8.tgz", + "integrity": "sha512-x7lwdnOSkceHQUXRVVHBaZzcp6v7M2CYtSZH75zZaT1mTjB4plC4KZHKP/5jAvdqOLBHZGwDSMkWXm3YbAufrA==", "requires": { - "@vue/compiler-dom": "3.2.6", - "@vue/runtime-dom": "3.2.6", - "@vue/shared": "3.2.6" + "@vue/compiler-dom": "3.2.8", + "@vue/runtime-dom": "3.2.8", + "@vue/shared": "3.2.8" } }, "vue-chart-3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/vue-chart-3/-/vue-chart-3-0.5.7.tgz", - "integrity": "sha512-BccfPv2rodY6IOppYHvMluVmIJE1CHfp5uW2DXrHrm1kIzaafLwpQ5SwdrxuCevn/QhKoi7azzcxwRcoWbX9hg==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/vue-chart-3/-/vue-chart-3-0.5.8.tgz", + "integrity": "sha512-VJEBTdMgWOaYqekXtz4LVBIeYyIx3qDlQnFyY4Ao1GwizokYZBycCeRN3oKDcYbbZi5yxYqTy6+Tm+m+SOPUPA==", "requires": { "@vue/runtime-core": "latest", "@vue/runtime-dom": "latest", @@ -13176,14 +13181,12 @@ "vue-confirm-dialog": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/vue-confirm-dialog/-/vue-confirm-dialog-1.0.2.tgz", - "integrity": "sha512-gTo1bMDWOLd/6ihmWv8VlPxhc9QaKoE5YqlsKydUOfrrQ3Q3taljF6yI+1TMtAtJLrvZ8DYrePhgBhY1VCJzbQ==", - "requires": {} + "integrity": "sha512-gTo1bMDWOLd/6ihmWv8VlPxhc9QaKoE5YqlsKydUOfrrQ3Q3taljF6yI+1TMtAtJLrvZ8DYrePhgBhY1VCJzbQ==" }, "vue-demi": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.10.1.tgz", - "integrity": "sha512-L6Oi+BvmMv6YXvqv5rJNCFHEKSVu7llpWWJczqmAQYOdmPPw5PNYoz1KKS//Fxhi+4QP64dsPjtmvnYGo1jemA==", - "requires": {} + "integrity": "sha512-L6Oi+BvmMv6YXvqv5rJNCFHEKSVu7llpWWJczqmAQYOdmPPw5PNYoz1KKS//Fxhi+4QP64dsPjtmvnYGo1jemA==" }, "vue-eslint-parser": { "version": "7.10.0", @@ -13246,8 +13249,7 @@ "vue-toastification": { "version": "2.0.0-rc.1", "resolved": "https://registry.npmjs.org/vue-toastification/-/vue-toastification-2.0.0-rc.1.tgz", - "integrity": "sha512-hjauv/FyesNZdwcr5m1SCyvu1JmlB+Ts5bTptDLDmsYYlj6Oqv8NYakiElpCF+Abwkn9J/AChh6FwkTL1HOb7Q==", - "requires": {} + "integrity": "sha512-hjauv/FyesNZdwcr5m1SCyvu1JmlB+Ts5bTptDLDmsYYlj6Oqv8NYakiElpCF+Abwkn9J/AChh6FwkTL1HOb7Q==" }, "which": { "version": "2.0.2", @@ -13292,8 +13294,7 @@ "ws": { "version": "7.4.6", "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "requires": {} + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==" }, "xmlhttprequest-ssl": { "version": "2.0.0", diff --git a/package.json b/package.json index f503bbf5..43d0b635 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "sqlite3": "github:mapbox/node-sqlite3#593c9d", "tcp-ping": "^0.1.1", "v-pagination-3": "^0.1.6", - "vue": "^3.2.6", + "vue": "^3.2.8", "vue-chart-3": "^0.5.7", "vue-confirm-dialog": "^1.0.2", "vue-i18n": "^9.1.7", From 7fd12f54859ce33277e57f31c5ce18592e0443a5 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 4 Sep 2021 14:42:55 +0800 Subject: [PATCH 12/49] rename nl_NL.js to nl-NL.js --- src/languages/{nl_NL.js => nl-NL.js} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/languages/{nl_NL.js => nl-NL.js} (100%) diff --git a/src/languages/nl_NL.js b/src/languages/nl-NL.js similarity index 100% rename from src/languages/nl_NL.js rename to src/languages/nl-NL.js From 4b8e7fcffcfc9080a1c59f152bad16dd25b060b7 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 4 Sep 2021 15:03:26 +0800 Subject: [PATCH 13/49] update "build-docker" to build both platforms --- extra/update-version.js | 2 ++ package.json | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/extra/update-version.js b/extra/update-version.js index 697a6401..ca810a40 100644 --- a/extra/update-version.js +++ b/extra/update-version.js @@ -23,6 +23,8 @@ if (! exists) { pkg.version = newVersion; pkg.scripts.setup = pkg.scripts.setup.replaceAll(oldVersion, newVersion); pkg.scripts["build-docker"] = pkg.scripts["build-docker"].replaceAll(oldVersion, newVersion); + pkg.scripts["build-docker-alpine"] = pkg.scripts["build-docker-alpine"].replaceAll(oldVersion, newVersion); + pkg.scripts["build-docker-debian"] = pkg.scripts["build-docker-debian"].replaceAll(oldVersion, newVersion); fs.writeFileSync("package.json", JSON.stringify(pkg, null, 4) + "\n"); commit(newVersion); diff --git a/package.json b/package.json index 43d0b635..1bf9a890 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,11 @@ "start-server": "node server/server.js", "build": "vite build", "vite-preview-dist": "vite preview --host", - "build-docker": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.5.2 --target release . --push", + "build-docker": "npm run build-docker-alpine && npm run build-docker-debian", + "build-docker-alpine": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.5.2 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.5.2-alpine --target release . --push", + "build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.5.2-debian --target release . --push", "build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", "build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", - "build-docker-1.5.0-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:1.5.0-debian --target release . --push", "setup": "git checkout 1.5.2 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune", "update-version": "node extra/update-version.js", "mark-as-nightly": "node extra/mark-as-nightly.js", From 6a603203ccf1ea766e1b3c9a3945b6ff0e5e60b4 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 4 Sep 2021 15:07:32 +0800 Subject: [PATCH 14/49] update to 1.5.3 --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 1bf9a890..1cfd01c5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "uptime-kuma", - "version": "1.5.2", + "version": "1.5.3", "license": "MIT", "repository": { "type": "git", @@ -19,11 +19,11 @@ "build": "vite build", "vite-preview-dist": "vite preview --host", "build-docker": "npm run build-docker-alpine && npm run build-docker-debian", - "build-docker-alpine": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.5.2 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.5.2-alpine --target release . --push", - "build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.5.2-debian --target release . --push", + "build-docker-alpine": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.5.3 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.5.3-alpine --target release . --push", + "build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.5.3-debian --target release . --push", "build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", "build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", - "setup": "git checkout 1.5.2 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune", + "setup": "git checkout 1.5.3 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune", "update-version": "node extra/update-version.js", "mark-as-nightly": "node extra/mark-as-nightly.js", "reset-password": "node extra/reset-password.js", From ee60d7491015b4fcbdb249f7e082e475ae29f99b Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 4 Sep 2021 15:32:55 +0800 Subject: [PATCH 15/49] fix dockerfile path --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1cfd01c5..8bb96290 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,7 @@ "vite-preview-dist": "vite preview --host", "build-docker": "npm run build-docker-alpine && npm run build-docker-debian", "build-docker-alpine": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma -t louislam/uptime-kuma:1 -t louislam/uptime-kuma:1.5.3 -t louislam/uptime-kuma:alpine -t louislam/uptime-kuma:1-alpine -t louislam/uptime-kuma:1.5.3-alpine --target release . --push", - "build-docker-debian": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.5.3-debian --target release . --push", + "build-docker-debian": "docker buildx build -f dockerfile-debian --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:debian -t louislam/uptime-kuma:1-debian -t louislam/uptime-kuma:1.5.3-debian --target release . --push", "build-docker-nightly": "docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t louislam/uptime-kuma:nightly --target nightly . --push", "build-docker-nightly-amd64": "docker buildx build --platform linux/amd64 -t louislam/uptime-kuma:nightly-amd64 --target nightly . --push --progress plain", "setup": "git checkout 1.5.3 && npm install --legacy-peer-deps && node node_modules/esbuild/install.js && npm run build && npm prune", From 778995a4fba33b66ea73c190f002e5618405c87d Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 4 Sep 2021 15:48:25 +0800 Subject: [PATCH 16/49] add dockerfile-debian --- dockerfile-debian | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 dockerfile-debian diff --git a/dockerfile-debian b/dockerfile-debian new file mode 100644 index 00000000..7e0f7989 --- /dev/null +++ b/dockerfile-debian @@ -0,0 +1,28 @@ +# DON'T UPDATE TO alpine3.13, 1.14, see #41. +FROM node:14-bullseye AS release +WORKDIR /app + +RUN apt update +RUN apt --yes install python3 python3-pip python3-dev git g++ make +RUN ln -s /usr/bin/python3 /usr/bin/python + +# split the sqlite install here, so that it can caches the arm prebuilt +RUN npm install mapbox/node-sqlite3#593c9d + +# Install apprise +RUN apt --yes install python3 python3-pip python3-cryptography python3-six python3-yaml python3-click python3-markdown python3-requests python3-requests-oauthlib +RUN pip3 --no-cache-dir install apprise && \ + rm -rf /root/.cache + +RUN apt --yes install iputils-ping + +COPY . . +RUN npm install --legacy-peer-deps && npm run build && npm prune + +EXPOSE 3001 +VOLUME ["/app/data"] +HEALTHCHECK --interval=60s --timeout=30s --start-period=300s CMD node extra/healthcheck.js +CMD ["node", "server/server.js"] + +FROM release AS nightly +RUN npm run mark-as-nightly From 0b9e410ea5b6edcc888ddd488d19a36ca011abf8 Mon Sep 17 00:00:00 2001 From: Ponkhy Date: Sat, 4 Sep 2021 13:36:08 +0200 Subject: [PATCH 17/49] Added i18n key to en.js --- src/languages/en.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/languages/en.js b/src/languages/en.js index accc6dcc..bec4edf2 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -111,5 +111,8 @@ export default { "Create your admin account": "Create your admin account", "Repeat Password": "Repeat Password", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + "Clear Data": "Clear Data", + "Events": "Events", + "Heartbeats": "Heartbeats", } From 41d32bb9dde554794613df002696841d6dceab1f Mon Sep 17 00:00:00 2001 From: Domenic Horner Date: Sat, 4 Sep 2021 20:08:18 +0800 Subject: [PATCH 18/49] Undo parm changes --- server/model/monitor.js | 11 ++++++++++- server/notification.js | 14 +------------- server/server.js | 2 +- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/server/model/monitor.js b/server/model/monitor.js index 126d59b1..19f21d92 100644 --- a/server/model/monitor.js +++ b/server/model/monitor.js @@ -270,9 +270,18 @@ class Monitor extends BeanModel { this.id, ]) + let text; + if (bean.status === UP) { + text = "✅ Up" + } else { + text = "🔴 Down" + } + + let msg = `[${this.name}] [${text}] ${bean.msg}`; + for (let notification of notificationList) { try { - await Notification.send(JSON.parse(notification.config), this.name, await this.toJSON(), bean.toJSON()) + await Notification.send(JSON.parse(notification.config), msg, await this.toJSON(), bean.toJSON()) } catch (e) { console.error("Cannot send notification to " + notification.name); console.log(e); diff --git a/server/notification.js b/server/notification.js index beb1ff9d..f78401d9 100644 --- a/server/notification.js +++ b/server/notification.js @@ -17,21 +17,9 @@ class Notification { * @returns {Promise} Successful msg * Throw Error with fail msg */ - static async send(notification, monitorName = null, monitorJSON = null, heartbeatJSON = null) { + static async send(notification, msg, monitorJSON = null, heartbeatJSON = null) { let okMsg = "Sent Successfully. "; - let msg = `[${notification.name}] Testing`; - // heartbeatJSON is only defined if we're not testing - if(heartbeatJSON) { - let text; - if (heartbeatJSON["status"] === UP) { - text = "✅ Up" - } else { - text = "🔴 Down" - } - msg = `[${monitorName}] [${text}] ${heartbeatJSON["msg"]}`; - } - if (notification.type === "telegram") { try { await axios.get(`https://api.telegram.org/bot${notification.telegramBotToken}/sendMessage`, { diff --git a/server/server.js b/server/server.js index 8f4516dc..39191de7 100644 --- a/server/server.js +++ b/server/server.js @@ -552,7 +552,7 @@ let indexHTML = fs.readFileSync("./dist/index.html").toString(); try { checkLogin(socket) - let msg = await Notification.send(notification) + let msg = await Notification.send(notification, notification.name + " Testing") callback({ ok: true, From 2a34e41d8c47ec2739cae0590ee891747a102b22 Mon Sep 17 00:00:00 2001 From: Levi Date: Sat, 4 Sep 2021 15:59:49 +0200 Subject: [PATCH 19/49] Improved Swedish translation --- src/languages/sv-SE.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/languages/sv-SE.js b/src/languages/sv-SE.js index 50296889..751a4063 100644 --- a/src/languages/sv-SE.js +++ b/src/languages/sv-SE.js @@ -1,14 +1,14 @@ export default { - languageName: "Swedish", + languageName: "Svenska", checkEverySecond: "Uppdatera var {0} sekund.", - "Avg.": "Genomsnitt ", + "Avg.": "Genomsnittligt ", retriesDescription: "Max antal försök innan tjänsten markeras som nere och en notis skickas", ignoreTLSError: "Ignorera TLS/SSL-fel för webbsidor med HTTPS", upsideDownModeDescription: "Vänd upp och ner på statusen. Om tjänsten är nåbar visas den som NERE.", maxRedirectDescription: "Max antal omdirigeringar att följa. Välj 0 för att avaktivera omdirigeringar.", acceptedStatusCodesDescription: "Välj statuskoder som räknas som lyckade.", passwordNotMatchMsg: "Det bekräftade lösenordet stämmer ej överens.", - notificationDescription: "Vänligen lägg till en notistjänst till övervakaren.", + notificationDescription: "Vänligen lägg till en notistjänst till dina övervakare.", keywordDescription: "Sök efter nyckelord i ren HTML eller JSON-svar. Sökningen är skiftkänslig.", pauseDashboardHome: "Pausa", deleteMonitorMsg: "Är du säker på att du vill ta bort den här övervakningen?", @@ -36,7 +36,7 @@ export default { Pause: "Paus", Name: "Namn", Status: "Status", - DateTime: "DatumTid", + DateTime: "Datum & Tid", Message: "Meddelande", "No important events": "Inga viktiga händelser", Resume: "Återuppta", @@ -44,17 +44,17 @@ export default { Delete: "Ta bort", Current: "Nuvarande", Uptime: "Drifttid", - "Cert Exp.": "Certifikatsutgång", + "Cert Exp.": "Certifikat utgår", days: "dagar", day: "dag", - "-day": "-dag", + "-day": " dagar", hour: "timme", - "-hour": "-timme", + "-hour": " timmar", Response: "Svar", Ping: "Ping", "Monitor Type": "Övervakningstyp", Keyword: "Nyckelord", - "Friendly Name": "Vänligt Namn", + "Friendly Name": "Namn", URL: "URL", Hostname: "Värdnamn", Port: "Port", @@ -67,14 +67,14 @@ export default { Save: "Spara", Notifications: "Notiser", "Not available, please setup.": "Ej tillgänglig, vänligen konfigurera.", - "Setup Notification": "Konfigurera Notis", + "Setup Notification": "Ny Notistjänst", Light: "Ljust", Dark: "Mörkt", - Auto: "Automatisk", + Auto: "Automatiskt", "Theme - Heartbeat Bar": "Tema - Heartbeat Bar", Normal: "Normal", Bottom: "Botten", - None: "Ingen", + None: "Tomt", Timezone: "Tidszon", "Search Engine Visibility": "Synlighet på Sökmotorer", "Allow indexing": "Tillåt indexering", From d35b205fcc41be66a654085c01698656c9ce5443 Mon Sep 17 00:00:00 2001 From: Levi Date: Sat, 4 Sep 2021 16:01:41 +0200 Subject: [PATCH 20/49] Update & Improve Swedish Translation --- src/languages/sv-SE.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/languages/sv-SE.js b/src/languages/sv-SE.js index 751a4063..276a3a36 100644 --- a/src/languages/sv-SE.js +++ b/src/languages/sv-SE.js @@ -107,6 +107,6 @@ export default { "Last Result": "Senaste resultat", "Create your admin account": "Skapa ditt administratörskonto", "Repeat Password": "Upprepa Lösenord", - respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + respTime: "Svarstid (ms)", + notAvailableShort: "Ej Tillg." } From f1a151b4a1e1b3aaadb7b035eda938833117bd06 Mon Sep 17 00:00:00 2001 From: Levi Date: Sat, 4 Sep 2021 16:03:34 +0200 Subject: [PATCH 21/49] Update & Improve Swedish Translation --- src/languages/sv-SE.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/sv-SE.js b/src/languages/sv-SE.js index 276a3a36..8aa4e155 100644 --- a/src/languages/sv-SE.js +++ b/src/languages/sv-SE.js @@ -33,7 +33,7 @@ export default { Down: "Nere", Pending: "Pågående", Unknown: "Okänt", - Pause: "Paus", + Pause: "Pausa", Name: "Namn", Status: "Status", DateTime: "Datum & Tid", From cc25787878c37655ea6ce0cfe4d4fb1e3f224252 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sat, 4 Sep 2021 23:32:46 +0800 Subject: [PATCH 22/49] improve heartbeat bar rendering in different dpi --- src/components/HeartbeatBar.vue | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/components/HeartbeatBar.vue b/src/components/HeartbeatBar.vue index 33b003db..f49b8756 100644 --- a/src/components/HeartbeatBar.vue +++ b/src/components/HeartbeatBar.vue @@ -124,9 +124,27 @@ export default { }, mounted() { if (this.size === "small") { - this.beatWidth = 5.6; - this.beatMargin = 2.4; - this.beatHeight = 16 + this.beatHeight = 16; + + // Handle strange render problem in different DPI. + if (window.devicePixelRatio === 1.25) { + this.beatWidth = 5.6; + this.beatMargin = 2.4; + + } else if (window.devicePixelRatio === 1.75) { + this.beatWidth = 5.7; + this.beatMargin = 2.4; + + } else if (window.devicePixelRatio === 2.25) { + this.beatWidth = 5.8; + this.beatMargin = 2.4; + + } else { + // 100%, 150%, 200% ... + this.beatWidth = 6; + this.beatMargin = 2; + } + } window.addEventListener("resize", this.resize); From ffbdf97478d72496b9ae235b8de35a9ac751cf93 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 5 Sep 2021 00:08:24 +0800 Subject: [PATCH 23/49] improve heartbeat bar rendering in different dpi --- src/components/HeartbeatBar.vue | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/components/HeartbeatBar.vue b/src/components/HeartbeatBar.vue index f49b8756..04d046bd 100644 --- a/src/components/HeartbeatBar.vue +++ b/src/components/HeartbeatBar.vue @@ -31,7 +31,7 @@ export default { beatWidth: 10, beatHeight: 30, hoverScale: 1.5, - beatMargin: 3, // Odd number only, even = blurry + beatMargin: 4, move: false, maxBeat: -1, } @@ -122,29 +122,26 @@ export default { this.$root.heartbeatList[this.monitorId] = []; } }, + mounted() { if (this.size === "small") { + this.beatWidth = 5; this.beatHeight = 16; + this.beatMargin = 2; + } - // Handle strange render problem in different DPI. - if (window.devicePixelRatio === 1.25) { - this.beatWidth = 5.6; - this.beatMargin = 2.4; + // Suddenly, have an idea how to handle it universally. + // If the pixel * ratio != Integer, then it causes render issue, round it to solve it!! + const actualWidth = this.beatWidth * window.devicePixelRatio; + const actualMargin = this.beatMargin * window.devicePixelRatio; - } else if (window.devicePixelRatio === 1.75) { - this.beatWidth = 5.7; - this.beatMargin = 2.4; - - } else if (window.devicePixelRatio === 2.25) { - this.beatWidth = 5.8; - this.beatMargin = 2.4; - - } else { - // 100%, 150%, 200% ... - this.beatWidth = 6; - this.beatMargin = 2; - } + if (! Number.isInteger(actualWidth)) { + this.beatWidth = Math.round(actualWidth) / window.devicePixelRatio; + console.log(this.beatWidth); + } + if (! Number.isInteger(actualMargin)) { + this.beatMargin = Math.round(actualMargin) / window.devicePixelRatio; } window.addEventListener("resize", this.resize); From 299506ce45d64956b064528b30e4fa4cbea806fd Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 5 Sep 2021 02:03:40 +0800 Subject: [PATCH 24/49] reset the heartbeat list instead of reload the page after cleared events or heartbeats --- server/client.js | 91 +++++++++++++++++++++++++++++++++++++++++++ server/server.js | 72 +++++----------------------------- src/mixins/socket.js | 8 ++-- src/pages/Details.vue | 11 ++---- 4 files changed, 109 insertions(+), 73 deletions(-) create mode 100644 server/client.js diff --git a/server/client.js b/server/client.js new file mode 100644 index 00000000..4f28a2fa --- /dev/null +++ b/server/client.js @@ -0,0 +1,91 @@ +/* + * For Client Socket + */ +const { TimeLogger } = require("../src/util"); +const { R } = require("redbean-node"); +const { io } = require("./server"); + +async function sendNotificationList(socket) { + const timeLogger = new TimeLogger(); + + let result = []; + let list = await R.find("notification", " user_id = ? ", [ + socket.userID, + ]); + + for (let bean of list) { + result.push(bean.export()) + } + + io.to(socket.userID).emit("notificationList", result) + + timeLogger.print("Send Notification List"); + + return list; +} + +/** + * Send Heartbeat History list to socket + * @param toUser True = send to all browsers with the same user id, False = send to the current browser only + * @param overwrite Overwrite client-side's heartbeat list + */ +async function sendHeartbeatList(socket, monitorID, toUser = false, overwrite = false) { + const timeLogger = new TimeLogger(); + + let list = await R.find("heartbeat", ` + monitor_id = ? + ORDER BY time DESC + LIMIT 100 + `, [ + monitorID, + ]) + + let result = []; + + for (let bean of list) { + result.unshift(bean.toJSON()); + } + + if (toUser) { + io.to(socket.userID).emit("heartbeatList", monitorID, result, overwrite); + } else { + socket.emit("heartbeatList", monitorID, result, overwrite); + } + + timeLogger.print(`[Monitor: ${monitorID}] sendHeartbeatList`); +} + +/** + * Important Heart beat list (aka event list) + * @param socket + * @param monitorID + * @param toUser True = send to all browsers with the same user id, False = send to the current browser only + * @param overwrite Overwrite client-side's heartbeat list + */ +async function sendImportantHeartbeatList(socket, monitorID, toUser = false, overwrite = false) { + const timeLogger = new TimeLogger(); + + let list = await R.find("heartbeat", ` + monitor_id = ? + AND important = 1 + ORDER BY time DESC + LIMIT 500 + `, [ + monitorID, + ]) + + timeLogger.print(`[Monitor: ${monitorID}] sendImportantHeartbeatList`); + + if (toUser) { + io.to(socket.userID).emit("importantHeartbeatList", monitorID, list, overwrite); + } else { + socket.emit("importantHeartbeatList", monitorID, list, overwrite); + } + +} + +module.exports = { + sendNotificationList, + sendImportantHeartbeatList, + sendHeartbeatList, +} diff --git a/server/server.js b/server/server.js index e28b96d8..7d929535 100644 --- a/server/server.js +++ b/server/server.js @@ -82,7 +82,12 @@ if (sslKey && sslCert) { } const io = new Server(server); -app.use(express.json()) +module.exports.io = io; + +// Must be after io instantiation +const { sendNotificationList, sendHeartbeatList, sendImportantHeartbeatList } = require("./client"); + +app.use(express.json()); /** * Total WebSocket client connected to server currently, no actual use @@ -597,6 +602,8 @@ let indexHTML = fs.readFileSync("./dist/index.html").toString(); monitorID, ]); + await sendImportantHeartbeatList(socket, monitorID, true, true); + callback({ ok: true, }); @@ -619,6 +626,8 @@ let indexHTML = fs.readFileSync("./dist/index.html").toString(); monitorID ]); + await sendHeartbeatList(socket, monitorID, true, true); + callback({ ok: true, }); @@ -719,25 +728,6 @@ async function sendMonitorList(socket) { return list; } -async function sendNotificationList(socket) { - const timeLogger = new TimeLogger(); - - let result = []; - let list = await R.find("notification", " user_id = ? ", [ - socket.userID, - ]); - - for (let bean of list) { - result.push(bean.export()) - } - - io.to(socket.userID).emit("notificationList", result) - - timeLogger.print("Send Notification List"); - - return list; -} - async function afterLogin(socket, user) { socket.userID = user.id; socket.join(user.id) @@ -872,48 +862,6 @@ async function startMonitors() { } } -/** - * Send Heartbeat History list to socket - */ -async function sendHeartbeatList(socket, monitorID) { - const timeLogger = new TimeLogger(); - - let list = await R.find("heartbeat", ` - monitor_id = ? - ORDER BY time DESC - LIMIT 100 - `, [ - monitorID, - ]) - - let result = []; - - for (let bean of list) { - result.unshift(bean.toJSON()) - } - - socket.emit("heartbeatList", monitorID, result) - - timeLogger.print(`[Monitor: ${monitorID}] sendHeartbeatList`) -} - -async function sendImportantHeartbeatList(socket, monitorID) { - const timeLogger = new TimeLogger(); - - let list = await R.find("heartbeat", ` - monitor_id = ? - AND important = 1 - ORDER BY time DESC - LIMIT 500 - `, [ - monitorID, - ]) - - timeLogger.print(`[Monitor: ${monitorID}] sendImportantHeartbeatList`); - - socket.emit("importantHeartbeatList", monitorID, list) -} - async function shutdownFunction(signal) { console.log("Shutdown requested"); console.log("Called signal: " + signal); diff --git a/src/mixins/socket.js b/src/mixins/socket.js index 64560ea7..672027fa 100644 --- a/src/mixins/socket.js +++ b/src/mixins/socket.js @@ -107,8 +107,8 @@ export default { } }); - socket.on("heartbeatList", (monitorID, data) => { - if (! (monitorID in this.heartbeatList)) { + socket.on("heartbeatList", (monitorID, data, overwrite = false) => { + if (! (monitorID in this.heartbeatList) || overwrite) { this.heartbeatList[monitorID] = data; } else { this.heartbeatList[monitorID] = data.concat(this.heartbeatList[monitorID]) @@ -127,8 +127,8 @@ export default { this.certInfoList[monitorID] = JSON.parse(data) }); - socket.on("importantHeartbeatList", (monitorID, data) => { - if (! (monitorID in this.importantHeartbeatList)) { + socket.on("importantHeartbeatList", (monitorID, data, overwrite) => { + if (! (monitorID in this.importantHeartbeatList) || overwrite) { this.importantHeartbeatList[monitorID] = data; } else { this.importantHeartbeatList[monitorID] = data.concat(this.importantHeartbeatList[monitorID]) diff --git a/src/pages/Details.vue b/src/pages/Details.vue index d30885f4..776f1c1d 100644 --- a/src/pages/Details.vue +++ b/src/pages/Details.vue @@ -276,6 +276,7 @@ export default { importantHeartBeatList() { if (this.$root.importantHeartbeatList[this.monitor.id]) { + // eslint-disable-next-line vue/no-side-effects-in-computed-properties this.heartBeatList = this.$root.importantHeartbeatList[this.monitor.id]; return this.$root.importantHeartbeatList[this.monitor.id] } @@ -359,9 +360,7 @@ export default { clearEvents() { this.$root.clearEvents(this.monitor.id, (res) => { - if (res.ok) { - this.$router.go(); - } else { + if (! res.ok) { toast.error(res.msg); } }) @@ -369,9 +368,7 @@ export default { clearHeartbeats() { this.$root.clearHeartbeats(this.monitor.id, (res) => { - if (res.ok) { - this.$router.go(); - } else { + if (! res.ok) { toast.error(res.msg); } }) @@ -495,7 +492,7 @@ table { border-color: $dark-bg2; border-width: 2px; - li button{ + li button { color: $dark-font-color; } From d5b32ffbb8cb91834a6c3a37bb3a3c9c76d6e71f Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 5 Sep 2021 02:25:40 +0800 Subject: [PATCH 25/49] add language missing keys --- src/languages/da-DK.js | 8 +++++++- src/languages/de-DE.js | 4 ++-- src/languages/en.js | 4 ++-- src/languages/es-ES.js | 8 +++++++- src/languages/fr.js | 8 +++++++- src/languages/ja.js | 8 +++++++- src/languages/ko-KR.js | 8 +++++++- src/languages/nl-NL.js | 8 +++++++- src/languages/ru-RU.js | 8 +++++++- src/languages/sr-latn.js | 8 +++++++- src/languages/sr.js | 8 +++++++- src/languages/sv-SE.js | 8 +++++++- src/languages/zh-CN.js | 8 +++++++- src/languages/zh-HK.js | 8 +++++++- 14 files changed, 88 insertions(+), 16 deletions(-) diff --git a/src/languages/da-DK.js b/src/languages/da-DK.js index 713eecfe..1f4f74fa 100644 --- a/src/languages/da-DK.js +++ b/src/languages/da-DK.js @@ -108,5 +108,11 @@ export default { "Repeat Password": "Gentag adgangskoden", "Resource Record Type": "Resource Record Type", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js index 9d51d438..0db25023 100644 --- a/src/languages/de-DE.js +++ b/src/languages/de-DE.js @@ -107,8 +107,8 @@ export default { clearEventsMsg: "Bist du sicher das du alle Ereignisse für diesen Monitor löschen möchtest?", clearHeartbeatsMsg: "Bist du sicher das du alle Statistiken für diesen Monitor löschen möchtest?", "Clear Data": "Lösche Daten", - "Events": "Ereignisse", - "Heartbeats": "Statistiken", + Events: "Ereignisse", + Heartbeats: "Statistiken", confirmClearStatisticsMsg: "Bist du sicher das du ALLE Statistiken löschen möchtest?", "Create your admin account": "Erstelle dein Admin Konto", "Repeat Password": "Wiederhole das Passwort", diff --git a/src/languages/en.js b/src/languages/en.js index bec4edf2..58089b9e 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -113,6 +113,6 @@ export default { respTime: "Resp. Time (ms)", notAvailableShort: "N/A", "Clear Data": "Clear Data", - "Events": "Events", - "Heartbeats": "Heartbeats", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/es-ES.js b/src/languages/es-ES.js index 96ce923e..0f118327 100644 --- a/src/languages/es-ES.js +++ b/src/languages/es-ES.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Crea tu cuenta de administrador", "Repeat Password": "Repetir contraseña", respTime: "Tiempo de resp. (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/fr.js b/src/languages/fr.js index e4f999dc..7bfb4f9d 100644 --- a/src/languages/fr.js +++ b/src/languages/fr.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Créez votre compte administrateur", "Repeat Password": "Répéter le mot de passe", respTime: "Temps de réponse (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/ja.js b/src/languages/ja.js index 23de640c..86c5b203 100644 --- a/src/languages/ja.js +++ b/src/languages/ja.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Create your admin account", "Repeat Password": "Repeat Password", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/ko-KR.js b/src/languages/ko-KR.js index 8493193c..4a3c84a4 100644 --- a/src/languages/ko-KR.js +++ b/src/languages/ko-KR.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "관리자 계정 만들기", "Repeat Password": "비밀번호 재입력", respTime: "응답 시간 (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/nl-NL.js b/src/languages/nl-NL.js index 60c5089c..24e72910 100644 --- a/src/languages/nl-NL.js +++ b/src/languages/nl-NL.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Maak uw beheerdersaccount aan", "Repeat Password": "Herhaal wachtwoord", respTime: "resp. tijd (ms)", - notAvailableShort: "N.v.t." + notAvailableShort: "N.v.t.", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/ru-RU.js b/src/languages/ru-RU.js index f42f9c25..f2c7a0ee 100644 --- a/src/languages/ru-RU.js +++ b/src/languages/ru-RU.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Создайте аккаунт администратора", "Repeat Password": "Повторите пароль", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/sr-latn.js b/src/languages/sr-latn.js index aa7d95cf..60a90d85 100644 --- a/src/languages/sr-latn.js +++ b/src/languages/sr-latn.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Naprivi administratorski nalog", "Repeat Password": "Ponovite lozinku", respTime: "Vreme odg. (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/sr.js b/src/languages/sr.js index 0bd08403..dfcee7ce 100644 --- a/src/languages/sr.js +++ b/src/languages/sr.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Наприви администраторски налог", "Repeat Password": "Поновите лозинку", respTime: "Време одг. (мс)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/sv-SE.js b/src/languages/sv-SE.js index 8aa4e155..dc76babd 100644 --- a/src/languages/sv-SE.js +++ b/src/languages/sv-SE.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "Skapa ditt administratörskonto", "Repeat Password": "Upprepa Lösenord", respTime: "Svarstid (ms)", - notAvailableShort: "Ej Tillg." + notAvailableShort: "Ej Tillg.", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/zh-CN.js b/src/languages/zh-CN.js index d179a91a..d04eabdf 100644 --- a/src/languages/zh-CN.js +++ b/src/languages/zh-CN.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "创建管理员账号", "Repeat Password": "重复密码", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "Are you sure want to delete all events for this monitor?", + clearHeartbeatsMsg: "Are you sure want to delete all heartbeats for this monitor?", + confirmClearStatisticsMsg: "Are you sure want to delete ALL statistics?", + "Clear Data": "Clear Data", + Events: "Events", + Heartbeats: "Heartbeats" } diff --git a/src/languages/zh-HK.js b/src/languages/zh-HK.js index 4bcc5029..39532dfe 100644 --- a/src/languages/zh-HK.js +++ b/src/languages/zh-HK.js @@ -108,5 +108,11 @@ export default { "Create your admin account": "製作你的管理員帳號", "Repeat Password": "重複密碼", respTime: "反應時間 (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + clearEventsMsg: "是否確定刪除這個監測器的所有事件?", + clearHeartbeatsMsg: "是否確定刪除這個監測器的所有脈搏資料?", + confirmClearStatisticsMsg: "是否確定刪除所有監測器的脈搏資料?(您的監測器會繼續正常運作)", + "Clear Data": "清除資料", + Events: "事件", + Heartbeats: "脈搏" } From 5837c353b7689c573f03fe843ccc007f872e1335 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Sun, 5 Sep 2021 02:47:31 +0800 Subject: [PATCH 26/49] change the default theme to auto from light --- src/mixins/theme.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mixins/theme.js b/src/mixins/theme.js index 44e37532..b149e111 100644 --- a/src/mixins/theme.js +++ b/src/mixins/theme.js @@ -11,7 +11,7 @@ export default { mounted() { // Default Light if (! this.userTheme) { - this.userTheme = "light"; + this.userTheme = "auto"; } // Default Heartbeat Bar From 9952463350907aaf03ab9d944876145b4c96bc47 Mon Sep 17 00:00:00 2001 From: Misly <60405462+Misly16@users.noreply.github.com> Date: Sat, 4 Sep 2021 20:38:53 +0000 Subject: [PATCH 27/49] Add Polish Locale --- src/languages/pl.js | 112 +++++++++++++++++++++++++++++++++++++++++ src/main.js | 2 + src/pages/Settings.vue | 5 ++ 3 files changed, 119 insertions(+) create mode 100644 src/languages/pl.js diff --git a/src/languages/pl.js b/src/languages/pl.js new file mode 100644 index 00000000..9e16011b --- /dev/null +++ b/src/languages/pl.js @@ -0,0 +1,112 @@ +export default { + languageName: "Polski", + checkEverySecond: "sprawdzaj co {0} sekund.", + "Avg.": "Średnia. ", + retriesDescription: "Maksymalna liczba ponownych prób, zanim usługa zostanie oznaczona jako offline i zostanie wysłane powiadomienie.", + ignoreTLSError: "Ignoruj błąd TLS/SSL dla stron HTTPS.", + upsideDownModeDescription: "Odwróć status do góry nogami. Jeśli usługa jest osiągalna, to jest niedostępna.", + maxRedirectDescription: "Maksymalna liczba przekierowań do naśladowania. Ustaw na 0, aby wyłączyć przekierowania.", + acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za udaną odpowiedź.", + passwordNotMatchMsg: "Powtórzone hasło nie jest takie samo.", + notificationDescription: "Dodaj powiadomienie do monitorów, aby one działały.", + keywordDescription: "Wyszukaj słowo kluczowe w html lub JSON i wielkość liter ma znaczenie.", + pauseDashboardHome: "pauza", + deleteMonitorMsg: "Czy na pewno chcesz usunąć ten monitor?", + deleteNotificationMsg: "Czy na pewno chcesz usunąć to powiadomienie ze wszystkich monitorów?", + resoverserverDescription: "Cloudflare jest domyślnym serwerem, możesz zmienić serwer resolver w dowolnym momencie.", + rrtypeDescription: "Wybierz typ RR-Type który chcesz monitorować.", + pauseMonitorMsg: "Czy na pewno chcesz wstrzymać?", + Settings: "Ustawienia", + Dashboard: "Panel", + "New Update": "Nowa aktualizacja", + Language: "Język", + Appearance: "Wygląd", + Theme: "Motyw", + General: "Ogólne", + Version: "Versja", + "Check Update On GitHub": "Sprawdź aktualizację na GitHub.", + List: "Lista", + Add: "Dodaj", + "Add New Monitor": "Dodaj Nowy Monitor", + "Quick Stats": "Szybkie statystyki", + Up: "Online", + Down: "Offline", + Pending: "Oczekujący", + Unknown: "Nieznane", + Pause: "Pauza", + Name: "Nazwa", + Status: "Status", + DateTime: "Data i godzina", + Message: "Wiadomość", + "No important events": "Brak ważnych wydarzeń.", + Resume: "Wznów", + Edit: "Edytuj", + Delete: "Usuń", + Current: "aktualny", + Uptime: "czas pracy", + "Cert Exp.": "Wygaśnięcie certyfikatu.", + days: "dni", + day: "dzień", + "-day": "-dzień", + hour: "godzina", + "-hour": "-godzina", + Response: "odpowiedź", + Ping: "Ping", + "Monitor Type": "Typ monitora", + Keyword: "słowo kluczowe", + "Friendly Name": "Przyjazne imię", + URL: "URL", + Hostname: "Hostname", + Port: "Port", + "Heartbeat Interval": "Interwał bicia serca", + Retries: "Prób", + Advanced: "Zaawansowane", + "Upside Down Mode": "Tryb do góry nogami", + "Max. Redirects": "Maks. Przekierowania", + "Accepted Status Codes": "Akceptowane kody statusu", + Save: "Zapisz", + Notifications: "Powiadomienia", + "Not available, please setup.": "Niedostępne, proszę skonfigurować.", + "Setup Notification": "Powiadomienie konfiguracji", + Light: "Jasny", + Dark: "Ciemny", + Auto: "Automatyczny", + "Theme - Heartbeat Bar": "Motyw - pasek bicia serca", + Normal: "Normalne", + Bottom: "Na dole", + None: "Nic", + Timezone: "Strefa czasowa", + "Search Engine Visibility": "Widoczność w wyszukiwarce", + "Allow indexing": "Zezwól na indeksowanie", + "Discourage search engines from indexing site": "Zniechęcaj wyszukiwarki do indeksowania strony", + "Change Password": "Zmień hasło", + "Current Password": "Aktualne hasło", + "New Password": "Nowe hasło", + "Repeat New Password": "Powtórz nowe hasło", + "Update Password": "Zaktualizuj hasło", + "Disable Auth": "Wyłącz autoryzację", + "Enable Auth": "Włącz autoryzację ", + Logout: "Wyloguj się", + Leave: "Opuść", + "I understand, please disable": "Rozumiem, proszę wyłączyć", + Confirm: "Potwierdź", + Yes: "Tak", + No: "Nie", + Username: "Nazwa użytkownika", + Password: "Hasło", + "Remember me": "Zapamiętaj mnie", + Login: "Zaloguj sie", + "No Monitors, please": "Proszę bez monitorów", + "add one": "dodaj jeden", + "Notification Type": "Typ powiadomienia", + Email: "Email", + Test: "Test", + "Certificate Info": "Informacje o certyfikacie", + "Resolver Server": "Server resolver", + "Resource Record Type": "Typ rekordu zasobów", + "Last Result": "Ostatni rekord", + "Create your admin account": "Utwórz swoje konto administratora", + "Repeat Password": "Powtórz hasło", + respTime: "Odp. Czas (ms)", + notAvailableShort: "N/A" +} diff --git a/src/main.js b/src/main.js index 8f5e0a91..7ad9db08 100644 --- a/src/main.js +++ b/src/main.js @@ -37,6 +37,7 @@ import svSE from "./languages/sv-SE"; import koKR from "./languages/ko-KR"; import ruRU from "./languages/ru-RU"; import zhCN from "./languages/zh-CN"; +import pl from "./languages/pl" const routes = [ { @@ -114,6 +115,7 @@ const languageList = { "ko-KR": koKR, "ru-RU": ruRU, "zh-CN": zhCN, + "pl": pl, }; const i18n = createI18n({ diff --git a/src/pages/Settings.vue b/src/pages/Settings.vue index 70564213..83384ca8 100644 --- a/src/pages/Settings.vue +++ b/src/pages/Settings.vue @@ -213,6 +213,11 @@

이 기능은 Cloudflare Access와 같은 서드파티 인증을 Uptime Kuma 앞에 둔 사용자를 위한 기능이에요.

신중하게 사용하세요.

+ From 1b8b33c4c3e585b002570bf903d883f6ca42cb1e Mon Sep 17 00:00:00 2001 From: Ponkhy Date: Sun, 5 Sep 2021 15:40:35 +0200 Subject: [PATCH 28/49] Added set language to the Setup.vue --- src/languages/de-DE.js | 3 ++- src/languages/en.js | 3 ++- src/pages/Setup.vue | 16 +++++++++++++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/languages/de-DE.js b/src/languages/de-DE.js index 76c355a3..1f8eb055 100644 --- a/src/languages/de-DE.js +++ b/src/languages/de-DE.js @@ -108,5 +108,6 @@ export default { "Repeat Password": "Wiederhole das Passwort", "Resource Record Type": "Resource Record Type", respTime: "Antw. Zeit (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Erstellen", } diff --git a/src/languages/en.js b/src/languages/en.js index f0e4ae96..6a4f5e2f 100644 --- a/src/languages/en.js +++ b/src/languages/en.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Create your admin account", "Repeat Password": "Repeat Password", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create", } diff --git a/src/pages/Setup.vue b/src/pages/Setup.vue index 756aff36..dbff8683 100644 --- a/src/pages/Setup.vue +++ b/src/pages/Setup.vue @@ -14,6 +14,15 @@

+ + +
+ +
@@ -29,7 +38,7 @@ @@ -49,6 +58,11 @@ export default { repeatPassword: "", } }, + watch: { + "$i18n.locale"() { + localStorage.locale = this.$i18n.locale; + }, + }, mounted() { this.$root.getSocket().emit("needSetup", (needSetup) => { if (! needSetup) { From 899b33b3a966017a17cd5e3c45c5044fa4554015 Mon Sep 17 00:00:00 2001 From: LouisLam Date: Mon, 6 Sep 2021 01:31:05 +0800 Subject: [PATCH 29/49] add language missing keys --- src/languages/da-DK.js | 3 ++- src/languages/es-ES.js | 3 ++- src/languages/fr.js | 3 ++- src/languages/ja.js | 3 ++- src/languages/ko-KR.js | 3 ++- src/languages/nl-NL.js | 3 ++- src/languages/pl.js | 3 ++- src/languages/ru-RU.js | 3 ++- src/languages/sr-latn.js | 3 ++- src/languages/sr.js | 3 ++- src/languages/sv-SE.js | 3 ++- src/languages/zh-CN.js | 3 ++- src/languages/zh-HK.js | 3 ++- 13 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/languages/da-DK.js b/src/languages/da-DK.js index 713eecfe..050f31e4 100644 --- a/src/languages/da-DK.js +++ b/src/languages/da-DK.js @@ -108,5 +108,6 @@ export default { "Repeat Password": "Gentag adgangskoden", "Resource Record Type": "Resource Record Type", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/es-ES.js b/src/languages/es-ES.js index 96ce923e..4079991e 100644 --- a/src/languages/es-ES.js +++ b/src/languages/es-ES.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Crea tu cuenta de administrador", "Repeat Password": "Repetir contraseña", respTime: "Tiempo de resp. (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/fr.js b/src/languages/fr.js index e4f999dc..4019b74d 100644 --- a/src/languages/fr.js +++ b/src/languages/fr.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Créez votre compte administrateur", "Repeat Password": "Répéter le mot de passe", respTime: "Temps de réponse (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/ja.js b/src/languages/ja.js index 23de640c..51181cdf 100644 --- a/src/languages/ja.js +++ b/src/languages/ja.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Create your admin account", "Repeat Password": "Repeat Password", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/ko-KR.js b/src/languages/ko-KR.js index 8493193c..49a510f6 100644 --- a/src/languages/ko-KR.js +++ b/src/languages/ko-KR.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "관리자 계정 만들기", "Repeat Password": "비밀번호 재입력", respTime: "응답 시간 (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/nl-NL.js b/src/languages/nl-NL.js index 60c5089c..0ab73bb9 100644 --- a/src/languages/nl-NL.js +++ b/src/languages/nl-NL.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Maak uw beheerdersaccount aan", "Repeat Password": "Herhaal wachtwoord", respTime: "resp. tijd (ms)", - notAvailableShort: "N.v.t." + notAvailableShort: "N.v.t.", + Create: "Create" } diff --git a/src/languages/pl.js b/src/languages/pl.js index 9e16011b..25f76430 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Utwórz swoje konto administratora", "Repeat Password": "Powtórz hasło", respTime: "Odp. Czas (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/ru-RU.js b/src/languages/ru-RU.js index f42f9c25..96f6efab 100644 --- a/src/languages/ru-RU.js +++ b/src/languages/ru-RU.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Создайте аккаунт администратора", "Repeat Password": "Повторите пароль", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/sr-latn.js b/src/languages/sr-latn.js index aa7d95cf..defc7821 100644 --- a/src/languages/sr-latn.js +++ b/src/languages/sr-latn.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Naprivi administratorski nalog", "Repeat Password": "Ponovite lozinku", respTime: "Vreme odg. (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/sr.js b/src/languages/sr.js index 0bd08403..d333210f 100644 --- a/src/languages/sr.js +++ b/src/languages/sr.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Наприви администраторски налог", "Repeat Password": "Поновите лозинку", respTime: "Време одг. (мс)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/sv-SE.js b/src/languages/sv-SE.js index 8aa4e155..d0015432 100644 --- a/src/languages/sv-SE.js +++ b/src/languages/sv-SE.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "Skapa ditt administratörskonto", "Repeat Password": "Upprepa Lösenord", respTime: "Svarstid (ms)", - notAvailableShort: "Ej Tillg." + notAvailableShort: "Ej Tillg.", + Create: "Create" } diff --git a/src/languages/zh-CN.js b/src/languages/zh-CN.js index d179a91a..e47bd70a 100644 --- a/src/languages/zh-CN.js +++ b/src/languages/zh-CN.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "创建管理员账号", "Repeat Password": "重复密码", respTime: "Resp. Time (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "Create" } diff --git a/src/languages/zh-HK.js b/src/languages/zh-HK.js index 4bcc5029..6dfc726e 100644 --- a/src/languages/zh-HK.js +++ b/src/languages/zh-HK.js @@ -108,5 +108,6 @@ export default { "Create your admin account": "製作你的管理員帳號", "Repeat Password": "重複密碼", respTime: "反應時間 (ms)", - notAvailableShort: "N/A" + notAvailableShort: "N/A", + Create: "建立" } From d4ff5d8b325571ebf4fe518bc09b9ac30cd51a95 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Sun, 5 Sep 2021 20:55:25 +0200 Subject: [PATCH 30/49] [LANG] `pl` fixes --- src/languages/pl.js | 66 ++++++++++++++++++++++----------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/src/languages/pl.js b/src/languages/pl.js index 25f76430..c95a1d6b 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -1,20 +1,20 @@ export default { languageName: "Polski", - checkEverySecond: "sprawdzaj co {0} sekund.", - "Avg.": "Średnia. ", - retriesDescription: "Maksymalna liczba ponownych prób, zanim usługa zostanie oznaczona jako offline i zostanie wysłane powiadomienie.", - ignoreTLSError: "Ignoruj błąd TLS/SSL dla stron HTTPS.", + checkEverySecond: "Sprawdzaj co {0} sekund.", + "Avg.": "Średnia ", + retriesDescription: "Maksymalna liczba powtórzeń, zanim usługa zostanie oznaczona jako wyłączona i zostanie wysłane powiadomienie", + ignoreTLSError: "Ignoruj błąd TLS/SSL dla stron HTTPS", upsideDownModeDescription: "Odwróć status do góry nogami. Jeśli usługa jest osiągalna, to jest niedostępna.", - maxRedirectDescription: "Maksymalna liczba przekierowań do naśladowania. Ustaw na 0, aby wyłączyć przekierowania.", + maxRedirectDescription: "Maksymalna liczba przekierowań do wykonania. Ustaw na 0, aby wyłączyć przekierowania.", acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za udaną odpowiedź.", - passwordNotMatchMsg: "Powtórzone hasło nie jest takie samo.", - notificationDescription: "Dodaj powiadomienie do monitorów, aby one działały.", - keywordDescription: "Wyszukaj słowo kluczowe w html lub JSON i wielkość liter ma znaczenie.", - pauseDashboardHome: "pauza", + passwordNotMatchMsg: "Powtórzone hasło nie pasuje.", + notificationDescription: "Proszę przypisać powiadomienie do monitora(ów), aby zadziałał.", + keywordDescription: "Wyszukiwanie słów kluczowych w zwykłym html lub odpowiedzi JSON. Wielkość liter ma znaczenie.", + pauseDashboardHome: "Pauza", deleteMonitorMsg: "Czy na pewno chcesz usunąć ten monitor?", - deleteNotificationMsg: "Czy na pewno chcesz usunąć to powiadomienie ze wszystkich monitorów?", - resoverserverDescription: "Cloudflare jest domyślnym serwerem, możesz zmienić serwer resolver w dowolnym momencie.", - rrtypeDescription: "Wybierz typ RR-Type który chcesz monitorować.", + deleteNotificationMsg: "Czy na pewno chcesz usunąć to powiadomienie dla wszystkich monitorów?", + resoverserverDescription: "Cloudflare jest domyślnym serwerem, możesz zmienić serwer resolver w każdej chwili.", + rrtypeDescription: "Wybierz RR-Type który chcesz monitorować", pauseMonitorMsg: "Czy na pewno chcesz wstrzymać?", Settings: "Ustawienia", Dashboard: "Panel", @@ -23,11 +23,11 @@ export default { Appearance: "Wygląd", Theme: "Motyw", General: "Ogólne", - Version: "Versja", + Version: "Wersja", "Check Update On GitHub": "Sprawdź aktualizację na GitHub.", List: "Lista", Add: "Dodaj", - "Add New Monitor": "Dodaj Nowy Monitor", + "Add New Monitor": "Dodaj nowy monitor", "Quick Stats": "Szybkie statystyki", Up: "Online", Down: "Offline", @@ -38,46 +38,46 @@ export default { Status: "Status", DateTime: "Data i godzina", Message: "Wiadomość", - "No important events": "Brak ważnych wydarzeń.", + "No important events": "Brak ważnych wydarzeń", Resume: "Wznów", Edit: "Edytuj", Delete: "Usuń", Current: "aktualny", - Uptime: "czas pracy", - "Cert Exp.": "Wygaśnięcie certyfikatu.", + Uptime: "Czas pracy", + "Cert Exp.": "Wygaśnięcie certyfikatu", days: "dni", day: "dzień", - "-day": "-dzień", + "-day": " dni", hour: "godzina", - "-hour": "-godzina", - Response: "odpowiedź", + "-hour": " godziny", + Response: "Odpowiedź", Ping: "Ping", "Monitor Type": "Typ monitora", - Keyword: "słowo kluczowe", - "Friendly Name": "Przyjazne imię", + Keyword: "Słowo kluczowe", + "Friendly Name": "Przyjazna nazwa", URL: "URL", - Hostname: "Hostname", + Hostname: "Nazwa hosta", Port: "Port", "Heartbeat Interval": "Interwał bicia serca", Retries: "Prób", Advanced: "Zaawansowane", "Upside Down Mode": "Tryb do góry nogami", - "Max. Redirects": "Maks. Przekierowania", + "Max. Redirects": "Maks. przekierowania", "Accepted Status Codes": "Akceptowane kody statusu", Save: "Zapisz", Notifications: "Powiadomienia", "Not available, please setup.": "Niedostępne, proszę skonfigurować.", - "Setup Notification": "Powiadomienie konfiguracji", + "Setup Notification": "Konfiguracja powiadomień", Light: "Jasny", Dark: "Ciemny", Auto: "Automatyczny", "Theme - Heartbeat Bar": "Motyw - pasek bicia serca", Normal: "Normalne", Bottom: "Na dole", - None: "Nic", + None: "Brak", Timezone: "Strefa czasowa", "Search Engine Visibility": "Widoczność w wyszukiwarce", - "Allow indexing": "Zezwól na indeksowanie", + "Allow indexing": "Pozwól na indeksowanie", "Discourage search engines from indexing site": "Zniechęcaj wyszukiwarki do indeksowania strony", "Change Password": "Zmień hasło", "Current Password": "Aktualne hasło", @@ -87,7 +87,7 @@ export default { "Disable Auth": "Wyłącz autoryzację", "Enable Auth": "Włącz autoryzację ", Logout: "Wyloguj się", - Leave: "Opuść", + Leave: "Zostaw", "I understand, please disable": "Rozumiem, proszę wyłączyć", Confirm: "Potwierdź", Yes: "Tak", @@ -95,8 +95,8 @@ export default { Username: "Nazwa użytkownika", Password: "Hasło", "Remember me": "Zapamiętaj mnie", - Login: "Zaloguj sie", - "No Monitors, please": "Proszę bez monitorów", + Login: "Zaloguj się", + "No Monitors, please": "Brak monitorów, proszę", "add one": "dodaj jeden", "Notification Type": "Typ powiadomienia", Email: "Email", @@ -104,10 +104,10 @@ export default { "Certificate Info": "Informacje o certyfikacie", "Resolver Server": "Server resolver", "Resource Record Type": "Typ rekordu zasobów", - "Last Result": "Ostatni rekord", + "Last Result": "Ostatni wynik", "Create your admin account": "Utwórz swoje konto administratora", "Repeat Password": "Powtórz hasło", - respTime: "Odp. Czas (ms)", + respTime: "Czas odp. (ms)", notAvailableShort: "N/A", - Create: "Create" + Create: "Stwórz" } From 424f20f8e125dd3cdfdfba2da5eff6fb5e523958 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Sun, 5 Sep 2021 20:59:04 +0200 Subject: [PATCH 31/49] Better `upsideDownModeDescription` --- src/languages/pl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/pl.js b/src/languages/pl.js index c95a1d6b..f416d508 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -4,7 +4,7 @@ export default { "Avg.": "Średnia ", retriesDescription: "Maksymalna liczba powtórzeń, zanim usługa zostanie oznaczona jako wyłączona i zostanie wysłane powiadomienie", ignoreTLSError: "Ignoruj błąd TLS/SSL dla stron HTTPS", - upsideDownModeDescription: "Odwróć status do góry nogami. Jeśli usługa jest osiągalna, to jest niedostępna.", + upsideDownModeDescription: "Odwróć status do góry nogami. Jeśli usługa jest osiągalna, to jest oznaczona jako niedostępna.", maxRedirectDescription: "Maksymalna liczba przekierowań do wykonania. Ustaw na 0, aby wyłączyć przekierowania.", acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za udaną odpowiedź.", passwordNotMatchMsg: "Powtórzone hasło nie pasuje.", From dcc77991083da699be4e5f8e7ea8d1a2f7c5f0ac Mon Sep 17 00:00:00 2001 From: Minvinea Date: Sun, 5 Sep 2021 21:34:32 +0200 Subject: [PATCH 32/49] Update few words and name of file https://prnt.sc/1rbosiy --- src/languages/{fr.js => fr-FR.js} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/languages/{fr.js => fr-FR.js} (99%) diff --git a/src/languages/fr.js b/src/languages/fr-FR.js similarity index 99% rename from src/languages/fr.js rename to src/languages/fr-FR.js index 4019b74d..d49d0191 100644 --- a/src/languages/fr.js +++ b/src/languages/fr-FR.js @@ -66,7 +66,7 @@ export default { "Theme - Heartbeat Bar": "Voir les services surveillés", Normal: "Général", Bottom: "En dessous", - None: "Non", + None: "Rien", Timezone: "Fuseau Horaire", "Search Engine Visibility": "Visibilité par les moteurs de recherche", "Allow indexing": "Autoriser l'indexation par des moteurs de recherche", @@ -109,5 +109,5 @@ export default { "Repeat Password": "Répéter le mot de passe", respTime: "Temps de réponse (ms)", notAvailableShort: "N/A", - Create: "Create" + Create: "Créer" } From e8b814733d4ec8a9e7dea1bf688d487d9ab16643 Mon Sep 17 00:00:00 2001 From: Adam Stachowicz Date: Sun, 5 Sep 2021 23:14:56 +0200 Subject: [PATCH 33/49] Fix typo --- src/languages/pl.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/pl.js b/src/languages/pl.js index f416d508..cc625d6d 100644 --- a/src/languages/pl.js +++ b/src/languages/pl.js @@ -8,7 +8,7 @@ export default { maxRedirectDescription: "Maksymalna liczba przekierowań do wykonania. Ustaw na 0, aby wyłączyć przekierowania.", acceptedStatusCodesDescription: "Wybierz kody stanu, które są uważane za udaną odpowiedź.", passwordNotMatchMsg: "Powtórzone hasło nie pasuje.", - notificationDescription: "Proszę przypisać powiadomienie do monitora(ów), aby zadziałał.", + notificationDescription: "Proszę przypisać powiadomienie do monitora(ów), aby zadziałało.", keywordDescription: "Wyszukiwanie słów kluczowych w zwykłym html lub odpowiedzi JSON. Wielkość liter ma znaczenie.", pauseDashboardHome: "Pauza", deleteMonitorMsg: "Czy na pewno chcesz usunąć ten monitor?", From 1197cfa11e923c658902ddd0281fce2725bb3456 Mon Sep 17 00:00:00 2001 From: Minvinea Date: Sun, 5 Sep 2021 23:37:26 +0200 Subject: [PATCH 34/49] Update file name --- src/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.js b/src/main.js index 7ad9db08..e8bc92bf 100644 --- a/src/main.js +++ b/src/main.js @@ -28,7 +28,7 @@ import zhHK from "./languages/zh-HK"; import deDE from "./languages/de-DE"; import nlNL from "./languages/nl-NL"; import esEs from "./languages/es-ES"; -import fr from "./languages/fr"; +import frFR from "./languages/fr-FR"; import ja from "./languages/ja"; import daDK from "./languages/da-DK"; import sr from "./languages/sr"; From 31648dc5e8cf322f76b18841652f0042787e0b73 Mon Sep 17 00:00:00 2001 From: Minvinea Date: Sun, 5 Sep 2021 23:41:57 +0200 Subject: [PATCH 35/49] Update #2 --- src/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.js b/src/main.js index e8bc92bf..f34e9c43 100644 --- a/src/main.js +++ b/src/main.js @@ -106,7 +106,7 @@ const languageList = { "de-DE": deDE, "nl-NL": nlNL, "es-ES": esEs, - "fr": fr, + "fr-FR": frFR, "ja": ja, "da-DK": daDK, "sr": sr, From edfaacbb5f07232eca182136e13d08838d12feba Mon Sep 17 00:00:00 2001 From: Ponkhy Date: Tue, 7 Sep 2021 02:24:02 +0200 Subject: [PATCH 36/49] Added component HiddenInput.vue --- src/components/HiddenInput.vue | 59 ++++++++++++++++++++++++++++++++++ src/icon.js | 4 +-- 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 src/components/HiddenInput.vue diff --git a/src/components/HiddenInput.vue b/src/components/HiddenInput.vue new file mode 100644 index 00000000..5b2b77ae --- /dev/null +++ b/src/components/HiddenInput.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/icon.js b/src/icon.js index 960fa8c1..58583f0f 100644 --- a/src/icon.js +++ b/src/icon.js @@ -1,10 +1,10 @@ import { library } from "@fortawesome/fontawesome-svg-core" -import { faCog, faEdit, faPlus, faPause, faPlay, faTachometerAlt, faTrash, faList, faArrowAltCircleUp } from "@fortawesome/free-solid-svg-icons" +import { faCog, faEdit, faPlus, faPause, faPlay, faTachometerAlt, faTrash, faList, faArrowAltCircleUp, faEye, faEyeSlash } from "@fortawesome/free-solid-svg-icons" //import { fa } from '@fortawesome/free-regular-svg-icons' import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome" // Add Free Font Awesome Icons here // https://fontawesome.com/v5.15/icons?d=gallery&p=2&s=solid&m=free -library.add(faCog, faEdit, faPlus, faPause, faPlay, faTachometerAlt, faTrash, faList, faArrowAltCircleUp); +library.add(faCog, faEdit, faPlus, faPause, faPlay, faTachometerAlt, faTrash, faList, faArrowAltCircleUp, faEye, faEyeSlash); export { FontAwesomeIcon } From 848296b77a0877dd71c2b06f1e5fa07dd5f1f6d1 Mon Sep 17 00:00:00 2001 From: Ponkhy Date: Tue, 7 Sep 2021 02:30:53 +0200 Subject: [PATCH 37/49] Changed input for sensitive data to HiddenInput --- src/components/NotificationDialog.vue | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/components/NotificationDialog.vue b/src/components/NotificationDialog.vue index 2fdb8fe1..8a79dba5 100644 --- a/src/components/NotificationDialog.vue +++ b/src/components/NotificationDialog.vue @@ -40,7 +40,7 @@