diff --git a/CHANGELOG.md b/CHANGELOG.md index e6175037c..cd605a3d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,71 @@ # Changelog All notable changes to Mainsail will be documented in this file. +## [2.11.2](https://github.com/mainsail-crew/mainsail/releases/tag/v2.11.2) - 2024-05-04 +### Bug Fixes and Improvements + +- **maintenance**: Fix overdue check from printtime based entries ([#1871](https://github.com/mainsail-crew/mainsail/pull/1871)) +- **spoolman**: Fix search for spool-id ([#1872](https://github.com/mainsail-crew/mainsail/pull/1872)) +- Calc multiplicator for set_pin gcode ([#1870](https://github.com/mainsail-crew/mainsail/pull/1870)) + +## [2.11.1](https://github.com/mainsail-crew/mainsail/releases/tag/v2.11.1) - 2024-05-01 +### Bug Fixes and Improvements + +- **farm**: Fix switching to other printer function ([#1865](https://github.com/mainsail-crew/mainsail/pull/1865)) + +## [2.11.0](https://github.com/mainsail-crew/mainsail/releases/tag/v2.11.0) - 2024-04-28 +### Features + +- **miscellaneous**: Add support for pwm_tool and pwm_cycle_time ([#1804](https://github.com/mainsail-crew/mainsail/pull/1804)) +- Add fullscreen size for gcodefiles, gcodeviewer and webcam ([#1803](https://github.com/mainsail-crew/mainsail/pull/1803)) +- Add qr search function in the spoolman change spool dialog ([#1802](https://github.com/mainsail-crew/mainsail/pull/1802)) +- Add confirmation dialog to cooldown button ([#1808](https://github.com/mainsail-crew/mainsail/pull/1808)) +- Add only save button to editor ([#1835](https://github.com/mainsail-crew/mainsail/pull/1835)) +- Add option to disable favicon progress circle ([#1825](https://github.com/mainsail-crew/mainsail/pull/1825)) +- Add support for klipper runtime warnings ([#1809](https://github.com/mainsail-crew/mainsail/pull/1809)) +- Show macro description as tooltip when hovering a macro ([#1849](https://github.com/mainsail-crew/mainsail/pull/1849)) +- Connect to Moonraker via subdirectory/path ([#1836](https://github.com/mainsail-crew/mainsail/pull/1836)) +- Direct link to specific printer via query parameter ([#1837](https://github.com/mainsail-crew/mainsail/pull/1837)) +- Expose css variable for changing theme logo color ([#1856](https://github.com/mainsail-crew/mainsail/pull/1856)) +- Reminders panel on the History page ([#1274](https://github.com/mainsail-crew/mainsail/pull/1274)) + +### Bug Fixes and Improvements + +- **spoolman**: Break long comments & support multiline comments ([#1781](https://github.com/mainsail-crew/mainsail/pull/1781)) +- Fix commit list view on desktop and mobile devices ([#1785](https://github.com/mainsail-crew/mainsail/pull/1785)) +- Fix long M117 outputs in the status panel ([#1800](https://github.com/mainsail-crew/mainsail/pull/1800)) +- Fix long content lines in console ([#1799](https://github.com/mainsail-crew/mainsail/pull/1799)) +- Hide moonraker backups when "Hide backup files" is enabled ([#1801](https://github.com/mainsail-crew/mainsail/pull/1801)) +- Hide crowsnest backups when "Hide backup files" is enabled ([#1824](https://github.com/mainsail-crew/mainsail/pull/1824)) +- Fix typo issues with save zoffset for probes ([#1821](https://github.com/mainsail-crew/mainsail/pull/1821)) +- Fix case sensibility for printer power device ([#1827](https://github.com/mainsail-crew/mainsail/pull/1827)) +- Fix WebRTC(MediaMTX) webcam client ([#1843](https://github.com/mainsail-crew/mainsail/pull/1843)) +- Ignore wrong default.json file while resetting moonraker db ([#1829](https://github.com/mainsail-crew/mainsail/pull/1829)) + +### Refactor + +- **e-stop**: Remove fullscreen mode on mobile devices ([#1816](https://github.com/mainsail-crew/mainsail/pull/1816)) +- Refactor KlippyStatePanel ([#1826](https://github.com/mainsail-crew/mainsail/pull/1826)) +- Remove unused attribute in getPrinttimeAvgArray getter ([#1861](https://github.com/mainsail-crew/mainsail/pull/1861)) + +### Localization + +- **de**: Update german translation ([#1860](https://github.com/mainsail-crew/mainsail/pull/1860)) +- **en**: Remove unused keys ([#1855](https://github.com/mainsail-crew/mainsail/pull/1855)) +- **ru**: Update russian translation ([#1846](https://github.com/mainsail-crew/mainsail/pull/1846)) +- **uk**: Update ukrainian translation ([#1788](https://github.com/mainsail-crew/mainsail/pull/1788)) +- **zh**: Update chinese locale ([#1791](https://github.com/mainsail-crew/mainsail/pull/1791)) + +### Documentation + +- Add github sponsor link ([#1844](https://github.com/mainsail-crew/mainsail/pull/1844)) + +### Other + +- **ci**: Update caniuse browser list ([#1832](https://github.com/mainsail-crew/mainsail/pull/1832)) +- **deps**: Update @sindarius/gcodeviewer ([#1755](https://github.com/mainsail-crew/mainsail/pull/1755)) ([#1783](https://github.com/mainsail-crew/mainsail/pull/1783)) +- Fix typo/reword some parts of the pull request template ([#1850](https://github.com/mainsail-crew/mainsail/pull/1850)) + ## [2.10.0](https://github.com/mainsail-crew/mainsail/releases/tag/v2.10.0) - 2024-02-15 ### Features diff --git a/package-lock.json b/package-lock.json index 288410ed5..752f3f423 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "mainsail", - "version": "2.10.0", + "version": "2.11.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "mainsail", - "version": "2.10.0", + "version": "2.11.2", "dependencies": { "@codemirror/commands": "^6.0.1", "@codemirror/lang-css": "^6.0.0", @@ -24,7 +24,7 @@ "codemirror": "^6.0.1", "core-js": "^3.16.0", "detect-browser": "^5.3.0", - "echarts": "^5.2.2", + "echarts": "^5.5.0", "echarts-gl": "^2.0.8", "hls.js": "^1.3.3", "jmuxer": "^2.0.5", @@ -4302,12 +4302,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -5396,12 +5396,12 @@ } }, "node_modules/echarts": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", - "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.5.0.tgz", + "integrity": "sha512-rNYnNCzqDAPCr4m/fqyUFv7fD9qIsd50S6GDFgO1DxZhncCsNsG7IfUlAlvZe5oSEQxtsjnHiUuppzccry93Xw==", "dependencies": { "tslib": "2.3.0", - "zrender": "5.4.4" + "zrender": "5.5.0" } }, "node_modules/echarts-gl": { @@ -5417,9 +5417,9 @@ } }, "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, "dependencies": { "jake": "^10.8.5" @@ -6071,9 +6071,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -10838,9 +10838,9 @@ } }, "node_modules/zrender": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", - "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.5.0.tgz", + "integrity": "sha512-O3MilSi/9mwoovx77m6ROZM7sXShR/O/JIanvzTwjN3FORfLSr81PsUGd7jlaYOeds9d8tw82oP44+3YucVo+w==", "dependencies": { "tslib": "2.3.0" } diff --git a/package.json b/package.json index 527b48ada..f6ab5fa6d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mainsail", - "version": "2.10.0", + "version": "2.11.2", "private": true, "decription": "a klipper web interface", "author": { @@ -39,7 +39,7 @@ "codemirror": "^6.0.1", "core-js": "^3.16.0", "detect-browser": "^5.3.0", - "echarts": "^5.2.2", + "echarts": "^5.5.0", "echarts-gl": "^2.0.8", "hls.js": "^1.3.3", "jmuxer": "^2.0.5", diff --git a/src/components/TheConnectingDialog.vue b/src/components/TheConnectingDialog.vue index 29cad445b..d32bdd7c9 100644 --- a/src/components/TheConnectingDialog.vue +++ b/src/components/TheConnectingDialog.vue @@ -18,8 +18,7 @@

