diff --git a/web/app/src/App.vue b/web/app/src/App.vue
index 2bfac418..935d3d7d 100644
--- a/web/app/src/App.vue
+++ b/web/app/src/App.vue
@@ -14,6 +14,7 @@
@@ -23,6 +24,7 @@
import * as urls from '@/urls'
import * as API from '@/manager-api';
import { useJobs } from '@/stores/jobs';
+import { useNotifs } from '@/stores/notifications';
import ApiSpinner from '@/components/ApiSpinner.vue'
import JobsTable from '@/components/JobsTable.vue'
@@ -44,6 +46,7 @@ export default {
messages: [],
jobs: useJobs(),
+ notifs: useNotifs(),
flamencoName: DEFAULT_FLAMENCO_NAME,
flamencoVersion: DEFAULT_FLAMENCO_VERSION,
@@ -145,6 +148,8 @@ export default {
--header-height: 25px;
--footer-height: 25px;
--grid-gap: 4px;
+
+ --action-bar-height: 3em;
}
html,
@@ -221,6 +226,12 @@ footer {
grid-area: footer;
background-color: #333333;
color: #EEE;
+ padding-top: 0.2rem;
+ padding-left: 0.2rem;
+}
+
+section.action-bar {
+ height: var(--action-bar-height);
}
section.action-bar button.action {
diff --git a/web/app/src/components/JobActionsBar.vue b/web/app/src/components/JobActionsBar.vue
index 3440edf2..eadd51ad 100644
--- a/web/app/src/components/JobActionsBar.vue
+++ b/web/app/src/components/JobActionsBar.vue
@@ -6,12 +6,14 @@
-
diff --git a/web/app/src/stores/notifications.js b/web/app/src/stores/notifications.js
new file mode 100644
index 00000000..82301999
--- /dev/null
+++ b/web/app/src/stores/notifications.js
@@ -0,0 +1,31 @@
+import { defineStore } from 'pinia'
+
+/**
+ * Store notifications to users of the web frontend.
+ */
+export const useNotifs = defineStore('notifications', {
+ state: () => ({
+ /** @type {{ msg: string, time: Date }[]} */
+ history: [],
+ /** @type { msg: string, time: Date } */
+ last: null,
+ }),
+ actions: {
+ /**
+ * Add a simple notification.
+ * @param {string} message
+ */
+ add(message) {
+ const notif = {msg: message, time: new Date()};
+ this.history.push(notif);
+ this.last = notif;
+ this._prune();
+ },
+
+ /* Ensure there is only 1000 items in the history. */
+ _prune() {
+ if (this.history.length <= 1000) return;
+ this.history.splice(0, 1000 - this.history.length);
+ },
+ },
+})