diff --git a/.eslintrc.js b/.eslintrc.js
index 7242938a8e..324f3d3e44 100644
--- a/.eslintrc.js
+++ b/.eslintrc.js
@@ -193,7 +193,6 @@ module.exports = {
'DlnaProfilePage': 'writable',
'DashboardPage': 'writable',
'Emby': 'readonly',
- 'getParameterByName': 'writable',
'Globalize': 'writable',
'Hls': 'writable',
'dfnshelper': 'writable',
diff --git a/src/components/favoriteitems.js b/src/components/favoriteitems.js
index 4230217429..7fd4baa5d0 100644
--- a/src/components/favoriteitems.js
+++ b/src/components/favoriteitems.js
@@ -5,6 +5,7 @@ import { appHost } from './apphost';
import imageLoader from './images/imageLoader';
import globalize from '../scripts/globalize';
import layoutManager from './layoutManager';
+import { getParameterByName } from '../utils/url.ts';
import '../assets/css/scrollstyles.scss';
import '../elements/emby-itemscontainer/emby-itemscontainer';
diff --git a/src/controllers/dashboard/devices/device.js b/src/controllers/dashboard/devices/device.js
index 607986c7f3..e2f000fef5 100644
--- a/src/controllers/dashboard/devices/device.js
+++ b/src/controllers/dashboard/devices/device.js
@@ -3,6 +3,7 @@ import dom from '../../../scripts/dom';
import '../../../elements/emby-input/emby-input';
import '../../../elements/emby-button/emby-button';
import Dashboard from '../../../scripts/clientUtils';
+import { getParameterByName } from '../../../utils/url.ts';
/* eslint-disable indent */
diff --git a/src/controllers/dashboard/dlna/profile.js b/src/controllers/dashboard/dlna/profile.js
index 00088cb6b6..4fd2f6415b 100644
--- a/src/controllers/dashboard/dlna/profile.js
+++ b/src/controllers/dashboard/dlna/profile.js
@@ -9,6 +9,7 @@ import '../../../elements/emby-checkbox/emby-checkbox';
import '../../../components/listview/listview.scss';
import Dashboard from '../../../scripts/clientUtils';
import toast from '../../../components/toast/toast';
+import { getParameterByName } from '../../../utils/url.ts';
/* eslint-disable indent */
diff --git a/src/controllers/dashboard/notifications/notification/index.js b/src/controllers/dashboard/notifications/notification/index.js
index 2b562ea073..8c3325c579 100644
--- a/src/controllers/dashboard/notifications/notification/index.js
+++ b/src/controllers/dashboard/notifications/notification/index.js
@@ -2,6 +2,7 @@ import escapeHtml from 'escape-html';
import 'jquery';
import '../../../../elements/emby-checkbox/emby-checkbox';
import Dashboard from '../../../../scripts/clientUtils';
+import { getParameterByName } from '../../../../utils/url.ts';
function fillItems(elem, items, cssClass, idPrefix, currentList, isEnabledList) {
let html = '
';
diff --git a/src/controllers/dashboard/scheduledtasks/scheduledtask.js b/src/controllers/dashboard/scheduledtasks/scheduledtask.js
index bd11ed3ca6..c326a689fc 100644
--- a/src/controllers/dashboard/scheduledtasks/scheduledtask.js
+++ b/src/controllers/dashboard/scheduledtasks/scheduledtask.js
@@ -7,6 +7,7 @@ import '../../../elements/emby-input/emby-input';
import '../../../elements/emby-button/emby-button';
import '../../../elements/emby-select/emby-select';
import confirm from '../../../components/confirm/confirm';
+import { getParameterByName } from '../../../utils/url.ts';
/* eslint-disable indent */
diff --git a/src/controllers/livetvguideprovider.js b/src/controllers/livetvguideprovider.js
index ecdb186e9f..ea7c35d332 100644
--- a/src/controllers/livetvguideprovider.js
+++ b/src/controllers/livetvguideprovider.js
@@ -2,6 +2,7 @@ import { Events } from 'jellyfin-apiclient';
import loading from '../components/loading/loading';
import globalize from '../scripts/globalize';
import Dashboard, { pageIdOn } from '../scripts/clientUtils';
+import { getParameterByName } from '../utils/url.ts';
function onListingsSubmitted() {
Dashboard.navigate('livetvstatus.html');
diff --git a/src/controllers/livetvtuner.js b/src/controllers/livetvtuner.js
index 4d2ecb738e..18e4d83721 100644
--- a/src/controllers/livetvtuner.js
+++ b/src/controllers/livetvtuner.js
@@ -6,6 +6,7 @@ import '../elements/emby-button/emby-button';
import '../elements/emby-checkbox/emby-checkbox';
import '../elements/emby-select/emby-select';
import Dashboard from '../scripts/clientUtils';
+import { getParameterByName } from '../utils/url.ts';
function isM3uVariant(type) {
return ['nextpvr'].indexOf(type || '') !== -1;
diff --git a/src/scripts/editorsidebar.js b/src/scripts/editorsidebar.js
index 55a90f9d04..2861999974 100644
--- a/src/scripts/editorsidebar.js
+++ b/src/scripts/editorsidebar.js
@@ -3,6 +3,7 @@ import 'jquery';
import globalize from './globalize';
import 'material-design-icons-iconfont';
import Dashboard from './clientUtils';
+import { getParameterByName } from '../utils/url.ts';
/* eslint-disable indent */
diff --git a/src/scripts/libraryMenu.js b/src/scripts/libraryMenu.js
index f4051ea83c..7bf5cad478 100644
--- a/src/scripts/libraryMenu.js
+++ b/src/scripts/libraryMenu.js
@@ -19,6 +19,7 @@ import '../assets/css/flexstyles.scss';
import Dashboard, { pageClassOn } from './clientUtils';
import ServerConnections from '../components/ServerConnections';
import Headroom from 'headroom.js';
+import { getParameterByName } from '../utils/url.ts';
/* eslint-disable indent */
diff --git a/src/scripts/site.js b/src/scripts/site.js
index 593e3475c6..7f8c4d751f 100644
--- a/src/scripts/site.js
+++ b/src/scripts/site.js
@@ -26,7 +26,6 @@ import './routes';
import '../components/themeMediaPlayer';
import './autoBackdrops';
import { pageClassOn, serverAddress } from './clientUtils';
-import { getWindowLocationSearch } from '../utils/url.ts';
import './screensavermanager';
import './serverNotifications';
import '../components/playback/playerSelectionMenu';
@@ -43,18 +42,6 @@ import { currentSettings } from './settings/userSettings';
import taskButton from './taskbutton';
// TODO: Move this elsewhere
-window.getParameterByName = function(name, url) {
- name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]');
- const regexS = '[\\?&]' + name + '=([^]*)';
- const regex = new RegExp(regexS, 'i');
- const results = regex.exec(url || getWindowLocationSearch());
-
- if (results == null) {
- return '';
- }
-
- return decodeURIComponent(results[1].replace(/\+/g, ' '));
-};
function loadCoreDictionary() {
const languages = ['af', 'ar', 'be-by', 'bg-bg', 'bn_bd', 'ca', 'cs', 'da', 'de', 'el', 'en-gb', 'en-us', 'eo', 'es', 'es-419', 'es-ar', 'es_do', 'es-mx', 'fa', 'fi', 'fil', 'fr', 'fr-ca', 'gl', 'gsw', 'he', 'hi-in', 'hr', 'hu', 'id', 'it', 'ja', 'kk', 'ko', 'lt-lt', 'mr', 'ms', 'nb', 'nl', 'pl', 'pr', 'pt', 'pt-br', 'pt-pt', 'ro', 'ru', 'sk', 'sl-si', 'sq', 'sv', 'ta', 'th', 'tr', 'uk', 'ur_pk', 'vi', 'zh-cn', 'zh-hk', 'zh-tw'];
diff --git a/src/utils/url.ts b/src/utils/url.ts
index fa4489c626..836617e96c 100644
--- a/src/utils/url.ts
+++ b/src/utils/url.ts
@@ -1,4 +1,4 @@
-export const getWindowLocationSearch = (win: Window | null | undefined) => {
+export const getWindowLocationSearch = (win?: Window | null | undefined) => {
let search = (win || window).location.search;
if (!search) {
@@ -11,3 +11,16 @@ export const getWindowLocationSearch = (win: Window | null | undefined) => {
return search || '';
};
+
+export const getParameterByName = (name: string, url?: string | null | undefined) => {
+ name = name.replace(/[[]/, '\\[').replace(/[\]]/, '\\]');
+ const regexS = '[\\?&]' + name + '=([^]*)';
+ const regex = new RegExp(regexS, 'i');
+ const results = regex.exec(url || getWindowLocationSearch());
+
+ if (results == null) {
+ return '';
+ }
+
+ return decodeURIComponent(results[1].replace(/\+/g, ' '));
+};