{{ $t('ConnectionDialog.CheckMoonrakerLog') }}

diff --git a/src/components/TheEditor.vue b/src/components/TheEditor.vue index bc401cd33..e740c7db8 100644 --- a/src/components/TheEditor.vue +++ b/src/components/TheEditor.vue @@ -7,7 +7,11 @@ hide-overlay :transition="false" @close="close" - @keydown.esc="escClose"> + @keydown.esc="escClose" + @keydown.ctrl.shift.s.prevent="restartServiceNameExists && save(restartServiceName)" + @keydown.meta.shift.s.prevent="restartServiceNameExists && save(restartServiceName)" + @keydown.ctrl.s.prevent="save(null)" + @keydown.meta.s.prevent="save(null)"> { - if (newVal[key] !== oldVal[key]) { - const actionType = newVal[key] ? 'legendSelect' : 'legendUnSelect' - this.chart?.dispatchAction({ type: actionType, name: key }) - } - }) - } + selectedLegendsChanged(newVal: any) { + if (this.chart?.isDisposed() !== true) this.chart?.setOption({ legend: { selected: newVal } }) } @Watch('source') diff --git a/src/components/console/ConsoleTableEntry.vue b/src/components/console/ConsoleTableEntry.vue index 9e0cd7897..21c2af4d9 100644 --- a/src/components/console/ConsoleTableEntry.vue +++ b/src/components/console/ConsoleTableEntry.vue @@ -53,6 +53,7 @@ export default class ConsoleTableEntry extends Mixins(BaseMixin) { .consoleTableRow { font-family: 'Roboto Mono', monospace; font-size: 0.95em; + white-space: pre-wrap; &.default { .col { diff --git a/src/components/dialogs/HistoryDeleteJobDialog.vue b/src/components/dialogs/HistoryDeleteJobDialog.vue new file mode 100644 index 000000000..e41c5d20d --- /dev/null +++ b/src/components/dialogs/HistoryDeleteJobDialog.vue @@ -0,0 +1,49 @@ + + diff --git a/src/components/dialogs/HistoryDeleteSelectedJobsDialog.vue b/src/components/dialogs/HistoryDeleteSelectedJobsDialog.vue new file mode 100644 index 000000000..1db91ae57 --- /dev/null +++ b/src/components/dialogs/HistoryDeleteSelectedJobsDialog.vue @@ -0,0 +1,58 @@ + + diff --git a/src/components/dialogs/HistoryDetailsDialogEntry.vue b/src/components/dialogs/HistoryDetailsDialogEntry.vue new file mode 100644 index 000000000..5bc3cc735 --- /dev/null +++ b/src/components/dialogs/HistoryDetailsDialogEntry.vue @@ -0,0 +1,41 @@ + + diff --git a/src/components/dialogs/HistoryListPanelAddMaintenance.vue b/src/components/dialogs/HistoryListPanelAddMaintenance.vue new file mode 100644 index 000000000..7a45376d8 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelAddMaintenance.vue @@ -0,0 +1,244 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDeleteSelectedDialog.vue b/src/components/dialogs/HistoryListPanelDeleteSelectedDialog.vue new file mode 100644 index 000000000..163efe922 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDeleteSelectedDialog.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDetailMaintenance.vue b/src/components/dialogs/HistoryListPanelDetailMaintenance.vue new file mode 100644 index 000000000..03f078813 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDetailMaintenance.vue @@ -0,0 +1,130 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDetailMaintenanceHistoryEntry.vue b/src/components/dialogs/HistoryListPanelDetailMaintenanceHistoryEntry.vue new file mode 100644 index 000000000..bae264a1f --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDetailMaintenanceHistoryEntry.vue @@ -0,0 +1,176 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelDetailsDialog.vue b/src/components/dialogs/HistoryListPanelDetailsDialog.vue new file mode 100644 index 000000000..8236db9c8 --- /dev/null +++ b/src/components/dialogs/HistoryListPanelDetailsDialog.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/src/components/dialogs/HistoryListPanelEditMaintenance.vue b/src/components/dialogs/HistoryListPanelEditMaintenance.vue new file mode 100644 index 000000000..3de9ba29f --- /dev/null +++ b/src/components/dialogs/HistoryListPanelEditMaintenance.vue @@ -0,0 +1,251 @@ + + + diff --git a/src/components/dialogs/HistoryListPanelNoteDialog.vue b/src/components/dialogs/HistoryListPanelNoteDialog.vue new file mode 100644 index 000000000..d42dbcfaa --- /dev/null +++ b/src/components/dialogs/HistoryListPanelNoteDialog.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/components/dialogs/HistoryListPanelPerformMaintenance.vue b/src/components/dialogs/HistoryListPanelPerformMaintenance.vue new file mode 100644 index 000000000..5398ab93e --- /dev/null +++ b/src/components/dialogs/HistoryListPanelPerformMaintenance.vue @@ -0,0 +1,75 @@ + + + diff --git a/src/components/dialogs/SpoolmanChangeSpoolDialog.vue b/src/components/dialogs/SpoolmanChangeSpoolDialog.vue index b8e12a27d..26abd8951 100644 --- a/src/components/dialogs/SpoolmanChangeSpoolDialog.vue +++ b/src/components/dialogs/SpoolmanChangeSpoolDialog.vue @@ -163,6 +163,7 @@ export default class SpoolmanChangeSpoolDialog extends Mixins(BaseMixin) { const querySplits = search.toLowerCase().split(' ') const searchArray = [ + item.id.toString(), item.comment, item.filament.name, item.filament.vendor.name, diff --git a/src/components/dialogs/TheMacroPrompt.vue b/src/components/dialogs/TheMacroPrompt.vue index 68356dbc3..171723fbc 100644 --- a/src/components/dialogs/TheMacroPrompt.vue +++ b/src/components/dialogs/TheMacroPrompt.vue @@ -100,7 +100,13 @@ export default class TheMacroPrompt extends Mixins(BaseMixin) { get showDialog() { if (this.lastPromptBeginPos === -1) return false - if (this.internalCloseCommand !== null && this.internalCloseCommand == this.lastPromptBeginPos) return false + + const lastBeginEvent = this.macroPromptEvents[this.lastPromptBeginPos] ?? null + if ( + this.internalCloseCommand !== null && + this.internalCloseCommand == (lastBeginEvent?.date?.getTime() ?? null) + ) + return false return this.lastPromptBeginPos > this.lastPromptClosePos && this.activePromptContent.length > 0 } @@ -152,7 +158,7 @@ export default class TheMacroPrompt extends Mixins(BaseMixin) { closePrompt() { // close prompt immediately, because klipper could be busy - this.internalCloseCommand = this.lastPromptBeginPos + this.internalCloseCommand = this.macroPromptEvents[this.lastPromptBeginPos]?.date?.getTime() ?? null const gcode = `RESPOND type="command" msg="action:prompt_end"` this.$store.dispatch('server/addEvent', { message: gcode, type: 'command' }) diff --git a/src/components/inputs/MiscellaneousSlider.vue b/src/components/inputs/MiscellaneousSlider.vue index 6c7e3d70a..fd70a0a5d 100644 --- a/src/components/inputs/MiscellaneousSlider.vue +++ b/src/components/inputs/MiscellaneousSlider.vue @@ -199,9 +199,10 @@ export default class MiscellaneousSlider extends Mixins(BaseMixin) { sendCmd(newVal: number): void { if (this.value === newVal) return - let gcode = `SET_PIN PIN=${this.name} VALUE=${newVal.toFixed(2)}` if (newVal < this.min) newVal = 0 newVal = newVal * this.multi + + let gcode = `SET_PIN PIN=${this.name} VALUE=${newVal.toFixed(2)}` if (this.type === 'fan') gcode = `M106 S${newVal.toFixed(0)}` if (this.type === 'fan_generic') gcode = `SET_FAN_SPEED FAN=${this.name} SPEED=${newVal}` if (this.type === 'led') diff --git a/src/components/mixins/history.ts b/src/components/mixins/history.ts new file mode 100644 index 000000000..80b763aac --- /dev/null +++ b/src/components/mixins/history.ts @@ -0,0 +1,31 @@ +import Vue from 'vue' +import Component from 'vue-class-component' + +@Component +export default class HistoryMixin extends Vue { + get moonrakerHistoryFields() { + const config = this.$store.state.server.config?.config ?? {} + const sensors = Object.keys(config).filter((key) => key.startsWith('sensor ')) + const historyFields: { desc: string; unit: string; provider: string; name: string; parameter: string }[] = [] + + sensors.forEach((configName) => { + const sensor = config[configName] ?? {} + + Object.keys(sensor) + .filter((key) => key.startsWith('history_field_')) + .forEach((key) => { + const historyField = sensor[key] + + historyFields.push({ + desc: historyField.desc, + unit: historyField.units, + provider: configName, + parameter: historyField.parameter, + name: key, + }) + }) + }) + + return historyFields + } +} diff --git a/src/components/mixins/settingsGeneralDatabase.ts b/src/components/mixins/settingsGeneralDatabase.ts index c746e1c48..f2e6e577b 100644 --- a/src/components/mixins/settingsGeneralDatabase.ts +++ b/src/components/mixins/settingsGeneralDatabase.ts @@ -29,7 +29,7 @@ export default class SettingsGeneralDatabase extends BaseMixin { }, { value: 'navigation', - label: this.$t('Settings.GeneralTab.DBNavigation'), + label: this.$t('Settings.GeneralTab.DbNavigation'), }, { value: 'uiSettings', @@ -115,6 +115,14 @@ export default class SettingsGeneralDatabase extends BaseMixin { backupableNamespaces = backupableNamespaces.sort(this.sortNamespaces) } + // add maintenance if exists + if (availableNamespaces.includes('maintenance')) { + backupableNamespaces.push({ + value: 'maintenance', + label: this.$t('Settings.GeneralTab.DbMaintenance'), + }) + } + // add timelapse if exists if (availableNamespaces.includes('timelapse')) { backupableNamespaces.push({ diff --git a/src/components/notifications/NotificationMenuEntry.vue b/src/components/notifications/NotificationMenuEntry.vue index 55cdc2e6d..397876dba 100644 --- a/src/components/notifications/NotificationMenuEntry.vue +++ b/src/components/notifications/NotificationMenuEntry.vue @@ -1,98 +1,80 @@ @@ -101,6 +83,13 @@ import BaseMixin from '@/components/mixins/base' import { Component, Mixins, Prop, Watch } from 'vue-property-decorator' import { mdiClose, mdiLinkVariant, mdiBellOffOutline } from '@mdi/js' import { GuiNotificationStateEntry } from '@/store/gui/notifications/types' +import { TranslateResult } from 'vue-i18n' +import { GuiMaintenanceStateEntry } from '@/store/gui/maintenance/types' + +interface ReminderOption { + text: string | TranslateResult + clickFunction: Function +} @Component({ components: {}, @@ -110,7 +99,8 @@ export default class NotificationMenuEntry extends Mixins(BaseMixin) { mdiLinkVariant = mdiLinkVariant mdiBellOffOutline = mdiBellOffOutline - private expand = false + expand = false + showMaintenanceDetails = false @Prop({ required: true }) declare readonly entry: GuiNotificationStateEntry @@ -139,6 +129,49 @@ export default class NotificationMenuEntry extends Mixins(BaseMixin) { return this.entry.id.slice(0, posFirstSlash) } + get maintenanceEntry() { + if (this.entryType !== 'maintenance') return null + + const id = this.entry.id.replace('maintenance/', '') + const entries = this.$store.getters['gui/maintenance/getEntries'] + + return entries.find((entry: GuiMaintenanceStateEntry) => entry.id === id) + } + + get reminderTimes() { + let output: ReminderOption[] = [ + { + text: this.$t('App.Notifications.NextReboot'), + clickFunction: () => this.dismiss('reboot', null), + }, + { text: this.$t('App.Notifications.Never'), clickFunction: () => this.close() }, + ] + + if (['announcement', 'maintenance'].includes(this.entryType)) { + output = [] + output.push({ + text: this.$t('App.Notifications.OneHourShort'), + clickFunction: () => this.dismiss('time', 60 * 60), + }) + output.push({ + text: this.$t('App.Notifications.OneDayShort'), + clickFunction: () => this.dismiss('time', 60 * 60 * 24), + }) + output.push({ + text: this.$t('App.Notifications.OneWeekShort'), + clickFunction: () => this.dismiss('time', 60 * 60 * 24 * 7), + }) + } + + return output + } + + xButtonAction() { + if (this.entryType === 'announcement') return this.close() + + this.dismiss('reboot', null) + } + close() { this.$store.dispatch('gui/notifications/close', { id: this.entry.id }) } @@ -157,10 +190,12 @@ export default class NotificationMenuEntry extends Mixins(BaseMixin) { diff --git a/src/components/panels/HistoryStatisticsPanel.vue b/src/components/panels/HistoryStatisticsPanel.vue index a282fe979..a2099cca2 100644 --- a/src/components/panels/HistoryStatisticsPanel.vue +++ b/src/components/panels/HistoryStatisticsPanel.vue @@ -9,65 +9,20 @@ - - + + {{ total.title }} + {{ total.value }} + - - + +
- - {{ $t('History.Chart') }} - - - {{ $t('History.Table') }} - + {{ $t('History.Chart') }} + {{ $t('History.Table') }}