-
{{ langNoRecords }}
+
{{ $gettext('No records to display.') }}
{{ history.length - index }}
@@ -77,33 +77,26 @@
}
-
diff --git a/frontend/vue/components/Public/FullPlayer/SongHistoryModal.vue b/frontend/vue/components/Public/FullPlayer/SongHistoryModal.vue
index 119515b3a..b536f07f7 100644
--- a/frontend/vue/components/Public/FullPlayer/SongHistoryModal.vue
+++ b/frontend/vue/components/Public/FullPlayer/SongHistoryModal.vue
@@ -1,34 +1,17 @@
-
+
-
diff --git a/frontend/vue/components/Public/OnDemand.vue b/frontend/vue/components/Public/OnDemand.vue
index 9064fe0ed..b9122b2f8 100644
--- a/frontend/vue/components/Public/OnDemand.vue
+++ b/frontend/vue/components/Public/OnDemand.vue
@@ -27,7 +27,7 @@
:is-stream="false">
-
+
@@ -35,7 +35,7 @@
-
+
@@ -90,59 +90,41 @@
border-radius: 5px;
}
}
-
-
-
diff --git a/frontend/vue/components/Public/Schedule.vue b/frontend/vue/components/Public/Schedule.vue
index df4ab64ed..9657bc9bc 100644
--- a/frontend/vue/components/Public/Schedule.vue
+++ b/frontend/vue/components/Public/Schedule.vue
@@ -39,15 +39,12 @@
}
-
diff --git a/frontend/vue/components/Stations/Common/MayNeedRestart.vue b/frontend/vue/components/Stations/Common/MayNeedRestart.vue
deleted file mode 100644
index 77507ec12..000000000
--- a/frontend/vue/components/Stations/Common/MayNeedRestart.vue
+++ /dev/null
@@ -1,25 +0,0 @@
-
-
-
-
-
diff --git a/frontend/vue/components/Stations/Common/useMayNeedRestart.js b/frontend/vue/components/Stations/Common/useMayNeedRestart.js
new file mode 100644
index 000000000..033bddc15
--- /dev/null
+++ b/frontend/vue/components/Stations/Common/useMayNeedRestart.js
@@ -0,0 +1,35 @@
+import {useAxios} from "~/vendor/axios";
+
+export const mayNeedRestartProps = {
+ restartStatusUrl: String
+};
+
+export function useNeedsRestart() {
+ const needsRestart = () => {
+ document.dispatchEvent(new CustomEvent("station-needs-restart"));
+ }
+
+ return {
+ needsRestart
+ };
+}
+
+export function useMayNeedRestart(restartStatusUrl) {
+ const {needsRestart} = useNeedsRestart();
+ const {axios} = useAxios();
+
+ const mayNeedRestart = () => {
+ axios.get(restartStatusUrl).then((resp) => {
+ if (resp.data.needs_restart) {
+ needsRestart();
+ }
+ });
+ }
+
+ return {
+ needsRestart,
+ mayNeedRestart
+ }
+}
+
+
diff --git a/frontend/vue/components/Stations/HlsStreams.vue b/frontend/vue/components/Stations/HlsStreams.vue
index 7afec357c..02f019337 100644
--- a/frontend/vue/components/Stations/HlsStreams.vue
+++ b/frontend/vue/components/Stations/HlsStreams.vue
@@ -43,65 +43,77 @@
-
+
-
diff --git a/frontend/vue/components/Stations/LiquidsoapConfig.vue b/frontend/vue/components/Stations/LiquidsoapConfig.vue
index 22bd61a1d..aef231b96 100644
--- a/frontend/vue/components/Stations/LiquidsoapConfig.vue
+++ b/frontend/vue/components/Stations/LiquidsoapConfig.vue
@@ -28,7 +28,7 @@
-
@@ -37,7 +37,7 @@
-
+
{{ $gettext('Save Changes') }}
@@ -46,83 +46,78 @@
-
diff --git a/frontend/vue/components/Stations/Mounts.vue b/frontend/vue/components/Stations/Mounts.vue
index 00115e526..c59796d8a 100644
--- a/frontend/vue/components/Stations/Mounts.vue
+++ b/frontend/vue/components/Stations/Mounts.vue
@@ -54,72 +54,87 @@
-
-
+
diff --git a/frontend/vue/components/Stations/Remotes.vue b/frontend/vue/components/Stations/Remotes.vue
index df52abc17..65a08f64c 100644
--- a/frontend/vue/components/Stations/Remotes.vue
+++ b/frontend/vue/components/Stations/Remotes.vue
@@ -48,71 +48,83 @@
-
-
diff --git a/frontend/vue/components/Stations/StereoToolConfig.vue b/frontend/vue/components/Stations/StereoToolConfig.vue
index b341926ec..098ee3d5f 100644
--- a/frontend/vue/components/Stations/StereoToolConfig.vue
+++ b/frontend/vue/components/Stations/StereoToolConfig.vue
@@ -28,7 +28,7 @@
}}
-
@@ -56,42 +56,42 @@
-
diff --git a/frontend/vue/functions/useSlotsExcept.js b/frontend/vue/functions/useSlotsExcept.js
new file mode 100644
index 000000000..6bba66544
--- /dev/null
+++ b/frontend/vue/functions/useSlotsExcept.js
@@ -0,0 +1,12 @@
+import {filter, includes} from "lodash";
+import {computed, useSlots} from "vue";
+
+export default function useSlotsExcept(except) {
+ const slots = useSlots();
+
+ return computed(() => {
+ return filter(slots, (slot, name) => {
+ return !includes(except, name);
+ });
+ });
+};