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

refactor dynamic require dependencies for webpack

This commit is contained in:
vitorsemeano 2019-02-23 17:12:14 +00:00
parent 427c9d2036
commit e272b12755

View file

@ -282,33 +282,42 @@ var AppInfo = {};
} }
function createConnectionManager() { function createConnectionManager() {
return new Promise(function (resolve, reject) { return require(["connectionManagerFactory", "apphost", "credentialprovider", "events", "userSettings"], function (ConnectionManager, apphost, credentialProvider, events, userSettings) {
require(["connectionManagerFactory", "apphost", "credentialprovider", "events", "userSettings"], function (ConnectionManager, apphost, credentialProvider, events, userSettings) { var credentialProviderInstance = new credentialProvider(),
var credentialProviderInstance = new credentialProvider(); promises = [apphost.getSyncProfile(), apphost.init()];
var promises = [apphost.getSyncProfile(), apphost.init()];
Promise.all(promises).then(function (responses) {
var deviceProfile = responses[0];
var capabilities = Dashboard.capabilities(apphost);
capabilities.DeviceProfile = deviceProfile;
var connectionManager = new ConnectionManager(credentialProviderInstance, apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId(), capabilities, window.devicePixelRatio);
if (defineConnectionManager(connectionManager), bindConnectionManagerEvents(connectionManager, events, userSettings), !AppInfo.isNativeApp) { Promise.all(promises).then(function (responses) {
console.log("loading ApiClient singleton"); var deviceProfile = responses[0],
return getRequirePromise(["apiclient"]).then(function (apiClientFactory) { capabilities = Dashboard.capabilities(apphost);
console.log("creating ApiClient singleton");
var apiClient = new apiClientFactory(Dashboard.serverAddress(), apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId(), window.devicePixelRatio);
apiClient.enableAutomaticNetworking = false;
apiClient.manualAddressOnly = true;
connectionManager.addApiClient(apiClient);
window.ApiClient = apiClient;
localApiClient = apiClient;
console.log("loaded ApiClient singleton");
resolve();
});
}
resolve(); capabilities.DeviceProfile = deviceProfile;
});
var connectionManager = new ConnectionManager(credentialProviderInstance, apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId(), capabilities, window.devicePixelRatio);
defineConnectionManager(connectionManager);
bindConnectionManagerEvents(connectionManager, events, userSettings);
if (!AppInfo.isNativeApp) {
console.log("loading ApiClient singleton");
return require(["apiclient"], function (apiClientFactory) {
console.log("creating ApiClient singleton");
var apiClient = new apiClientFactory(Dashboard.serverAddress(), apphost.appName(), apphost.appVersion(), apphost.deviceName(), apphost.deviceId(), window.devicePixelRatio);
apiClient.enableAutomaticNetworking = false;
apiClient.manualAddressOnly = true;
connectionManager.addApiClient(apiClient);
window.ApiClient = apiClient;
localApiClient = apiClient;
console.log("loaded ApiClient singleton");
});
}
return Promise.resolve();
}); });
}); });
} }
@ -551,12 +560,6 @@ var AppInfo = {};
} }
} }
function getRequirePromise(deps) {
return new Promise(function (resolve, reject) {
require(deps, resolve);
});
}
function init() { function init() {
if ("android" === self.appMode) { if ("android" === self.appMode) {
define("nativedirectorychooser", ["cordova/nativedirectorychooser"], returnFirstDependency); define("nativedirectorychooser", ["cordova/nativedirectorychooser"], returnFirstDependency);
@ -565,29 +568,29 @@ var AppInfo = {};
define("livetvcss", ["css!css/livetv.css"], returnFirstDependency); define("livetvcss", ["css!css/livetv.css"], returnFirstDependency);
define("detailtablecss", ["css!css/detailtable.css"], returnFirstDependency); define("detailtablecss", ["css!css/detailtable.css"], returnFirstDependency);
define("buttonenabled", ["legacy/buttonenabled"], returnFirstDependency); define("buttonenabled", ["legacy/buttonenabled"], returnFirstDependency);
var list = []; var promises = [];
if (!window.fetch) { if (!window.fetch) {
list.push("fetch"); promises.push(require(["fetch"]));
} }
if ("function" != typeof Object.assign) { if ("function" != typeof Object.assign) {
list.push("objectassign"); promises.push(require(["objectassign"]));
} }
if (!Array.prototype.filter) { if (!Array.prototype.filter) {
list.push("arraypolyfills"); promises.push(require(["arraypolyfills"]));
} }
if (!Function.prototype.bind) { if (!Function.prototype.bind) {
list.push("functionbind"); promises.push(require(["functionbind"]));
} }
if (!window.requestAnimationFrame) { if (!window.requestAnimationFrame) {
list.push("raf"); promises.push(require(["raf"]));
} }
require(list, function () { Promise.all(promises).then(function () {
createConnectionManager().then(function () { createConnectionManager().then(function () {
console.log("initAfterDependencies promises resolved"); console.log("initAfterDependencies promises resolved");
@ -624,19 +627,16 @@ var AppInfo = {};
} }
document.title = Globalize.translateDocument(document.title, "core"); document.title = Globalize.translateDocument(document.title, "core");
var deps = ["apphost"];
if (browser.tv && !browser.android) { if (browser.tv && !browser.android) {
console.log("Using system fonts with explicit sizes"); console.log("Using system fonts with explicit sizes");
deps.push("systemFontsSizedCss"); require(["systemFontsSizedCss"]);
} else { } else {
console.log("Using default fonts"); console.log("Using default fonts");
deps.push("systemFontsCss"); require(["systemFontsCss"]);
} }
deps.push("css!css/librarybrowser"); require(["apphost", "css!css/librarybrowser"], function (appHost) {
require(deps, function (appHost) {
loadPlugins([], appHost, browser).then(function () { loadPlugins([], appHost, browser).then(function () {
onAppReady(browser); onAppReady(browser);
}); });
@ -1219,106 +1219,89 @@ var AppInfo = {};
function onAppReady(browser) { function onAppReady(browser) {
console.log("Begin onAppReady"); console.log("Begin onAppReady");
var deps = [];
var isBackgroundSync = -1 !== self.location.href.toString().toLowerCase().indexOf("start=backgroundsync");
var isInBackground = isBackgroundSync;
deps.push("apphost");
if (!isInBackground) { var isInBackground = -1 !== self.location.href.toString().toLowerCase().indexOf("start=backgroundsync");
deps.push("appRouter");
deps.push("scripts/themeloader");
if (browser.iOS) { window.Emby = {};
deps.push("css!devices/ios/ios.css");
}
deps.push("libraryMenu");
}
console.log("onAppReady - loading dependencies"); console.log("onAppReady - loading dependencies");
require(deps, function (appHost, pageObjects) { if (isInBackground) {
if (console.log("Loaded dependencies in onAppReady"), window.Emby = {}, isBackgroundSync) { syncNow();
return void syncNow(); } else {
if (browser.iOS) {
require(['css!devices/ios/ios.css']);
} }
window.Emby.Page = pageObjects; require(['apphost', 'appRouter', 'scripts/themeloader', 'libraryMenu'], function (appHost, pageObjects) {
defineCoreRoutes(appHost); window.Emby.Page = pageObjects;
Emby.Page.start({
click: false,
hashbang: true
});
var postInitDependencies = [];
if (!enableNativeGamepadKeyMapping() && isGamepadSupported()) { defineCoreRoutes(appHost);
postInitDependencies.push("bower_components/emby-webcomponents/input/gamepadtokey");
}
postInitDependencies.push("bower_components/emby-webcomponents/thememediaplayer"); Emby.Page.start({
postInitDependencies.push("scripts/autobackdrops"); click: false,
hashbang: true
});
if (!("cordova" !== self.appMode && "android" !== self.appMode)) { if (!enableNativeGamepadKeyMapping() && isGamepadSupported()) {
if (browser.android) { require(["bower_components/emby-webcomponents/input/gamepadtokey"]);
postInitDependencies.push("cordova/mediasession"); }
postInitDependencies.push("cordova/chromecast");
postInitDependencies.push("cordova/appshortcuts"); require(["bower_components/emby-webcomponents/thememediaplayer", "scripts/autobackdrops"]);
} else {
if (browser.safari) { if (!("cordova" !== self.appMode && "android" !== self.appMode)) {
postInitDependencies.push("cordova/mediasession"); if (browser.android) {
postInitDependencies.push("cordova/volume"); require(["cordova/mediasession", "cordova/chromecast", "cordova/appshortcuts"]);
postInitDependencies.push("cordova/statusbar"); } else if (browser.safari) {
postInitDependencies.push("cordova/backgroundfetch"); require(["cordova/mediasession", "cordova/volume", "cordova/statusbar", "cordova/backgroundfetch"]);
} }
} }
}
if (!(browser.tv || browser.xboxOne || browser.ps4)) { if (!(browser.tv || browser.xboxOne || browser.ps4)) {
postInitDependencies.push("bower_components/emby-webcomponents/nowplayingbar/nowplayingbar"); require(["bower_components/emby-webcomponents/nowplayingbar/nowplayingbar"]);
}
if (appHost.supports("remotecontrol")) {
postInitDependencies.push("playerSelectionMenu");
postInitDependencies.push("bower_components/emby-webcomponents/playback/remotecontrolautoplay");
}
if (!(appHost.supports("physicalvolumecontrol") && !browser.touch || browser.edge)) {
postInitDependencies.push("bower_components/emby-webcomponents/playback/volumeosd");
}
if (navigator.mediaSession) {
postInitDependencies.push("mediaSession");
}
postInitDependencies.push("apiInput");
postInitDependencies.push("mouseManager");
if (!(browser.tv || browser.xboxOne)) {
postInitDependencies.push("bower_components/emby-webcomponents/playback/playbackorientation");
registerServiceWorker();
if (window.Notification) {
postInitDependencies.push("bower_components/emby-webcomponents/notifications/notifications");
} }
}
postInitDependencies.push("playerSelectionMenu"); if (appHost.supports("remotecontrol")) {
require(["playerSelectionMenu", "bower_components/emby-webcomponents/playback/remotecontrolautoplay"]);
if (appHost.supports("fullscreenchange") && (browser.edgeUwp || -1 !== navigator.userAgent.toLowerCase().indexOf("electron"))) {
require(["fullscreen-doubleclick"]);
}
require(postInitDependencies);
if (appHost.supports("sync")) {
initLocalSyncEvents();
}
if (!AppInfo.isNativeApp) {
if (window.ApiClient) {
require(["css!" + ApiClient.getUrl("Branding/Css")]);
} }
}
}); if (!(appHost.supports("physicalvolumecontrol") && !browser.touch || browser.edge)) {
require(["bower_components/emby-webcomponents/playback/volumeosd"]);
}
if (navigator.mediaSession) {
require(["mediaSession"]);
}
require(["apiInput", "mouseManager"]);
if (!(browser.tv || browser.xboxOne)) {
require(["bower_components/emby-webcomponents/playback/playbackorientation"]);
registerServiceWorker();
if (window.Notification) {
require(["bower_components/emby-webcomponents/notifications/notifications"]);
}
}
require(["playerSelectionMenu"]);
if (appHost.supports("fullscreenchange") && (browser.edgeUwp || -1 !== navigator.userAgent.toLowerCase().indexOf("electron"))) {
require(["fullscreen-doubleclick"]);
}
if (appHost.supports("sync")) {
initLocalSyncEvents();
}
if (!AppInfo.isNativeApp) {
if (window.ApiClient) {
require(["css!" + ApiClient.getUrl("Branding/Css")]);
}
}
});
}
} }
function registerServiceWorker() { function registerServiceWorker() {
@ -1354,19 +1337,18 @@ var AppInfo = {};
} }
function onWebComponentsReady(browser) { function onWebComponentsReady(browser) {
var initialDependencies = [];
if (!window.Promise || browser.web0s) {
initialDependencies.push("bower_components/emby-webcomponents/native-promise-only/lib/npo.src");
}
initRequireWithBrowser(browser); initRequireWithBrowser(browser);
if (self.appMode === 'cordova' || self.appMode === 'android' || self.appMode === 'standalone') { if (self.appMode === 'cordova' || self.appMode === 'android' || self.appMode === 'standalone') {
AppInfo.isNativeApp = true; AppInfo.isNativeApp = true;
} }
require(initialDependencies, init); if (!window.Promise || browser.web0s) {
initialDependencies.push();
require(["bower_components/emby-webcomponents/native-promise-only/lib/npo.src"], init);
} else {
init();
}
} }
var localApiClient; var localApiClient;