diff --git a/frontend/vue/components/Admin/AuditLog.vue b/frontend/vue/components/Admin/AuditLog.vue index 8027e5430..fd4c8bf9c 100644 --- a/frontend/vue/components/Admin/AuditLog.vue +++ b/frontend/vue/components/Admin/AuditLog.vue @@ -87,6 +87,7 @@ import Icon from "~/components/Common/Icon"; import DataTable from "~/components/Common/DataTable"; import DateRangeDropdown from "~/components/Common/DateRangeDropdown"; import {DateTime} from 'luxon'; +import useAzuraCast from "~/vendor/azuracast"; export default { name: 'AdminAuditLog', @@ -135,8 +136,10 @@ export default { this.$refs.datatable.relist(); }, formatTimestamp(unix_timestamp) { + const {timeConfig} = useAzuraCast(); + return DateTime.fromSeconds(unix_timestamp).toLocaleString( - {...DateTime.DATETIME_SHORT, ...App.time_config} + {...DateTime.DATETIME_SHORT, timeConfig} ); } } diff --git a/frontend/vue/components/Admin/Backups.vue b/frontend/vue/components/Admin/Backups.vue index c6de09576..37fac5e87 100644 --- a/frontend/vue/components/Admin/Backups.vue +++ b/frontend/vue/components/Admin/Backups.vue @@ -116,6 +116,7 @@ import formatFileSize from "~/functions/formatFileSize"; import AdminBackupsConfigureModal from "~/components/Admin/Backups/ConfigureModal"; import AdminBackupsRunBackupModal from "~/components/Admin/Backups/RunBackupModal"; import EnabledBadge from "~/components/Common/Badges/EnabledBadge.vue"; +import useAzuraCast from "~/vendor/azuracast"; export default { name: 'AdminBackups', @@ -186,8 +187,10 @@ export default { return DateTime.fromSeconds(timestamp).toRelative(); }, toLocaleTime(timestamp) { + const {timeConfig} = useAzuraCast(); + return DateTime.fromSeconds(timestamp).toLocaleString( - {...DateTime.DATETIME_SHORT, ...App.time_config} + {...DateTime.DATETIME_SHORT, timeConfig} ); }, formatFileSize(size) { diff --git a/frontend/vue/components/Common/CodemirrorTextarea.vue b/frontend/vue/components/Common/CodemirrorTextarea.vue index 2d2fad48b..5e1744577 100644 --- a/frontend/vue/components/Common/CodemirrorTextarea.vue +++ b/frontend/vue/components/Common/CodemirrorTextarea.vue @@ -8,6 +8,7 @@ import {useVModel} from "@vueuse/core"; import {computed} from "vue"; import {css} from "@codemirror/lang-css"; import {javascript} from "@codemirror/lang-javascript"; +import useAzuraCast from "~/vendor/azuracast"; const props = defineProps({ modelValue: String, @@ -27,9 +28,10 @@ const lang = computed(() => { return null; }); +const {theme} = useAzuraCast(); + const dark = computed(() => { - console.log(App.theme); - return App.theme === 'dark'; + return theme === 'dark'; }) diff --git a/frontend/vue/components/Common/FlowUpload.vue b/frontend/vue/components/Common/FlowUpload.vue index c8c8c2e3f..0a039efd7 100644 --- a/frontend/vue/components/Common/FlowUpload.vue +++ b/frontend/vue/components/Common/FlowUpload.vue @@ -73,6 +73,7 @@ import Icon from './Icon'; import _ from 'lodash'; import {computed, onMounted, onUnmounted, reactive, ref} from "vue"; import Flow from "@flowjs/flow.js"; +import useAzuraCast from "~/vendor/azuracast"; const props = defineProps({ targetUrl: String, @@ -131,6 +132,8 @@ const files = reactive({ const file_browse_target = ref(); // Template Ref const file_drop_target = ref(); // Template Ref +const {apiCsrf} = useAzuraCast(); + onMounted(() => { let defaultConfig = { target: () => { @@ -139,7 +142,7 @@ onMounted(() => { singleFile: !props.allowMultiple, headers: { 'Accept': 'application/json', - 'X-API-CSRF': App.api_csrf + 'X-API-CSRF': apiCsrf }, withCredentials: true, allowDuplicateUploads: true, diff --git a/frontend/vue/components/Common/ScheduleView.vue b/frontend/vue/components/Common/ScheduleView.vue index 4a469cef6..99a46f3ff 100644 --- a/frontend/vue/components/Common/ScheduleView.vue +++ b/frontend/vue/components/Common/ScheduleView.vue @@ -9,6 +9,7 @@ import allLocales from '@fullcalendar/core/locales-all'; import luxon2Plugin from '@fullcalendar/luxon2'; import timeGridPlugin from '@fullcalendar/timegrid'; import {shallowRef} from "vue"; +import useAzuraCast from "~/vendor/azuracast"; const props = defineProps({ scheduleUrl: String, @@ -34,8 +35,10 @@ const onEventClick = (arg) => { emit('click', arg.event); }; +const {localeShort, timeConfig} = useAzuraCast(); + const calendarOptions = shallowRef({ - locale: App.locale_short, + locale: localeShort, locales: allLocales, plugins: [luxon2Plugin, timeGridPlugin], initialView: 'timeGridWeek', @@ -52,7 +55,7 @@ const calendarOptions = shallowRef({ views: { timeGridWeek: { slotLabelFormat: { - ...App.time_config, + ...timeConfig, hour: 'numeric', minute: '2-digit', omitZeroMinute: true, diff --git a/frontend/vue/components/InlinePlayer.vue b/frontend/vue/components/InlinePlayer.vue index 1f5334d08..35ea85cc9 100644 --- a/frontend/vue/components/InlinePlayer.vue +++ b/frontend/vue/components/InlinePlayer.vue @@ -22,7 +22,7 @@
- @@ -33,7 +33,7 @@ step="1" v-model="volume">
- @@ -65,11 +65,11 @@ diff --git a/frontend/vue/components/Stations/Media.vue b/frontend/vue/components/Stations/Media.vue index 7a7210ab2..dcda24d4a 100644 --- a/frontend/vue/components/Stations/Media.vue +++ b/frontend/vue/components/Stations/Media.vue @@ -164,6 +164,7 @@ import PlayButton from "~/components/Common/PlayButton"; import formatFileSize from '~/functions/formatFileSize.js'; import _ from 'lodash'; import {DateTime} from 'luxon'; +import useAzuraCast from "~/vendor/azuracast"; export default { props: { @@ -252,8 +253,11 @@ export default { if (!value) { return ''; } + + const {timeConfig} = useAzuraCast(); + return DateTime.fromSeconds(value).setZone(this.stationTimeZone).toLocaleString( - {...DateTime.DATETIME_MED, ...App.time_config} + {...DateTime.DATETIME_MED, ...timeConfig} ); }, selectable: true, diff --git a/frontend/vue/components/Stations/Playlists.vue b/frontend/vue/components/Stations/Playlists.vue index 549dac69e..24112ec52 100644 --- a/frontend/vue/components/Stations/Playlists.vue +++ b/frontend/vue/components/Stations/Playlists.vue @@ -142,6 +142,7 @@ import Icon from '~/components/Common/Icon'; import CloneModal from './Playlists/CloneModal'; import {DateTime} from 'luxon'; import humanizeDuration from 'humanize-duration'; +import useAzuraCast from "~/vendor/azuracast"; export default { name: 'StationPlaylists', @@ -198,14 +199,18 @@ export default { : this.$gettext('Enable'); }, formatTime (time) { + const {timeConfig} = useAzuraCast(); + return DateTime.fromSeconds(time).setZone(this.stationTimeZone).toLocaleString( - {...DateTime.DATETIME_MED, ...App.time_config} + {...DateTime.DATETIME_MED, ...timeConfig} ); }, formatLength (length) { + const {localeShort} = useAzuraCast(); + return humanizeDuration(length * 1000, { round: true, - language: App.locale_short, + language: localeShort, fallbacks: ['en'] }); }, diff --git a/frontend/vue/components/Stations/Profile/SchedulePanel.vue b/frontend/vue/components/Stations/Profile/SchedulePanel.vue index 2881e6e8e..aaccbd170 100644 --- a/frontend/vue/components/Stations/Profile/SchedulePanel.vue +++ b/frontend/vue/components/Stations/Profile/SchedulePanel.vue @@ -49,12 +49,15 @@ export default { import {DateTime} from "luxon"; import _ from "lodash"; import {computed} from "vue"; +import useAzuraCast from "~/vendor/azuracast"; const props = defineProps({ scheduleItems: Array, stationTimeZone: String }); +const {timeConfig} = useAzuraCast(); + const processedScheduleItems = computed(() => { const now = DateTime.now().setZone(props.stationTimeZone); @@ -66,21 +69,21 @@ const processedScheduleItems = computed(() => { if (start_moment.hasSame(now, 'day')) { row.start_formatted = start_moment.toLocaleString( - {...DateTime.TIME_SIMPLE, ...App.time_config} + {...DateTime.TIME_SIMPLE, ...timeConfig} ); } else { row.start_formatted = start_moment.toLocaleString( - {...DateTime.DATETIME_MED, ...App.time_config} + {...DateTime.DATETIME_MED, ...timeConfig} ); } if (end_moment.hasSame(start_moment, 'day')) { row.end_formatted = end_moment.toLocaleString( - {...DateTime.TIME_SIMPLE, ...App.time_config} + {...DateTime.TIME_SIMPLE, ...timeConfig} ); } else { row.end_formatted = end_moment.toLocaleString( - {...DateTime.DATETIME_MED, ...App.time_config} + {...DateTime.DATETIME_MED, ...timeConfig} ); } diff --git a/frontend/vue/components/Stations/Queue.vue b/frontend/vue/components/Stations/Queue.vue index ae25de2e5..52419bad2 100644 --- a/frontend/vue/components/Stations/Queue.vue +++ b/frontend/vue/components/Stations/Queue.vue @@ -57,6 +57,7 @@ import DataTable from '../Common/DataTable'; import QueueLogsModal from './Queue/LogsModal'; import Icon from "~/components/Common/Icon"; import {DateTime} from 'luxon'; +import useAzuraCast from "~/vendor/azuracast"; export default { name: 'StationQueue', @@ -78,8 +79,10 @@ export default { }, methods: { formatTime(time) { + const {timeConfig} = useAzuraCast(); + return this.getDateTime(time).toLocaleString( - {...DateTime.TIME_WITH_SECONDS, ...App.time_config} + {...DateTime.TIME_WITH_SECONDS, ...timeConfig} ); }, formatRelativeTime(time) { diff --git a/frontend/vue/components/Stations/Reports/Listeners/InnerMap.vue b/frontend/vue/components/Stations/Reports/Listeners/InnerMap.vue index 299d9f899..f18629cb6 100644 --- a/frontend/vue/components/Stations/Reports/Listeners/InnerMap.vue +++ b/frontend/vue/components/Stations/Reports/Listeners/InnerMap.vue @@ -16,6 +16,7 @@