1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Move dashboard controllers to app dir

This commit is contained in:
Bill Thornton 2025-01-23 17:24:58 -05:00
parent 91d8a3fffd
commit ea18af4bdd
45 changed files with 246 additions and 222 deletions

View file

@ -1,36 +1,36 @@
import escapeHtml from 'escape-html'; import escapeHtml from 'escape-html';
import datetime from '../../scripts/datetime'; import datetime from 'scripts/datetime';
import Events from '../../utils/events.ts'; import Events from 'utils/events.ts';
import itemHelper from '../../components/itemHelper'; import itemHelper from 'components/itemHelper';
import serverNotifications from '../../scripts/serverNotifications'; import serverNotifications from 'scripts/serverNotifications';
import dom from '../../scripts/dom'; import dom from 'scripts/dom';
import globalize from '../../lib/globalize'; import globalize from 'lib/globalize';
import { formatDistanceToNow } from 'date-fns'; import { formatDistanceToNow } from 'date-fns';
import { getLocaleWithSuffix } from '../../utils/dateFnsLocale.ts'; import { getLocaleWithSuffix } from 'utils/dateFnsLocale.ts';
import loading from '../../components/loading/loading'; import loading from 'components/loading/loading';
import playMethodHelper from '../../components/playback/playmethodhelper'; import playMethodHelper from 'components/playback/playmethodhelper';
import cardBuilder from '../../components/cardbuilder/cardBuilder'; import cardBuilder from 'components/cardbuilder/cardBuilder';
import imageLoader from '../../components/images/imageLoader'; import imageLoader from 'components/images/imageLoader';
import ActivityLog from '../../components/activitylog'; import ActivityLog from 'components/activitylog';
import imageHelper from '../../utils/image'; import imageHelper from 'utils/image';
import indicators from '../../components/indicators/indicators'; import indicators from 'components/indicators/indicators';
import taskButton from '../../scripts/taskbutton'; import taskButton from 'scripts/taskbutton';
import Dashboard from '../../utils/dashboard'; import Dashboard from 'utils/dashboard';
import ServerConnections from '../../components/ServerConnections'; import ServerConnections from 'components/ServerConnections';
import alert from '../../components/alert'; import alert from 'components/alert';
import confirm from '../../components/confirm/confirm'; import confirm from 'components/confirm/confirm';
import { getDefaultBackgroundClass } from '../../components/cardbuilder/cardBuilderUtils'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils';
import { getSystemInfoQuery } from 'hooks/useSystemInfo'; import { getSystemInfoQuery } from 'hooks/useSystemInfo';
import { toApi } from 'utils/jellyfin-apiclient/compat'; import { toApi } from 'utils/jellyfin-apiclient/compat';
import { queryClient } from 'utils/query/queryClient'; import { queryClient } from 'utils/query/queryClient';
import '../../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import '../../elements/emby-itemscontainer/emby-itemscontainer'; import 'elements/emby-itemscontainer/emby-itemscontainer';
import '../../components/listview/listview.scss'; import 'components/listview/listview.scss';
import '../../styles/flexstyles.scss'; import 'styles/flexstyles.scss';
import './dashboard.scss'; import './dashboard.scss';
function showPlaybackInfo(btn, session) { function showPlaybackInfo(btn, session) {
@ -72,7 +72,7 @@ function showPlaybackInfo(btn, session) {
} }
function showSendMessageForm(btn, session) { function showSendMessageForm(btn, session) {
import('../../components/prompt/prompt').then(({ default: prompt }) => { import('components/prompt/prompt').then(({ default: prompt }) => {
prompt({ prompt({
title: globalize.translate('HeaderSendMessage'), title: globalize.translate('HeaderSendMessage'),
label: globalize.translate('LabelMessageText'), label: globalize.translate('LabelMessageText'),
@ -89,7 +89,7 @@ function showSendMessageForm(btn, session) {
} }
function showOptionsMenu(btn, session) { function showOptionsMenu(btn, session) {
import('../../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => {
const menuItems = []; const menuItems = [];
if (session.ServerId && session.DeviceId !== ServerConnections.deviceId()) { if (session.ServerId && session.DeviceId !== ServerConnections.deviceId()) {

View file

@ -1,9 +1,9 @@
import loading from '../../../components/loading/loading'; import loading from 'components/loading/loading';
import dom from '../../../scripts/dom'; import dom from 'scripts/dom';
import '../../../elements/emby-input/emby-input'; import 'elements/emby-input/emby-input';
import '../../../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import Dashboard from '../../../utils/dashboard'; import Dashboard from 'utils/dashboard';
import { getParameterByName } from '../../../utils/url.ts'; import { getParameterByName } from 'utils/url.ts';
function load(page, device, deviceOptions) { function load(page, device, deviceOptions) {
page.querySelector('#txtCustomName', page).value = deviceOptions?.CustomName || ''; page.querySelector('#txtCustomName', page).value = deviceOptions?.CustomName || '';

View file

@ -1,16 +1,17 @@
import escapeHtml from 'escape-html';
import loading from '../../../components/loading/loading';
import dom from '../../../scripts/dom';
import globalize from '../../../lib/globalize';
import imageHelper from '../../../utils/image';
import { formatDistanceToNow } from 'date-fns'; import { formatDistanceToNow } from 'date-fns';
import { getLocaleWithSuffix } from '../../../utils/dateFnsLocale.ts'; import escapeHtml from 'escape-html';
import '../../../elements/emby-button/emby-button';
import '../../../elements/emby-itemscontainer/emby-itemscontainer'; import loading from 'components/loading/loading';
import '../../../components/cardbuilder/card.scss'; import dom from 'scripts/dom';
import Dashboard from '../../../utils/dashboard'; import globalize from 'lib/globalize';
import confirm from '../../../components/confirm/confirm'; import imageHelper from 'utils/image';
import { getDefaultBackgroundClass } from '../../../components/cardbuilder/cardBuilderUtils'; import { getLocaleWithSuffix } from 'utils/dateFnsLocale.ts';
import 'elements/emby-button/emby-button';
import 'elements/emby-itemscontainer/emby-itemscontainer';
import 'components/cardbuilder/card.scss';
import Dashboard from 'utils/dashboard';
import confirm from 'components/confirm/confirm';
import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils';
// Local cache of loaded // Local cache of loaded
let deviceIds = []; let deviceIds = [];
@ -66,7 +67,7 @@ function showDeviceMenu(view, btn, deviceId) {
}); });
} }
import('../../../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => {
actionsheet.show({ actionsheet.show({
items: menuItems, items: menuItems,
positionTo: btn, positionTo: btn,

View file

@ -1,9 +1,9 @@
import 'jquery'; import 'jquery';
import loading from '../../components/loading/loading'; import loading from 'components/loading/loading';
import globalize from '../../lib/globalize'; import globalize from 'lib/globalize';
import dom from '../../scripts/dom'; import dom from 'scripts/dom';
import Dashboard from '../../utils/dashboard'; import Dashboard from 'utils/dashboard';
import alert from '../../components/alert'; import alert from 'components/alert';
function loadPage(page, config, systemInfo) { function loadPage(page, config, systemInfo) {
Array.prototype.forEach.call(page.querySelectorAll('.chkDecodeCodec'), function (c) { Array.prototype.forEach.call(page.querySelectorAll('.chkDecodeCodec'), function (c) {
@ -263,7 +263,7 @@ $(document).on('pageinit', '#encodingSettingsPage', function () {
setDecodingCodecsVisible(page, this.value); setDecodingCodecsVisible(page, this.value);
}); });
$('#btnSelectTranscodingTempPath', page).on('click.selectDirectory', function () { $('#btnSelectTranscodingTempPath', page).on('click.selectDirectory', function () {
import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
callback: function (path) { callback: function (path) {
@ -280,7 +280,7 @@ $(document).on('pageinit', '#encodingSettingsPage', function () {
}); });
}); });
$('#btnSelectFallbackFontPath', page).on('click.selectDirectory', function () { $('#btnSelectFallbackFontPath', page).on('click.selectDirectory', function () {
import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
includeDirectories: true, includeDirectories: true,

View file

@ -1,14 +1,14 @@
import 'jquery'; import 'jquery';
import loading from '../../components/loading/loading'; import loading from 'components/loading/loading';
import globalize from '../../lib/globalize'; import globalize from 'lib/globalize';
import '../../elements/emby-checkbox/emby-checkbox'; import 'elements/emby-checkbox/emby-checkbox';
import '../../elements/emby-textarea/emby-textarea'; import 'elements/emby-textarea/emby-textarea';
import '../../elements/emby-input/emby-input'; import 'elements/emby-input/emby-input';
import '../../elements/emby-select/emby-select'; import 'elements/emby-select/emby-select';
import '../../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import Dashboard from '../../utils/dashboard'; import Dashboard from 'utils/dashboard';
import alert from '../../components/alert'; import alert from 'components/alert';
function loadPage(page, config, languageOptions, systemInfo) { function loadPage(page, config, languageOptions, systemInfo) {
page.querySelector('#txtServerName').value = systemInfo.ServerName; page.querySelector('#txtServerName').value = systemInfo.ServerName;
@ -53,7 +53,7 @@ function onSubmit() {
export default function (view) { export default function (view) {
$('#btnSelectCachePath', view).on('click.selectDirectory', function () { $('#btnSelectCachePath', view).on('click.selectDirectory', function () {
import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
callback: function (path) { callback: function (path) {
@ -70,7 +70,7 @@ export default function (view) {
}); });
}); });
$('#btnSelectMetadataPath', view).on('click.selectDirectory', function () { $('#btnSelectMetadataPath', view).on('click.selectDirectory', function () {
import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
path: view.querySelector('#txtMetadataPath').value, path: view.querySelector('#txtMetadataPath').value,

View file

@ -1,17 +1,18 @@
import escapeHtml from 'escape-html'; import escapeHtml from 'escape-html';
import taskButton from '../../scripts/taskbutton';
import loading from '../../components/loading/loading'; import taskButton from 'scripts/taskbutton';
import globalize from '../../lib/globalize'; import loading from 'components/loading/loading';
import dom from '../../scripts/dom'; import globalize from 'lib/globalize';
import imageHelper from '../../utils/image'; import dom from 'scripts/dom';
import '../../components/cardbuilder/card.scss'; import imageHelper from 'utils/image';
import '../../elements/emby-itemrefreshindicator/emby-itemrefreshindicator'; import 'components/cardbuilder/card.scss';
import Dashboard, { pageClassOn, pageIdOn } from '../../utils/dashboard'; import 'elements/emby-itemrefreshindicator/emby-itemrefreshindicator';
import confirm from '../../components/confirm/confirm'; import Dashboard, { pageClassOn, pageIdOn } from 'utils/dashboard';
import { getDefaultBackgroundClass } from '../../components/cardbuilder/cardBuilderUtils'; import confirm from 'components/confirm/confirm';
import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils';
function addVirtualFolder(page) { function addVirtualFolder(page) {
import('../../components/mediaLibraryCreator/mediaLibraryCreator').then(({ default: MediaLibraryCreator }) => { import('components/mediaLibraryCreator/mediaLibraryCreator').then(({ default: MediaLibraryCreator }) => {
new MediaLibraryCreator({ new MediaLibraryCreator({
collectionTypeOptions: getCollectionTypeOptions().filter(function (f) { collectionTypeOptions: getCollectionTypeOptions().filter(function (f) {
return !f.hidden; return !f.hidden;
@ -26,7 +27,7 @@ function addVirtualFolder(page) {
} }
function editVirtualFolder(page, virtualFolder) { function editVirtualFolder(page, virtualFolder) {
import('../../components/mediaLibraryEditor/mediaLibraryEditor').then(({ default: MediaLibraryEditor }) => { import('components/mediaLibraryEditor/mediaLibraryEditor').then(({ default: MediaLibraryEditor }) => {
new MediaLibraryEditor({ new MediaLibraryEditor({
refresh: shouldRefreshLibraryAfterChanges(page), refresh: shouldRefreshLibraryAfterChanges(page),
library: virtualFolder library: virtualFolder
@ -60,7 +61,7 @@ function deleteVirtualFolder(page, virtualFolder) {
} }
function refreshVirtualFolder(page, virtualFolder) { function refreshVirtualFolder(page, virtualFolder) {
import('../../components/refreshdialog/refreshdialog').then(({ default: RefreshDialog }) => { import('components/refreshdialog/refreshdialog').then(({ default: RefreshDialog }) => {
new RefreshDialog({ new RefreshDialog({
itemIds: [virtualFolder.ItemId], itemIds: [virtualFolder.ItemId],
serverId: ApiClient.serverId(), serverId: ApiClient.serverId(),
@ -70,7 +71,7 @@ function refreshVirtualFolder(page, virtualFolder) {
} }
function renameVirtualFolder(page, virtualFolder) { function renameVirtualFolder(page, virtualFolder) {
import('../../components/prompt/prompt').then(({ default: prompt }) => { import('components/prompt/prompt').then(({ default: prompt }) => {
prompt({ prompt({
label: globalize.translate('LabelNewName'), label: globalize.translate('LabelNewName'),
description: globalize.translate('MessageRenameMediaFolder'), description: globalize.translate('MessageRenameMediaFolder'),
@ -117,7 +118,7 @@ function showCardMenu(page, elem, virtualFolders) {
icon: 'delete' icon: 'delete'
}); });
import('../../components/actionSheet/actionSheet').then((actionsheet) => { import('components/actionSheet/actionSheet').then((actionsheet) => {
actionsheet.show({ actionsheet.show({
items: menuItems, items: menuItems,
positionTo: elem, positionTo: elem,
@ -206,7 +207,7 @@ function reloadVirtualFolders(page, virtualFolders) {
} }
function editImages(page, virtualFolder) { function editImages(page, virtualFolder) {
import('../../components/imageeditor/imageeditor').then((imageEditor) => { import('components/imageeditor/imageeditor').then((imageEditor) => {
imageEditor.show({ imageEditor.show({
itemId: virtualFolder.ItemId, itemId: virtualFolder.ItemId,
serverId: ApiClient.serverId() serverId: ApiClient.serverId()

View file

@ -1,7 +1,7 @@
import loading from '../../components/loading/loading'; import loading from 'components/loading/loading';
import '../../elements/emby-checkbox/emby-checkbox'; import 'elements/emby-checkbox/emby-checkbox';
import '../../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import Dashboard from '../../utils/dashboard'; import Dashboard from 'utils/dashboard';
export default function(view) { export default function(view) {
function loadData() { function loadData() {

View file

@ -1,15 +1,15 @@
import loading from '../components/loading/loading'; import loading from 'components/loading/loading';
import globalize from '../lib/globalize'; import globalize from 'lib/globalize';
import Dashboard, { pageIdOn } from '../utils/dashboard'; import Dashboard, { pageIdOn } from 'utils/dashboard';
import { getParameterByName } from '../utils/url.ts'; import { getParameterByName } from 'utils/url';
import Events from '../utils/events.ts'; import Events from 'utils/events';
function onListingsSubmitted() { function onListingsSubmitted() {
Dashboard.navigate('dashboard/livetv'); Dashboard.navigate('dashboard/livetv');
} }
function init(page, type, providerId) { function init(page, type, providerId) {
import(`../components/tvproviders/${type}`).then(({ default: ProviderFactory }) => { import(`components/tvproviders/${type}`).then(({ default: ProviderFactory }) => {
const instance = new ProviderFactory(page, providerId, {}); const instance = new ProviderFactory(page, providerId, {});
Events.on(instance, 'submitted', onListingsSubmitted); Events.on(instance, 'submitted', onListingsSubmitted);
instance.init(); instance.init();
@ -17,7 +17,7 @@ function init(page, type, providerId) {
} }
function loadTemplate(page, type, providerId) { function loadTemplate(page, type, providerId) {
import(`../components/tvproviders/${type}.template.html`).then(({ default: html }) => { import(`components/tvproviders/${type}.template.html`).then(({ default: html }) => {
page.querySelector('.providerTemplate').innerHTML = globalize.translateHtml(html); page.querySelector('.providerTemplate').innerHTML = globalize.translateHtml(html);
init(page, type, providerId); init(page, type, providerId);
}); });

View file

@ -1,9 +1,10 @@
import 'jquery'; import 'jquery';
import loading from '../components/loading/loading';
import globalize from '../lib/globalize'; import loading from 'components/loading/loading';
import '../elements/emby-button/emby-button'; import globalize from 'lib/globalize';
import Dashboard from '../utils/dashboard'; import 'elements/emby-button/emby-button';
import alert from '../components/alert'; import Dashboard from 'utils/dashboard';
import alert from 'components/alert';
function loadPage(page, config) { function loadPage(page, config) {
page.querySelector('.liveTvSettingsForm').classList.remove('hide'); page.querySelector('.liveTvSettingsForm').classList.remove('hide');
@ -64,7 +65,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () {
const page = this; const page = this;
$('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit); $('.liveTvSettingsForm').off('submit', onSubmit).on('submit', onSubmit);
$('#btnSelectRecordingPath', page).on('click.selectDirectory', function () { $('#btnSelectRecordingPath', page).on('click.selectDirectory', function () {
import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
callback: function (path) { callback: function (path) {
@ -79,7 +80,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () {
}); });
}); });
$('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () { $('#btnSelectMovieRecordingPath', page).on('click.selectDirectory', function () {
import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
callback: function (path) { callback: function (path) {
@ -94,7 +95,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () {
}); });
}); });
$('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () { $('#btnSelectSeriesRecordingPath', page).on('click.selectDirectory', function () {
import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
callback: function (path) { callback: function (path) {
@ -109,7 +110,7 @@ $(document).on('pageinit', '#liveTvSettingsPage', function () {
}); });
}); });
$('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () { $('#btnSelectPostProcessorPath', page).on('click.selectDirectory', function () {
import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
includeFiles: true, includeFiles: true,

View file

@ -1,19 +1,20 @@
import 'jquery'; import 'jquery';
import globalize from '../lib/globalize';
import taskButton from '../scripts/taskbutton'; import globalize from 'lib/globalize';
import dom from '../scripts/dom'; import taskButton from 'scripts/taskbutton';
import layoutManager from '../components/layoutManager'; import dom from 'scripts/dom';
import loading from '../components/loading/loading'; import layoutManager from 'components/layoutManager';
import browser from '../scripts/browser'; import loading from 'components/loading/loading';
import '../components/listview/listview.scss'; import browser from 'scripts/browser';
import '../styles/flexstyles.scss'; import 'components/listview/listview.scss';
import '../elements/emby-itemscontainer/emby-itemscontainer'; import 'styles/flexstyles.scss';
import '../components/cardbuilder/card.scss'; import 'elements/emby-itemscontainer/emby-itemscontainer';
import 'components/cardbuilder/card.scss';
import 'material-design-icons-iconfont'; import 'material-design-icons-iconfont';
import '../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import Dashboard from '../utils/dashboard'; import Dashboard from 'utils/dashboard';
import confirm from '../components/confirm/confirm'; import confirm from 'components/confirm/confirm';
import { getDefaultBackgroundClass } from '../components/cardbuilder/cardBuilderUtils'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils';
const enableFocusTransform = !browser.slow && !browser.edge; const enableFocusTransform = !browser.slow && !browser.edge;
@ -153,7 +154,7 @@ function showProviderOptions(page, providerId, button) {
id: 'map' id: 'map'
}); });
import('../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => {
actionsheet.show({ actionsheet.show({
items: items, items: items,
positionTo: button positionTo: button
@ -171,7 +172,7 @@ function showProviderOptions(page, providerId, button) {
} }
function mapChannels(page, providerId) { function mapChannels(page, providerId) {
import('../components/channelMapper/channelMapper').then(({ default: ChannelMapper }) => { import('components/channelMapper/channelMapper').then(({ default: ChannelMapper }) => {
new ChannelMapper({ new ChannelMapper({
serverId: ApiClient.serverInfo().Id, serverId: ApiClient.serverInfo().Id,
providerId: providerId providerId: providerId
@ -243,7 +244,7 @@ function addProvider(button) {
id: 'xmltv' id: 'xmltv'
}); });
import('../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => {
actionsheet.show({ actionsheet.show({
items: menuItems, items: menuItems,
positionTo: button, positionTo: button,
@ -269,7 +270,7 @@ function showDeviceMenu(button, tunerDeviceId) {
id: 'edit' id: 'edit'
}); });
import('../components/actionSheet/actionSheet').then(({ default: actionsheet }) => { import('components/actionSheet/actionSheet').then(({ default: actionsheet }) => {
actionsheet.show({ actionsheet.show({
items: items, items: items,
positionTo: button positionTo: button

View file

@ -1,12 +1,12 @@
import globalize from '../lib/globalize'; import globalize from 'lib/globalize';
import loading from '../components/loading/loading'; import loading from 'components/loading/loading';
import dom from '../scripts/dom'; import dom from 'scripts/dom';
import '../elements/emby-input/emby-input'; import 'elements/emby-input/emby-input';
import '../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import '../elements/emby-checkbox/emby-checkbox'; import 'elements/emby-checkbox/emby-checkbox';
import '../elements/emby-select/emby-select'; import 'elements/emby-select/emby-select';
import Dashboard from '../utils/dashboard'; import Dashboard from 'utils/dashboard';
import { getParameterByName } from '../utils/url.ts'; import { getParameterByName } from 'utils/url';
function isM3uVariant(type) { function isM3uVariant(type) {
return ['nextpvr'].indexOf(type || '') !== -1; return ['nextpvr'].indexOf(type || '') !== -1;
@ -112,7 +112,7 @@ function submitForm(page) {
} }
function getDetectedDevice() { function getDetectedDevice() {
return import('../components/tunerPicker').then(({ default: TunerPicker }) => { return import('components/tunerPicker').then(({ default: TunerPicker }) => {
return new TunerPicker().show({ return new TunerPicker().show({
serverId: ApiClient.serverId() serverId: ApiClient.serverId()
}); });
@ -235,7 +235,7 @@ export default function (view, params) {
}); });
}); });
view.querySelector('.btnSelectPath').addEventListener('click', function () { view.querySelector('.btnSelectPath').addEventListener('click', function () {
import('../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
includeFiles: true, includeFiles: true,

View file

@ -2,11 +2,11 @@ import { ImageResolution } from '@jellyfin/sdk/lib/generated-client/models/image
import 'jquery'; import 'jquery';
import loading from '../../components/loading/loading'; import loading from 'components/loading/loading';
import globalize from '../../lib/globalize'; import globalize from 'lib/globalize';
import Dashboard from '../../utils/dashboard'; import Dashboard from 'utils/dashboard';
import '../../components/listview/listview.scss'; import 'components/listview/listview.scss';
function populateImageResolutionOptions(select) { function populateImageResolutionOptions(select) {
let html = ''; let html = '';

View file

@ -1,9 +1,10 @@
import escapeHtml from 'escape-html'; import escapeHtml from 'escape-html';
import 'jquery'; import 'jquery';
import loading from '../../components/loading/loading';
import globalize from '../../lib/globalize'; import loading from 'components/loading/loading';
import Dashboard from '../../utils/dashboard'; import globalize from 'lib/globalize';
import alert from '../../components/alert'; import Dashboard from 'utils/dashboard';
import alert from 'components/alert';
function loadPage(page, config, users) { function loadPage(page, config, users) {
let html = '<option value="" selected="selected">' + globalize.translate('None') + '</option>'; let html = '<option value="" selected="selected">' + globalize.translate('None') + '</option>';

View file

@ -1,9 +1,9 @@
import loading from '../../components/loading/loading'; import loading from 'components/loading/loading';
import globalize from '../../lib/globalize'; import globalize from 'lib/globalize';
import '../../elements/emby-checkbox/emby-checkbox'; import 'elements/emby-checkbox/emby-checkbox';
import '../../elements/emby-select/emby-select'; import 'elements/emby-select/emby-select';
import Dashboard from '../../utils/dashboard'; import Dashboard from 'utils/dashboard';
import alert from '../../components/alert'; import alert from 'components/alert';
function onSubmit(e) { function onSubmit(e) {
const form = this; const form = this;
@ -159,7 +159,7 @@ export default function (view) {
} }
}); });
view.querySelector('#btnSelectCertPath').addEventListener('click', function () { view.querySelector('#btnSelectCertPath').addEventListener('click', function () {
import('../../components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => { import('components/directorybrowser/directorybrowser').then(({ default: DirectoryBrowser }) => {
const picker = new DirectoryBrowser(); const picker = new DirectoryBrowser();
picker.show({ picker.show({
includeFiles: true, includeFiles: true,

View file

@ -1,6 +1,7 @@
import 'jquery'; import 'jquery';
import loading from '../../components/loading/loading';
import Dashboard from '../../utils/dashboard'; import loading from 'components/loading/loading';
import Dashboard from 'utils/dashboard';
function loadPage(page, config) { function loadPage(page, config) {
page.querySelector('#txtMinResumePct').value = config.MinResumePct; page.querySelector('#txtMinResumePct').value = config.MinResumePct;

View file

@ -1,11 +1,11 @@
import loading from '../../../../components/loading/loading'; import loading from 'components/loading/loading';
import dom from '../../../../scripts/dom'; import dom from 'scripts/dom';
import globalize from '../../../../lib/globalize'; import globalize from 'lib/globalize';
import '../../../../components/cardbuilder/card.scss'; import 'components/cardbuilder/card.scss';
import '../../../../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import Dashboard, { pageIdOn } from '../../../../utils/dashboard'; import Dashboard, { pageIdOn } from 'utils/dashboard';
import confirm from '../../../../components/confirm/confirm'; import confirm from 'components/confirm/confirm';
import { getDefaultBackgroundClass } from '../../../../components/cardbuilder/cardBuilderUtils'; import { getDefaultBackgroundClass } from 'components/cardbuilder/cardBuilderUtils';
function deletePlugin(page, uniqueid, version, name) { function deletePlugin(page, uniqueid, version, name) {
const msg = globalize.translate('UninstallPluginConfirmation', name); const msg = globalize.translate('UninstallPluginConfirmation', name);
@ -187,7 +187,7 @@ function showPluginMenu(page, elem) {
}); });
} }
import('../../../../components/actionSheet/actionSheet').then((actionsheet) => { import('components/actionSheet/actionSheet').then((actionsheet) => {
actionsheet.show({ actionsheet.show({
items: menuItems, items: menuItems,
positionTo: elem, positionTo: elem,

View file

@ -1,14 +1,14 @@
import loading from '../../../../components/loading/loading'; import loading from 'components/loading/loading';
import globalize from '../../../../lib/globalize'; import globalize from 'lib/globalize';
import dialogHelper from '../../../../components/dialogHelper/dialogHelper'; import dialogHelper from 'components/dialogHelper/dialogHelper';
import confirm from '../../../../components/confirm/confirm'; import confirm from 'components/confirm/confirm';
import '../../../../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import '../../../../elements/emby-checkbox/emby-checkbox'; import 'elements/emby-checkbox/emby-checkbox';
import '../../../../elements/emby-select/emby-select'; import 'elements/emby-select/emby-select';
import '../../../../components/formdialog.scss'; import 'components/formdialog.scss';
import '../../../../components/listview/listview.scss'; import 'components/listview/listview.scss';
let repositories = []; let repositories = [];

View file

@ -1,12 +1,12 @@
import loading from '../../../components/loading/loading'; import loading from 'components/loading/loading';
import datetime from '../../../scripts/datetime'; import datetime from 'scripts/datetime';
import dom from '../../../scripts/dom'; import dom from 'scripts/dom';
import globalize from '../../../lib/globalize'; import globalize from 'lib/globalize';
import '../../../elements/emby-input/emby-input'; import 'elements/emby-input/emby-input';
import '../../../elements/emby-button/emby-button'; import 'elements/emby-button/emby-button';
import '../../../elements/emby-select/emby-select'; import 'elements/emby-select/emby-select';
import confirm from '../../../components/confirm/confirm'; import confirm from 'components/confirm/confirm';
import { getParameterByName } from '../../../utils/url.ts'; import { getParameterByName } from 'utils/url.ts';
function fillTimeOfDay(select) { function fillTimeOfDay(select) {
const options = []; const options = [];
@ -35,7 +35,7 @@ const ScheduledTaskPage = {
view.querySelector('.taskName').innerHTML = task.Name; view.querySelector('.taskName').innerHTML = task.Name;
view.querySelector('#pTaskDescription').innerHTML = task.Description; view.querySelector('#pTaskDescription').innerHTML = task.Description;
import('../../../components/listview/listview.scss').then(() => { import('components/listview/listview.scss').then(() => {
ScheduledTaskPage.loadTaskTriggers(view, task); ScheduledTaskPage.loadTaskTriggers(view, task);
}); });

View file

@ -1,14 +1,15 @@
import 'jquery';
import loading from '../../../components/loading/loading';
import globalize from '../../../lib/globalize';
import serverNotifications from '../../../scripts/serverNotifications';
import { formatDistance, formatDistanceToNow } from 'date-fns'; import { formatDistance, formatDistanceToNow } from 'date-fns';
import { getLocale, getLocaleWithSuffix } from '../../../utils/dateFnsLocale.ts'; import 'jquery';
import Events from '../../../utils/events.ts';
import '../../../components/listview/listview.scss'; import loading from 'components/loading/loading';
import '../../../elements/emby-button/emby-button'; import globalize from 'lib/globalize';
import dom from 'scripts/dom'; import dom from 'scripts/dom';
import serverNotifications from 'scripts/serverNotifications';
import { getLocale, getLocaleWithSuffix } from 'utils/dateFnsLocale.ts';
import Events from 'utils/events.ts';
import 'components/listview/listview.scss';
import 'elements/emby-button/emby-button';
function reloadList(page) { function reloadList(page) {
ApiClient.getScheduledTasks({ ApiClient.getScheduledTasks({

View file

@ -1,6 +1,7 @@
import 'jquery'; import 'jquery';
import loading from '../../components/loading/loading';
import Dashboard from '../../utils/dashboard'; import loading from 'components/loading/loading';
import Dashboard from 'utils/dashboard';
function loadPage(page, config) { function loadPage(page, config) {
page.querySelector('#txtRemoteClientBitrateLimit').value = config.RemoteClientBitrateLimit / 1e6 || ''; page.querySelector('#txtRemoteClientBitrateLimit').value = config.RemoteClientBitrateLimit / 1e6 || '';

View file

@ -6,92 +6,92 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [
path: '/dashboard', path: '/dashboard',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/dashboard', controller: 'dashboard',
view: 'dashboard/dashboard.html' view: 'dashboard.html'
} }
}, { }, {
path: 'settings', path: 'settings',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/general', controller: 'general',
view: 'dashboard/general.html' view: 'general.html'
} }
}, { }, {
path: 'networking', path: 'networking',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/networking', controller: 'networking',
view: 'dashboard/networking.html' view: 'networking.html'
} }
}, { }, {
path: 'devices', path: 'devices',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/devices/devices', controller: 'devices/devices',
view: 'dashboard/devices/devices.html' view: 'devices/devices.html'
} }
}, { }, {
path: 'devices/edit', path: 'devices/edit',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/devices/device', controller: 'devices/device',
view: 'dashboard/devices/device.html' view: 'devices/device.html'
} }
}, { }, {
path: 'libraries', path: 'libraries',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/library', controller: 'library',
view: 'dashboard/library.html' view: 'library.html'
} }
}, { }, {
path: 'libraries/display', path: 'libraries/display',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/librarydisplay', controller: 'librarydisplay',
view: 'dashboard/librarydisplay.html' view: 'librarydisplay.html'
} }
}, { }, {
path: 'playback/transcoding', path: 'playback/transcoding',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/encodingsettings', controller: 'encodingsettings',
view: 'dashboard/encodingsettings.html' view: 'encodingsettings.html'
} }
}, { }, {
path: 'libraries/metadata', path: 'libraries/metadata',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/metadataImages', controller: 'metadataImages',
view: 'dashboard/metadataimages.html' view: 'metadataimages.html'
} }
}, { }, {
path: 'libraries/nfo', path: 'libraries/nfo',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/metadatanfo', controller: 'metadatanfo',
view: 'dashboard/metadatanfo.html' view: 'metadatanfo.html'
} }
}, { }, {
path: 'playback/resume', path: 'playback/resume',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/playback', controller: 'playback',
view: 'dashboard/playback.html' view: 'playback.html'
} }
}, { }, {
path: 'plugins/catalog', path: 'plugins/catalog',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/plugins/available/index', controller: 'plugins/available/index',
view: 'dashboard/plugins/available/index.html' view: 'plugins/available/index.html'
} }
}, { }, {
path: 'plugins/repositories', path: 'plugins/repositories',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/plugins/repositories/index', controller: 'plugins/repositories/index',
view: 'dashboard/plugins/repositories/index.html' view: 'plugins/repositories/index.html'
} }
}, { }, {
path: 'livetv/guide', path: 'livetv/guide',
@ -125,29 +125,29 @@ export const LEGACY_ADMIN_ROUTES: LegacyRoute[] = [
path: 'plugins', path: 'plugins',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/plugins/installed/index', controller: 'plugins/installed/index',
view: 'dashboard/plugins/installed/index.html' view: 'plugins/installed/index.html'
} }
}, { }, {
path: 'tasks/edit', path: 'tasks/edit',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/scheduledtasks/scheduledtask', controller: 'scheduledtasks/scheduledtask',
view: 'dashboard/scheduledtasks/scheduledtask.html' view: 'scheduledtasks/scheduledtask.html'
} }
}, { }, {
path: 'tasks', path: 'tasks',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
controller: 'dashboard/scheduledtasks/scheduledtasks', controller: 'scheduledtasks/scheduledtasks',
view: 'dashboard/scheduledtasks/scheduledtasks.html' view: 'scheduledtasks/scheduledtasks.html'
} }
}, { }, {
path: 'playback/streaming', path: 'playback/streaming',
pageProps: { pageProps: {
appType: AppType.Dashboard, appType: AppType.Dashboard,
view: 'dashboard/streaming.html', view: 'streaming.html',
controller: 'dashboard/streaming' controller: 'streaming'
} }
} }
]; ];

View file

@ -33,17 +33,33 @@ interface ViewOptions {
} }
} }
const importController = (
appType: AppType,
controller: string,
view: string
) => {
if (appType === AppType.Dashboard) {
return Promise.all([
import(/* webpackChunkName: "[request]" */ `../../apps/dashboard/controllers/${controller}`),
import(/* webpackChunkName: "[request]" */ `../../apps/dashboard/controllers/${view}`)
.then(html => globalize.translateHtml(html))
]);
}
return Promise.all([
import(/* webpackChunkName: "[request]" */ `../../controllers/${controller}`),
import(/* webpackChunkName: "[request]" */ `../../controllers/${view}`)
.then(html => globalize.translateHtml(html))
]);
};
const loadView = async ( const loadView = async (
appType: AppType, appType: AppType,
controller: string, controller: string,
view: string, view: string,
viewOptions: ViewOptions viewOptions: ViewOptions
) => { ) => {
const [ controllerFactory, viewHtml ] = await Promise.all([ const [ controllerFactory, viewHtml ] = await importController(appType, controller, view);
import(/* webpackChunkName: "[request]" */ `../../controllers/${controller}`),
import(/* webpackChunkName: "[request]" */ `../../controllers/${view}`)
.then(html => globalize.translateHtml(html))
]);
viewManager.loadView({ viewManager.loadView({
...viewOptions, ...viewOptions,