diff --git a/dashboard-ui/bower_components/emby-apiclient/.bower.json b/dashboard-ui/bower_components/emby-apiclient/.bower.json index 5e0ef141d8..c0cb08e97c 100644 --- a/dashboard-ui/bower_components/emby-apiclient/.bower.json +++ b/dashboard-ui/bower_components/emby-apiclient/.bower.json @@ -11,19 +11,19 @@ "license": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript/blob/master/LICENSE", "homepage": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript", "dependencies": { - "cryptojslib": "cryptojslib#^3.1.2" + "cryptojslib": "cryptojslib#^3.1.2", + "requirejs": "requirejs#^2.1.22" }, "devDependencies": {}, "ignore": [], - "version": "1.0.3", - "_release": "1.0.3", + "version": "1.0.13", + "_release": "1.0.13", "_resolution": { "type": "version", - "tag": "1.0.3", - "commit": "8e6266950e05e2d032d62340cb7307a3d19a23ec" + "tag": "1.0.13", + "commit": "50abac508289fd4db77f6d52ba1ee351b57baec2" }, "_source": "git://github.com/MediaBrowser/Emby.ApiClient.Javascript.git", "_target": "~1.0.3", - "_originalSource": "emby-apiclient", - "_direct": true + "_originalSource": "emby-apiclient" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/apiclient.js b/dashboard-ui/bower_components/emby-apiclient/apiclient.js index e5dd53f13d..93f9461206 100644 --- a/dashboard-ui/bower_components/emby-apiclient/apiclient.js +++ b/dashboard-ui/bower_components/emby-apiclient/apiclient.js @@ -1,8 +1,4 @@ -(function (globalScope, JSON, WebSocket, setTimeout, devicePixelRatio, FileReader) { - - if (!globalScope.MediaBrowser) { - globalScope.MediaBrowser = {}; - } +define(['events'], function (Events) { /** * Creates a new api client instance @@ -10,17 +6,17 @@ * @param {String} clientName s * @param {String} applicationVersion */ - globalScope.MediaBrowser.ApiClient = function (logger, serverAddress, clientName, applicationVersion, deviceName, deviceId) { + return function (serverAddress, clientName, applicationVersion, deviceName, deviceId, devicePixelRatio) { if (!serverAddress) { throw new Error("Must supply a serverAddress"); } - logger.log('ApiClient serverAddress: ' + serverAddress); - logger.log('ApiClient clientName: ' + clientName); - logger.log('ApiClient applicationVersion: ' + applicationVersion); - logger.log('ApiClient deviceName: ' + deviceName); - logger.log('ApiClient deviceId: ' + deviceId); + console.log('ApiClient serverAddress: ' + serverAddress); + console.log('ApiClient clientName: ' + clientName); + console.log('ApiClient applicationVersion: ' + applicationVersion); + console.log('ApiClient deviceName: ' + deviceName); + console.log('ApiClient deviceId: ' + deviceId); var self = this; var webSocket; @@ -267,7 +263,7 @@ } if (self.enableAutomaticNetworking === false || request.type != "GET") { - logger.log('Requesting url without automatic networking: ' + request.url); + console.log('Requesting url without automatic networking: ' + request.url); return getFetchPromise(request).then(function (response) { @@ -337,7 +333,7 @@ connectionMode = switchConnectionMode(connectionMode); var url = MediaBrowser.ServerInfo.getServerAddress(self.serverInfo(), connectionMode); - logger.log("Attempting reconnection to " + url); + console.log("Attempting reconnection to " + url); var timeout = connectionMode == MediaBrowser.ConnectionMode.Local ? 7000 : 15000; @@ -351,7 +347,7 @@ }, timeout).then(function () { - logger.log("Reconnect succeeded to " + url); + console.log("Reconnect succeeded to " + url); self.serverInfo().LastConnectionMode = connectionMode; self.serverAddress(url); @@ -360,7 +356,7 @@ }, function () { - logger.log("Reconnect attempt failed to " + url); + console.log("Reconnect attempt failed to " + url); if (currentRetryCount < 5) { @@ -388,7 +384,7 @@ self.fetchWithFailover = function (request, enableReconnection) { - logger.log("Requesting " + request.url); + console.log("Requesting " + request.url); request.timeout = 30000; @@ -408,32 +404,32 @@ }, function (error) { - logger.log("Request failed to " + request.url); + console.log("Request failed to " + request.url); // http://api.jquery.com/jQuery.ajax/ if (enableReconnection) { - logger.log("Attempting reconnection"); + console.log("Attempting reconnection"); var previousServerAddress = self.serverAddress(); return tryReconnect().then(function () { - logger.log("Reconnect succeesed"); + console.log("Reconnect succeesed"); request.url = request.url.replace(previousServerAddress, self.serverAddress()); return self.fetchWithFailover(request, false); }, function (innerError) { - logger.log("Reconnect failed"); + console.log("Reconnect failed"); onFetchFail(request.url, {}); throw innerError; }); } else { - logger.log("Reporting request failure"); + console.log("Reporting request failure"); onFetchFail(request.url, {}); throw error; @@ -496,7 +492,7 @@ throw new Error('connectionMode cannot be null'); } - logger.log('Begin updateServerInfo. connectionMode: ' + connectionMode); + console.log('Begin updateServerInfo. connectionMode: ' + connectionMode); self.serverInfo(server); @@ -505,7 +501,7 @@ if (!serverUrl) { throw new Error('serverUrl cannot be null. serverInfo: ' + JSON.stringify(server)); } - logger.log('Setting server address to ' + serverUrl); + console.log('Setting server address to ' + serverUrl); self.serverAddress(serverUrl); }; @@ -536,7 +532,7 @@ webSocket.onopen = function () { - logger.log('web socket connection opened'); + console.log('web socket connection opened'); setTimeout(function () { Events.trigger(self, 'websocketopen'); }, 0); @@ -578,7 +574,7 @@ self.sendWebSocketMessage = function (name, data) { - logger.log('Sending web socket message: ' + name); + console.log('Sending web socket message: ' + name); var msg = { MessageType: name }; @@ -3412,5 +3408,4 @@ return self.getJSON(url); }; }; - -})(window, window.JSON, window.WebSocket, window.setTimeout, window.devicePixelRatio, window.FileReader); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/bower.json b/dashboard-ui/bower_components/emby-apiclient/bower.json index 19687d037e..e16e0a715b 100644 --- a/dashboard-ui/bower_components/emby-apiclient/bower.json +++ b/dashboard-ui/bower_components/emby-apiclient/bower.json @@ -11,7 +11,8 @@ "license": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript/blob/master/LICENSE", "homepage": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript", "dependencies": { - "cryptojslib": "cryptojslib#^3.1.2" + "cryptojslib": "cryptojslib#^3.1.2", + "requirejs": "requirejs#^2.1.22" }, "devDependencies": { diff --git a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js index 555ebcb5df..62a28bd440 100644 --- a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js +++ b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js @@ -1,10 +1,6 @@ -(function (globalScope) { +define(['events', 'apiclient'], function (Events, apiClientFactory) { - if (!globalScope.MediaBrowser) { - globalScope.MediaBrowser = {}; - } - - globalScope.MediaBrowser.ConnectionState = { + var ConnectionState = { Unavailable: 0, ServerSelection: 1, ServerSignIn: 2, @@ -12,22 +8,22 @@ ConnectSignIn: 4 }; - globalScope.MediaBrowser.ConnectionMode = { + var ConnectionMode = { Local: 0, Remote: 1, Manual: 2 }; - globalScope.MediaBrowser.ServerInfo = { + var ServerInfo = { getServerAddress: function (server, mode) { switch (mode) { - case MediaBrowser.ConnectionMode.Local: + case ConnectionMode.Local: return server.LocalAddress; - case MediaBrowser.ConnectionMode.Manual: + case ConnectionMode.Manual: return server.ManualAddress; - case MediaBrowser.ConnectionMode.Remote: + case ConnectionMode.Remote: return server.RemoteAddress; default: return server.ManualAddress || server.LocalAddress || server.RemoteAddress; @@ -35,9 +31,9 @@ } }; - globalScope.MediaBrowser.ConnectionManager = function (logger, credentialProvider, appName, appVersion, deviceName, deviceId, capabilities) { + var ConnectionManager = function (credentialProvider, appName, appVersion, deviceName, deviceId, capabilities, devicePixelRatio) { - logger.log('Begin MediaBrowser.ConnectionManager constructor'); + console.log('Begin ConnectionManager constructor'); var self = this; var apiClients = []; @@ -55,7 +51,7 @@ function resolveFailure(resolve) { resolve({ - State: MediaBrowser.ConnectionState.Unavailable, + State: ConnectionState.Unavailable, ConnectUser: self.connectUser() }); } @@ -122,7 +118,7 @@ function fetchWithTimeout(url, options, timeoutMs) { - logger.log('fetchWithTimeout: timeoutMs: ' + timeoutMs + ', url: ' + url); + console.log('fetchWithTimeout: timeoutMs: ' + timeoutMs + ', url: ' + url); return new Promise(function (resolve, reject) { @@ -131,14 +127,14 @@ fetch(url, options).then(function (response) { clearTimeout(timeout); - logger.log('fetchWithTimeout: succeeded connecting to url: ' + url); + console.log('fetchWithTimeout: succeeded connecting to url: ' + url); resolve(response); }, function (error) { clearTimeout(timeout); - logger.log('fetchWithTimeout: timed out connecting to url: ' + url); + console.log('fetchWithTimeout: timed out connecting to url: ' + url); reject(); }); @@ -168,11 +164,11 @@ request.headers = request.headers || {}; - logger.log('ConnectionManager requesting url: ' + request.url); + console.log('ConnectionManager requesting url: ' + request.url); return getFetchPromise(request).then(function (response) { - logger.log('ConnectionManager response status: ' + response.status + ', url: ' + request.url); + console.log('ConnectionManager response status: ' + response.status + ', url: ' + request.url); if (response.status < 400) { @@ -187,7 +183,7 @@ }, function (err) { - logger.log('ConnectionManager request failed to url: ' + request.url); + console.log('ConnectionManager request failed to url: ' + request.url); throw err; }); } @@ -196,7 +192,7 @@ url = getEmbyServerUrl(url, "system/info/public"); - logger.log('tryConnect url: ' + url); + console.log('tryConnect url: ' + url); return ajax({ @@ -296,8 +292,8 @@ var existingServer = existingServers.length ? existingServers[0] : {}; existingServer.DateLastAccessed = new Date().getTime(); - existingServer.LastConnectionMode = MediaBrowser.ConnectionMode.Manual; - if (existingServer.LastConnectionMode == MediaBrowser.ConnectionMode.Local) { + existingServer.LastConnectionMode = ConnectionMode.Manual; + if (existingServer.LastConnectionMode == ConnectionMode.Local) { existingServer.DateLastLocalConnection = new Date().getTime(); } existingServer.ManualAddress = apiClient.serverAddress(); @@ -332,7 +328,7 @@ self.clearData = function () { - logger.log('connection manager clearing data'); + console.log('connection manager clearing data'); connectUser = null; var credentials = credentialProvider.credentials(); @@ -354,9 +350,9 @@ if (!apiClient) { - var url = MediaBrowser.ServerInfo.getServerAddress(server, connectionMode); + var url = ServerInfo.getServerAddress(server, connectionMode); - apiClient = new MediaBrowser.ApiClient(logger, url, appName, appVersion, deviceName, deviceId); + apiClient = new apiClientFactory(url, appName, appVersion, deviceName, deviceId, devicePixelRatio); apiClients.push(apiClient); @@ -369,7 +365,7 @@ Events.trigger(self, 'apiclientcreated', [apiClient]); } - logger.log('returning instance from getOrAddApiClient'); + console.log('returning instance from getOrAddApiClient'); return apiClient; } @@ -402,7 +398,7 @@ if (options.updateDateLastAccessed !== false) { server.DateLastAccessed = new Date().getTime(); - if (server.LastConnectionMode == MediaBrowser.ConnectionMode.Local) { + if (server.LastConnectionMode == ConnectionMode.Local) { server.DateLastLocalConnection = new Date().getTime(); } } @@ -445,7 +441,7 @@ if (options.enableWebSocket !== false) { if (!apiClient.isWebSocketOpenOrConnecting && apiClient.isWebSocketSupported()) { - logger.log('calling apiClient.openWebSocket'); + console.log('calling apiClient.openWebSocket'); apiClient.openWebSocket(); } @@ -516,7 +512,7 @@ throw new Error("credentials.ConnectUserId cannot be null"); } - var url = MediaBrowser.ServerInfo.getServerAddress(server, connectionMode); + var url = ServerInfo.getServerAddress(server, connectionMode); url = getEmbyServerUrl(url, "Connect/Exchange?format=json&ConnectUserId=" + credentials.ConnectUserId); @@ -547,7 +543,7 @@ return new Promise(function (resolve, reject) { - var url = MediaBrowser.ServerInfo.getServerAddress(server, connectionMode); + var url = ServerInfo.getServerAddress(server, connectionMode); ajax({ @@ -675,7 +671,7 @@ self.logout = function () { - Logger.log('begin connectionManager loguot'); + console.log('begin connectionManager loguot'); var promises = []; for (var i = 0, length = apiClients.length; i < length; i++) { @@ -743,7 +739,7 @@ function getConnectServers(credentials) { - logger.log('Begin getConnectServers'); + console.log('Begin getConnectServers'); return new Promise(function (resolve, reject) { @@ -801,7 +797,7 @@ self.getAvailableServers = function () { - logger.log('Begin getAvailableServers'); + console.log('Begin getAvailableServers'); // Clone the array var credentials = credentialProvider.credentials(); @@ -863,7 +859,7 @@ DateLastLocalConnection: new Date().getTime() }; - info.LastConnectionMode = info.ManualAddress ? MediaBrowser.ConnectionMode.Manual : MediaBrowser.ConnectionMode.Local; + info.LastConnectionMode = info.ManualAddress ? ConnectionMode.Manual : ConnectionMode.Local; return info; }); @@ -897,7 +893,7 @@ self.connect = function () { - logger.log('Begin connect'); + console.log('Begin connect'); return new Promise(function (resolve, reject) { @@ -918,7 +914,7 @@ self.connectToServers = function (servers) { - logger.log('Begin connectToServers, with ' + servers.length + ' servers'); + console.log('Begin connectToServers, with ' + servers.length + ' servers'); return new Promise(function (resolve, reject) { @@ -926,14 +922,14 @@ self.connectToServer(servers[0]).then(function (result) { - if (result.State == MediaBrowser.ConnectionState.Unavailable) { + if (result.State == ConnectionState.Unavailable) { result.State = result.ConnectUser == null ? - MediaBrowser.ConnectionState.ConnectSignIn : - MediaBrowser.ConnectionState.ServerSelection; + ConnectionState.ConnectSignIn : + ConnectionState.ServerSelection; } - logger.log('resolving connectToServers with result.State: ' + result.State); + console.log('resolving connectToServers with result.State: ' + result.State); resolve(result); }); @@ -945,14 +941,14 @@ if (firstServer) { self.connectToServer(firstServer).then(function (result) { - if (result.State == MediaBrowser.ConnectionState.SignedIn) { + if (result.State == ConnectionState.SignedIn) { resolve(result); } else { resolve({ Servers: servers, - State: (!servers.length && !self.connectUser()) ? MediaBrowser.ConnectionState.ConnectSignIn : MediaBrowser.ConnectionState.ServerSelection, + State: (!servers.length && !self.connectUser()) ? ConnectionState.ConnectSignIn : ConnectionState.ServerSelection, ConnectUser: self.connectUser() }); } @@ -962,7 +958,7 @@ resolve({ Servers: servers, - State: (!servers.length && !self.connectUser()) ? MediaBrowser.ConnectionState.ConnectSignIn : MediaBrowser.ConnectionState.ServerSelection, + State: (!servers.length && !self.connectUser()) ? ConnectionState.ConnectSignIn : ConnectionState.ServerSelection, ConnectUser: self.connectUser() }); } @@ -992,9 +988,9 @@ if (server.LastConnectionMode != null) { //tests.push(server.LastConnectionMode); } - if (tests.indexOf(MediaBrowser.ConnectionMode.Manual) == -1) { tests.push(MediaBrowser.ConnectionMode.Manual); } - if (tests.indexOf(MediaBrowser.ConnectionMode.Local) == -1) { tests.push(MediaBrowser.ConnectionMode.Local); } - if (tests.indexOf(MediaBrowser.ConnectionMode.Remote) == -1) { tests.push(MediaBrowser.ConnectionMode.Remote); } + if (tests.indexOf(ConnectionMode.Manual) == -1) { tests.push(ConnectionMode.Manual); } + if (tests.indexOf(ConnectionMode.Local) == -1) { tests.push(ConnectionMode.Local); } + if (tests.indexOf(ConnectionMode.Remote) == -1) { tests.push(ConnectionMode.Remote); } beginWakeServer(server); @@ -1014,24 +1010,24 @@ if (index >= tests.length) { - logger.log('Tested all connection modes. Failing server connection.'); + console.log('Tested all connection modes. Failing server connection.'); resolveFailure(resolve); return; } var mode = tests[index]; - var address = MediaBrowser.ServerInfo.getServerAddress(server, mode); + var address = ServerInfo.getServerAddress(server, mode); var enableRetry = false; var skipTest = false; var timeout = defaultTimeout; - if (mode == MediaBrowser.ConnectionMode.Local) { + if (mode == ConnectionMode.Local) { enableRetry = true; timeout = 8000; } - else if (mode == MediaBrowser.ConnectionMode.Manual) { + else if (mode == ConnectionMode.Manual) { if (stringEqualsIgnoreCase(address, server.LocalAddress) || stringEqualsIgnoreCase(address, server.RemoteAddress)) { @@ -1044,16 +1040,16 @@ return; } - logger.log('testing connection mode ' + mode + ' with server ' + server.Name); + console.log('testing connection mode ' + mode + ' with server ' + server.Name); tryConnect(address, timeout).then(function (result) { - logger.log('calling onSuccessfulConnection with connection mode ' + mode + ' with server ' + server.Name); + console.log('calling onSuccessfulConnection with connection mode ' + mode + ' with server ' + server.Name); onSuccessfulConnection(server, result, mode, options, resolve); }, function () { - logger.log('test failed for connection mode ' + mode + ' with server ' + server.Name); + console.log('test failed for connection mode ' + mode + ' with server ' + server.Name); if (enableRetry) { @@ -1117,7 +1113,7 @@ if (options.updateDateLastAccessed !== false) { server.DateLastAccessed = new Date().getTime(); - if (server.LastConnectionMode == MediaBrowser.ConnectionMode.Local) { + if (server.LastConnectionMode == ConnectionMode.Local) { server.DateLastLocalConnection = new Date().getTime(); } } @@ -1130,13 +1126,13 @@ result.ApiClient = getOrAddApiClient(server, connectionMode); result.State = server.AccessToken ? - MediaBrowser.ConnectionState.SignedIn : - MediaBrowser.ConnectionState.ServerSignIn; + ConnectionState.SignedIn : + ConnectionState.ServerSignIn; result.Servers.push(server); result.ApiClient.updateServerInfo(server, connectionMode); - if (result.State == MediaBrowser.ConnectionState.SignedIn) { + if (result.State == ConnectionState.SignedIn) { afterConnected(result.ApiClient, options); } @@ -1173,17 +1169,17 @@ address = normalizeAddress(address); function onFail() { - logger.log('connectToAddress ' + address + ' failed'); + console.log('connectToAddress ' + address + ' failed'); resolveFailure(resolve); } tryConnect(address, defaultTimeout).then(function (publicInfo) { - logger.log('connectToAddress ' + address + ' succeeded'); + console.log('connectToAddress ' + address + ' succeeded'); var server = { ManualAddress: address, - LastConnectionMode: MediaBrowser.ConnectionMode.Manual + LastConnectionMode: ConnectionMode.Manual }; updateServerInfo(server, publicInfo); @@ -1207,9 +1203,9 @@ return; } - require(['connectservice', 'cryptojs-md5'], function () { + require(['connectservice', 'cryptojs-md5'], function (connectservice) { - var md5 = self.getConnectPasswordHash(password); + var md5 = getConnectPasswordHash(connectservice, password); ajax({ type: "POST", @@ -1267,9 +1263,9 @@ return; } - require(['connectservice', 'cryptojs-md5'], function () { + require(['connectservice', 'cryptojs-md5'], function (connectservice) { - var md5 = self.getConnectPasswordHash(password); + var md5 = getConnectPasswordHash(connectservice, password); ajax({ type: "POST", @@ -1306,12 +1302,12 @@ }); }; - self.getConnectPasswordHash = function (password) { + function getConnectPasswordHash(connectService, password) { - password = globalScope.MediaBrowser.ConnectService.cleanPassword(password); + password = connectService.cleanPassword(password); return CryptoJS.MD5(password).toString(); - }; + } self.getApiClient = function (item) { @@ -1511,4 +1507,10 @@ return self; }; -})(window, window.Logger); \ No newline at end of file + return { + ConnectionState: ConnectionState, + ConnectionMode: ConnectionMode, + ServerInfo: ServerInfo, + ConnectionManager: ConnectionManager + }; +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/connectservice.js b/dashboard-ui/bower_components/emby-apiclient/connectservice.js index e27ff5e2b8..f08f6df20a 100644 --- a/dashboard-ui/bower_components/emby-apiclient/connectservice.js +++ b/dashboard-ui/bower_components/emby-apiclient/connectservice.js @@ -1,15 +1,6 @@ -(function (globalScope) { +define([], function () { - if (!globalScope.MediaBrowser) { - globalScope.MediaBrowser = {}; - } - - function replaceAll(str, find, replace) { - - return str.split(find).join(replace); - } - - var connectService = { + return { cleanPassword: function (password) { @@ -26,9 +17,5 @@ return password; } - }; - - globalScope.MediaBrowser.ConnectService = connectService; - -})(window); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/credentials.js b/dashboard-ui/bower_components/emby-apiclient/credentials.js index 82abd6e6aa..38a05c029c 100644 --- a/dashboard-ui/bower_components/emby-apiclient/credentials.js +++ b/dashboard-ui/bower_components/emby-apiclient/credentials.js @@ -1,10 +1,6 @@ -(function (globalScope, JSON) { +define(['events'], function (Events) { - if (!globalScope.MediaBrowser) { - globalScope.MediaBrowser = {}; - } - - globalScope.MediaBrowser.CredentialProvider = function (key) { + return function (key) { var self = this; var credentials = null; @@ -16,7 +12,7 @@ var json = appStorage.getItem(key) || '{}'; - Logger.log('credentials initialized with: ' + json); + console.log('credentials initialized with: ' + json); credentials = JSON.parse(json); credentials.Servers = credentials.Servers || []; } @@ -127,5 +123,4 @@ } }; }; - -})(window, window.JSON); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/events.js b/dashboard-ui/bower_components/emby-apiclient/events.js index 6d99c8d267..fabec6f0d0 100644 --- a/dashboard-ui/bower_components/emby-apiclient/events.js +++ b/dashboard-ui/bower_components/emby-apiclient/events.js @@ -1,20 +1,61 @@ -(function (globalScope) { +define([], function () { - globalScope.Events = { + function getCallbacks(obj, name) { - on: function (obj, eventName, selector, fn) { + ensureCallbacks(obj, name); - jQuery(obj).on(eventName, selector, fn); + return obj._callbacks[name]; + } + + function ensureCallbacks(obj, name) { + + if (!obj) { + throw new Error("obj cannot be null!"); + } + + obj._callbacks = obj._callbacks || {}; + + if (!obj._callbacks[name]) { + obj._callbacks[name] = []; + } + } + + return { + + on: function (obj, eventName, fn) { + + var list = getCallbacks(obj, eventName); + + if (list.indexOf(fn) == -1) { + list.push(fn); + } }, - off: function (obj, eventName, selector, fn) { + off: function (obj, eventName, fn) { - jQuery(obj).off(eventName, selector, fn); + var list = getCallbacks(obj, eventName); + obj._callbacks[name] = list.filter(function (i) { + return i != fn; + }); }, - trigger: function (obj, eventName, params) { - jQuery(obj).trigger(eventName, params); + trigger: function (obj, eventName) { + + var eventObject = { + type: eventName + }; + + var eventArgs = []; + eventArgs.push(eventObject); + + var additionalArgs = arguments[2] || []; + for (var i = 0, length = additionalArgs.length; i < length; i++) { + eventArgs.push(additionalArgs[i]); + } + + getCallbacks(obj, eventName).forEach(function (c) { + c.apply(obj, eventArgs); + }); } }; - -})(window); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/logger.js b/dashboard-ui/bower_components/emby-apiclient/logger.js deleted file mode 100644 index ee3cc720a7..0000000000 --- a/dashboard-ui/bower_components/emby-apiclient/logger.js +++ /dev/null @@ -1,6 +0,0 @@ -var Logger = { - - log: function (str) { - console.log(str); - } -}; \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js b/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js index f546e924da..9fa5d2ca74 100644 --- a/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js +++ b/dashboard-ui/bower_components/emby-apiclient/sync/contentuploader.js @@ -21,7 +21,7 @@ photos = getFilesToUpload(photos, uploadHistory); - Logger.log('Found ' + photos.length + ' files to upload'); + console.log('Found ' + photos.length + ' files to upload'); uploadNext(photos, 0, server, apiClient, deferred); @@ -91,16 +91,16 @@ api_key: apiClient.accessToken() }); - Logger.log('Uploading file to ' + url); + console.log('Uploading file to ' + url); new MediaBrowser.FileUpload().upload(file, name, url).then(function () { - Logger.log('File upload succeeded'); + console.log('File upload succeeded'); deferred.resolve(); }, function () { - Logger.log('File upload failed'); + console.log('File upload failed'); deferred.reject(); }); }); diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js b/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js index 10ba774649..5ee7a511fd 100644 --- a/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js +++ b/dashboard-ui/bower_components/emby-apiclient/sync/mediasync.js @@ -34,7 +34,7 @@ function reportOfflineActions(apiClient, serverInfo) { - Logger.log('Begin reportOfflineActions'); + console.log('Begin reportOfflineActions'); var deferred = DeferredBuilder.Deferred(); @@ -65,7 +65,7 @@ function syncData(apiClient, serverInfo, syncUserItemAccess) { - Logger.log('Begin syncData'); + console.log('Begin syncData'); var deferred = DeferredBuilder.Deferred(); @@ -93,7 +93,7 @@ function afterSyncData(apiClient, serverInfo, enableSyncUserItemAccess, syncDataResult, deferred) { - Logger.log('Begin afterSyncData'); + console.log('Begin afterSyncData'); removeLocalItems(syncDataResult, serverInfo.Id).then(function (result) { @@ -115,7 +115,7 @@ function removeLocalItems(syncDataResult, serverId) { - Logger.log('Begin removeLocalItems'); + console.log('Begin removeLocalItems'); var deferred = DeferredBuilder.Deferred(); @@ -144,7 +144,7 @@ function removeLocalItem(itemId, serverId) { - Logger.log('Begin removeLocalItem'); + console.log('Begin removeLocalItem'); var deferred = DeferredBuilder.Deferred(); @@ -162,7 +162,7 @@ function getNewMedia(apiClient, serverInfo, options) { - Logger.log('Begin getNewMedia'); + console.log('Begin getNewMedia'); var deferred = DeferredBuilder.Deferred(); @@ -199,7 +199,7 @@ function getNewItem(jobItem, apiClient, serverInfo, options) { - Logger.log('Begin getNewItem'); + console.log('Begin getNewItem'); var deferred = DeferredBuilder.Deferred(); @@ -239,7 +239,7 @@ function downloadMedia(apiClient, jobItem, localItem, options) { - Logger.log('Begin downloadMedia'); + console.log('Begin downloadMedia'); var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -250,7 +250,7 @@ var localPath = localItem.LocalPath; - Logger.log('Downloading media. Url: ' + url + '. Local path: ' + localPath); + console.log('Downloading media. Url: ' + url + '. Local path: ' + localPath); options = options || {}; @@ -275,7 +275,7 @@ function getImages(apiClient, jobItem, localItem) { - Logger.log('Begin getImages'); + console.log('Begin getImages'); var deferred = DeferredBuilder.Deferred(); getNextImage(0, apiClient, localItem, deferred); @@ -285,7 +285,7 @@ function getNextImage(index, apiClient, localItem, deferred) { - Logger.log('Begin getNextImage'); + console.log('Begin getNextImage'); if (index >= 4) { deferred.resolve(); @@ -347,7 +347,7 @@ function downloadImage(apiClient, serverId, itemId, imageTag, imageType) { - Logger.log('Begin downloadImage'); + console.log('Begin downloadImage'); var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { @@ -379,13 +379,13 @@ function getSubtitles(apiClient, jobItem, localItem) { - Logger.log('Begin getSubtitles'); + console.log('Begin getSubtitles'); var deferred = DeferredBuilder.Deferred(); require(['localassetmanager'], function () { if (!jobItem.Item.MediaSources.length) { - logger.Error("Cannot download subtitles because video has no media source info."); + console.log("Cannot download subtitles because video has no media source info."); deferred.resolve(); return; } @@ -423,7 +423,7 @@ function getItemSubtitle(file, apiClient, jobItem, localItem, mediaSource) { - Logger.log('Begin getItemSubtitle'); + console.log('Begin getItemSubtitle'); var deferred = DeferredBuilder.Deferred(); var subtitleStream = mediaSource.MediaStreams.filter(function (m) { @@ -433,7 +433,7 @@ if (!subtitleStream) { // We shouldn't get in here, but let's just be safe anyway - Logger.log("Cannot download subtitles because matching stream info wasn't found."); + console.log("Cannot download subtitles because matching stream info wasn't found."); deferred.reject(); return; } @@ -459,7 +459,7 @@ } function syncUserItemAccess(syncDataResult, serverId) { - Logger.log('Begin syncUserItemAccess'); + console.log('Begin syncUserItemAccess'); var deferred = DeferredBuilder.Deferred(); @@ -492,7 +492,7 @@ } function syncUserAccessForItem(itemId, syncDataResult) { - Logger.log('Begin syncUserAccessForItem'); + console.log('Begin syncUserAccessForItem'); var deferred = DeferredBuilder.Deferred(); diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/multiserversync.js b/dashboard-ui/bower_components/emby-apiclient/sync/multiserversync.js index 4521ce898e..9f49af4f1a 100644 --- a/dashboard-ui/bower_components/emby-apiclient/sync/multiserversync.js +++ b/dashboard-ui/bower_components/emby-apiclient/sync/multiserversync.js @@ -6,38 +6,37 @@ self.sync = function (options) { - var deferred = DeferredBuilder.Deferred(); + return new Promise(function (resolve, reject) { - var servers = connectionManager.getSavedServers(); + var servers = connectionManager.getSavedServers(); - syncNext(servers, 0, options, deferred); - - return deferred.promise(); + syncNext(servers, 0, options, resolve, reject); + }); }; - function syncNext(servers, index, options, deferred) { + function syncNext(servers, index, options, resolve, reject) { var length = servers.length; if (index >= length) { - deferred.resolve(); + resolve(); return; } var server = servers[index]; - Logger.log("Creating ServerSync to server: " + server.Id); + console.log("Creating ServerSync to server: " + server.Id); require(['serversync'], function () { new MediaBrowser.ServerSync(connectionManager).sync(server, options).then(function () { - syncNext(servers, index + 1, options, deferred); + syncNext(servers, index + 1, options, resolve, reject); }, function () { - syncNext(servers, index + 1, options, deferred); + syncNext(servers, index + 1, options, resolve, reject); }); }); } diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/offlineusersync.js b/dashboard-ui/bower_components/emby-apiclient/sync/offlineusersync.js index 2ae3b810b0..b77c8e512d 100644 --- a/dashboard-ui/bower_components/emby-apiclient/sync/offlineusersync.js +++ b/dashboard-ui/bower_components/emby-apiclient/sync/offlineusersync.js @@ -6,62 +6,51 @@ self.sync = function (apiClient, server) { - var deferred = DeferredBuilder.Deferred(); + return new Promise(function (resolve, reject) { - var users = server.Users || []; - syncNext(users, 0, deferred, apiClient, server); - - return deferred.promise(); + var users = server.Users || []; + syncNext(users, 0, resolve, reject, apiClient, server); + }); }; - function syncNext(users, index, deferred, apiClient, server) { + function syncNext(users, index, resolve, reject, apiClient, server) { var length = users.length; if (index >= length) { - deferred.resolve(); + resolve(); return; } - syncUser(users[index], apiClient).then(function () { + var onFinish = function() { + syncNext(users, index + 1, resolve, reject, apiClient, server); + }; - syncNext(users, index + 1, deferred, apiClient, server); - }, function () { - syncNext(users, index + 1, deferred, apiClient, server); - }); + syncUser(users[index], apiClient).then(onFinish, onFinish); } function syncUser(user, apiClient) { - var deferred = DeferredBuilder.Deferred(); + return new Promise(function (resolve, reject) { - apiClient.getOfflineUser(user.Id).then(function (result) { + apiClient.getOfflineUser(user.Id).then(function (result) { - require(['localassetmanager'], function () { + require(['localassetmanager'], function () { - LocalAssetManager.saveOfflineUser(result).then(function () { - deferred.resolve(); - }, function () { - deferred.resolve(); + LocalAssetManager.saveOfflineUser(result).then(resolve, resolve); }); - }); - }, function () { + }, function () { - // TODO: We should only delete if there's a 401 response + // TODO: We should only delete if there's a 401 response - require(['localassetmanager'], function () { + require(['localassetmanager'], function () { - LocalAssetManager.deleteOfflineUser(user.Id).then(function () { - deferred.resolve(); - }, function () { - deferred.resolve(); + LocalAssetManager.deleteOfflineUser(user.Id).then(resolve, resolve); }); }); }); - - return deferred.promise(); } } diff --git a/dashboard-ui/bower_components/emby-apiclient/sync/serversync.js b/dashboard-ui/bower_components/emby-apiclient/sync/serversync.js index ae4234a2f1..e90de0cbb8 100644 --- a/dashboard-ui/bower_components/emby-apiclient/sync/serversync.js +++ b/dashboard-ui/bower_components/emby-apiclient/sync/serversync.js @@ -6,13 +6,13 @@ self.sync = function (server, options) { - var deferred = DeferredBuilder.Deferred(); - if (!server.AccessToken && !server.ExchangeToken) { - Logger.log('Skipping sync to server ' + server.Id + ' because there is no saved authentication information.'); - deferred.resolve(); - return deferred.promise(); + console.log('Skipping sync to server ' + server.Id + ' because there is no saved authentication information.'); + return new Promise(function (resolve, reject) { + + resolve(); + }); } var connectionOptions = { @@ -21,31 +21,25 @@ reportCapabilities: false }; - connectionManager.connectToServer(server, connectionOptions).then(function (result) { + return connectionManager.connectToServer(server, connectionOptions).then(function (result) { if (result.State == MediaBrowser.ConnectionState.SignedIn) { - performSync(server, options, deferred); + return performSync(server, options); } else { - Logger.log('Unable to connect to server id: ' + server.Id); - deferred.reject(); + console.log('Unable to connect to server id: ' + server.Id); + return Promise.reject(); } - }, function () { + }, function (err) { - Logger.log('Unable to connect to server id: ' + server.Id); - deferred.reject(); + console.log('Unable to connect to server id: ' + server.Id); + throw err; }); - - return deferred.promise(); }; - function performSync(server, options, deferred) { + function performSync(server, options) { - Logger.log("Creating ContentUploader to server: " + server.Id); - - var nextAction = function () { - syncOfflineUsers(server, options, deferred); - }; + console.log("Creating ContentUploader to server: " + server.Id); options = options || {}; @@ -56,70 +50,77 @@ } if (!uploadPhotos) { - nextAction(); - return; + return syncOfflineUsers(server, options); } - require(['contentuploader'], function () { + return new Promise(function (resolve, reject) { - new MediaBrowser.ContentUploader(connectionManager).uploadImages(server).then(function () { + require(['contentuploader'], function () { - Logger.log("ContentUploaded succeeded to server: " + server.Id); + new MediaBrowser.ContentUploader(connectionManager).uploadImages(server).then(function () { - nextAction(); + console.log("ContentUploaded succeeded to server: " + server.Id); - }, function () { + syncOfflineUsers(server, options).then(resolve, reject); - Logger.log("ContentUploaded failed to server: " + server.Id); + }, function () { - nextAction(); + console.log("ContentUploaded failed to server: " + server.Id); + + syncOfflineUsers(server, options).then(resolve, reject); + }); }); }); } - function syncOfflineUsers(server, options, deferred) { + function syncOfflineUsers(server, options) { if (options.syncOfflineUsers === false) { - syncMedia(server, options, deferred); - return; + return syncMedia(server, options); } - require(['offlineusersync'], function () { + return new Promise(function (resolve, reject) { - var apiClient = connectionManager.getApiClient(server.Id); + require(['offlineusersync'], function () { - new MediaBrowser.OfflineUserSync().sync(apiClient, server).then(function () { + var apiClient = connectionManager.getApiClient(server.Id); - Logger.log("OfflineUserSync succeeded to server: " + server.Id); + new MediaBrowser.OfflineUserSync().sync(apiClient, server).then(function () { - syncMedia(server, options, deferred); + console.log("OfflineUserSync succeeded to server: " + server.Id); - }, function () { + syncMedia(server, options).then(resolve, reject); - Logger.log("OfflineUserSync failed to server: " + server.Id); + }, function () { - deferred.reject(); + console.log("OfflineUserSync failed to server: " + server.Id); + + reject(); + }); }); }); } - function syncMedia(server, options, deferred) { + function syncMedia(server, options) { - require(['mediasync'], function () { + return new Promise(function (resolve, reject) { - var apiClient = connectionManager.getApiClient(server.Id); + require(['mediasync'], function () { - new MediaBrowser.MediaSync().sync(apiClient, server, options).then(function () { + var apiClient = connectionManager.getApiClient(server.Id); - Logger.log("MediaSync succeeded to server: " + server.Id); + new MediaBrowser.MediaSync().sync(apiClient, server, options).then(function () { - deferred.resolve(); + console.log("MediaSync succeeded to server: " + server.Id); - }, function () { + resolve(); - Logger.log("MediaSync failed to server: " + server.Id); + }, function () { - deferred.reject(); + console.log("MediaSync failed to server: " + server.Id); + + reject(); + }); }); }); } diff --git a/dashboard-ui/bower_components/polymer/polymer.html b/dashboard-ui/bower_components/polymer/polymer.html index 0df16caeb0..8caf5ed230 100644 --- a/dashboard-ui/bower_components/polymer/polymer.html +++ b/dashboard-ui/bower_components/polymer/polymer.html @@ -741,7 +741,7 @@ prevent = dy > dx; prevent = dx > dy; } if (prevent) { -//ev.preventDefault(); +ev.preventDefault(); } else { Gestures.prevent('track'); } diff --git a/dashboard-ui/bower_components/requirejs/.bower.json b/dashboard-ui/bower_components/requirejs/.bower.json index 2219991032..255c2cfd11 100644 --- a/dashboard-ui/bower_components/requirejs/.bower.json +++ b/dashboard-ui/bower_components/requirejs/.bower.json @@ -22,6 +22,6 @@ "commit": "9cd0b99417eac61e890d11c5119f2e45e752c999" }, "_source": "git://github.com/jrburke/requirejs-bower.git", - "_target": "~2.1.19", + "_target": "^2.1.22", "_originalSource": "requirejs" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-apiclient/deferred.js b/dashboard-ui/legacy/deferred.js similarity index 100% rename from dashboard-ui/bower_components/emby-apiclient/deferred.js rename to dashboard-ui/legacy/deferred.js diff --git a/dashboard-ui/scripts/addpluginpage.js b/dashboard-ui/scripts/addpluginpage.js index de7453996c..f0093d2022 100644 --- a/dashboard-ui/scripts/addpluginpage.js +++ b/dashboard-ui/scripts/addpluginpage.js @@ -91,7 +91,7 @@ html += ""; } - Events.trigger($('#latestReviews', page).html(html)[0], 'create'); + $('#latestReviews', page).html(html).trigger('create'); }); } diff --git a/dashboard-ui/scripts/alphapicker.js b/dashboard-ui/scripts/alphapicker.js index 01edb28030..84bcfe93eb 100644 --- a/dashboard-ui/scripts/alphapicker.js +++ b/dashboard-ui/scripts/alphapicker.js @@ -41,7 +41,7 @@ picker.innerHTML = getPickerHtml(); - Events.on(picker, 'click', 'a', function () { + $(picker).on('click', 'a', function () { var elem = this; @@ -52,9 +52,9 @@ if (!isSelected) { elem.classList.add('selectedCharacter'); - Events.trigger(picker, 'alphaselect', [this.innerHTML]); + $(picker).trigger('alphaselect', [this.innerHTML]); } else { - Events.trigger(picker, 'alphaclear'); + $(picker).trigger('alphaclear'); } }); } diff --git a/dashboard-ui/scripts/chromecast.js b/dashboard-ui/scripts/chromecast.js index 3335ef8e70..067d8caca3 100644 --- a/dashboard-ui/scripts/chromecast.js +++ b/dashboard-ui/scripts/chromecast.js @@ -843,7 +843,7 @@ MediaController.registerPlayer(new chromecastPlayer()); - $(MediaController).on('playerchange', function (e, newPlayer, newTarget) { + Events.on(MediaController, 'playerchange', function (e, newPlayer, newTarget) { if (newPlayer.name == PlayerName) { if (castPlayer.deviceState != DEVICE_STATE.ACTIVE && castPlayer.isInitialized) { castPlayer.launchApp(); diff --git a/dashboard-ui/scripts/dashboardpage.js b/dashboard-ui/scripts/dashboardpage.js index 18901b94c0..a249100fcb 100644 --- a/dashboard-ui/scripts/dashboardpage.js +++ b/dashboard-ui/scripts/dashboardpage.js @@ -22,8 +22,8 @@ DashboardPage.pollForInfo(page); DashboardPage.startInterval(apiClient); - $(apiClient).on("websocketmessage", DashboardPage.onWebSocketMessage) - .on("websocketopen", DashboardPage.onWebSocketOpen); + Events.on(apiClient, 'websocketmessage', DashboardPage.onWebSocketMessage); + Events.on(apiClient, 'websocketopen', DashboardPage.onWebSocketOpen); DashboardPage.lastAppUpdateCheck = null; DashboardPage.lastPluginUpdateCheck = null; @@ -53,7 +53,8 @@ var apiClient = ApiClient; if (apiClient) { - $(apiClient).off("websocketmessage", DashboardPage.onWebSocketMessage).off("websocketopen", DashboardPage.onWebSocketConnectionChange).off("websocketerror", DashboardPage.onWebSocketConnectionChange).off("websocketclose", DashboardPage.onWebSocketConnectionChange); + Events.off(apiClient, 'websocketmessage', DashboardPage.onWebSocketMessage); + Events.off(apiClient, 'websocketopen', DashboardPage.onWebSocketOpen); DashboardPage.stopInterval(apiClient); } @@ -1195,7 +1196,8 @@ $(document).on('pageshow', "#dashboardPage", DashboardPage.onPageShow).on('pageb return; } - $(apiClient).on('websocketmessage', onSocketMessage).on('websocketopen', onSocketOpen); + Events.on(apiClient, 'websocketopen', onSocketOpen); + Events.on(apiClient, 'websocketmessage', onSocketMessage); } function startListening(apiClient) { @@ -1239,7 +1241,8 @@ $(document).on('pageshow', "#dashboardPage", DashboardPage.onPageShow).on('pageb var apiClient = ApiClient; if (apiClient) { - $(apiClient).off('websocketopen', onSocketOpen).off('websocketmessage', onSocketOpen); + Events.off(apiClient, 'websocketopen', onSocketOpen); + Events.off(apiClient, 'websocketmessage', onSocketMessage); stopListening(apiClient); } diff --git a/dashboard-ui/scripts/edititemmetadata.js b/dashboard-ui/scripts/edititemmetadata.js index 337456815d..c9d348a6c7 100644 --- a/dashboard-ui/scripts/edititemmetadata.js +++ b/dashboard-ui/scripts/edititemmetadata.js @@ -1098,12 +1098,12 @@ function bindItemChanged(page) { - $(ApiClient).on("websocketmessage", onWebSocketMessageReceived); + Events.on(ApiClient, "websocketmessage", onWebSocketMessageReceived); } function unbindItemChanged(page) { - $(ApiClient).off("websocketmessage", onWebSocketMessageReceived); + Events.off(ApiClient, "websocketmessage", onWebSocketMessageReceived); } function onItemDeleted(e, itemId) { @@ -1221,13 +1221,13 @@ var page = this; - $(LibraryBrowser).on('itemdeleting', onItemDeleted); + Events.on(LibraryBrowser, 'itemdeleting', onItemDeleted); reload(page); }).on('pagebeforehide', "#editItemMetadataPage", function () { var page = this; - $(LibraryBrowser).off('itemdeleting', onItemDeleted); + Events.off(LibraryBrowser, 'itemdeleting', onItemDeleted); unbindItemChanged(page); }); diff --git a/dashboard-ui/scripts/episodes.js b/dashboard-ui/scripts/episodes.js index 26e6ec0e2b..3bd4d7a4df 100644 --- a/dashboard-ui/scripts/episodes.js +++ b/dashboard-ui/scripts/episodes.js @@ -71,7 +71,6 @@ page.querySelector('.listTopPaging').innerHTML = pagingHtml; updateFilterControls(page, viewPanel); - var trigger = false; if (view == "List") { @@ -79,7 +78,6 @@ items: result.Items, sortBy: query.SortBy }); - trigger = true; } else if (view == "Poster") { html += LibraryBrowser.getPosterViewHtml({ @@ -108,10 +106,6 @@ elem.innerHTML = html + pagingHtml; ImageLoader.lazyChildren(elem); - if (trigger) { - Events.trigger(elem, 'create'); - } - $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; reloadItems(page, viewPanel); diff --git a/dashboard-ui/scripts/htmlmediarenderer.js b/dashboard-ui/scripts/htmlmediarenderer.js index 4bc69919ba..2db1973821 100644 --- a/dashboard-ui/scripts/htmlmediarenderer.js +++ b/dashboard-ui/scripts/htmlmediarenderer.js @@ -448,28 +448,28 @@ if (elem.tagName == 'AUDIO') { - Events.off(elem, 'timeupdate', onTimeUpdate); - Events.off(elem, 'ended', onEnded); - Events.off(elem, 'volumechange', onVolumeChange); - Events.off(elem, 'playing', onOneAudioPlaying); - Events.off(elem, 'play', onPlay); - Events.off(elem, 'pause', onPause); - Events.off(elem, 'playing', onPlaying); - Events.off(elem, 'error', onError); + elem.removeEventListener('timeupdate', onTimeUpdate); + elem.removeEventListener('ended', onEnded); + elem.removeEventListener('volumechange', onVolumeChange); + elem.removeEventListener('playing', onOneAudioPlaying); + elem.removeEventListener('play', onPlay); + elem.removeEventListener('pause', onPause); + elem.removeEventListener('playing', onPlaying); + elem.removeEventListener('error', onError); } else { - Events.off(elem, 'loadedmetadata', onLoadedMetadata); - Events.off(elem, 'playing', onOneVideoPlaying); - Events.off(elem, 'timeupdate', onTimeUpdate); - Events.off(elem, 'ended', onEnded); - Events.off(elem, 'volumechange', onVolumeChange); - Events.off(elem, 'play', onPlay); - Events.off(elem, 'pause', onPause); - Events.off(elem, 'playing', onPlaying); - Events.off(elem, 'click', onClick); - Events.off(elem, 'dblclick', onDblClick); - Events.off(elem, 'error', onError); + elem.removeEventListener('loadedmetadata', onLoadedMetadata); + elem.removeEventListener('playing', onOneVideoPlaying); + elem.removeEventListener('timeupdate', onTimeUpdate); + elem.removeEventListener('ended', onEnded); + elem.removeEventListener('volumechange', onVolumeChange); + elem.removeEventListener('play', onPlay); + elem.removeEventListener('pause', onPause); + elem.removeEventListener('playing', onPlaying); + elem.removeEventListener('click', onClick); + elem.removeEventListener('dblclick', onDblClick); + elem.removeEventListener('error', onError); } if (elem.tagName.toLowerCase() != 'audio') { diff --git a/dashboard-ui/scripts/indexpage.js b/dashboard-ui/scripts/indexpage.js index c0aedf3cf9..31af33a6dd 100644 --- a/dashboard-ui/scripts/indexpage.js +++ b/dashboard-ui/scripts/indexpage.js @@ -286,13 +286,13 @@ pageIdOn('pageshow', "indexPage", function () { var page = this; - $(MediaController).on('playbackstop', onPlaybackStop); + Events.on(MediaController, 'playbackstop', onPlaybackStop); }); pageIdOn('pagebeforehide', "indexPage", function () { var page = this; - $(MediaController).off('playbackstop', onPlaybackStop); + Events.off(MediaController, 'playbackstop', onPlaybackStop); }); function onPlaybackStop(e, state) { diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js index 47b6559195..98d520f34c 100644 --- a/dashboard-ui/scripts/librarylist.js +++ b/dashboard-ui/scripts/librarylist.js @@ -1375,7 +1375,8 @@ } function initializeApiClient(apiClient) { - $(apiClient).off('websocketmessage', onWebSocketMessage).on('websocketmessage', onWebSocketMessage); + Events.off(apiClient, "websocketmessage", onWebSocketMessage); + Events.on(apiClient, "websocketmessage", onWebSocketMessage); } function clearRefreshTimes() { @@ -1386,7 +1387,7 @@ initializeApiClient(window.ApiClient); } - $(ConnectionManager).on('apiclientcreated', function (e, apiClient) { + Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) { initializeApiClient(apiClient); }); diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index ab7e417ec0..d9411773e8 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -204,7 +204,7 @@ refreshLibraryInfoInDrawer(user, drawer); refreshBottomUserInfoInDrawer(user, drawer); - Events.trigger(document, 'libraryMenuCreated'); + document.dispatchEvent(new CustomEvent("libraryMenuCreated", {})); updateLibraryMenu(user.localUser); } diff --git a/dashboard-ui/scripts/logpage.js b/dashboard-ui/scripts/logpage.js index e1b0584053..30cce92253 100644 --- a/dashboard-ui/scripts/logpage.js +++ b/dashboard-ui/scripts/logpage.js @@ -43,7 +43,7 @@ html += ''; - Events.trigger($('.serverLogs', page).html(html)[0], 'create'); + $('.serverLogs', page).html(html).trigger('create'); }); }); diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js index ccd9df200b..ca8316475a 100644 --- a/dashboard-ui/scripts/mediacontroller.js +++ b/dashboard-ui/scripts/mediacontroller.js @@ -1026,7 +1026,8 @@ } function initializeApiClient(apiClient) { - $(apiClient).off("websocketmessage", onWebSocketMessageReceived).on("websocketmessage", onWebSocketMessageReceived); + Events.off(apiClient, "websocketmessage", onWebSocketMessageReceived); + Events.on(apiClient, "websocketmessage", onWebSocketMessageReceived); } MediaController.init = function () { @@ -1034,7 +1035,7 @@ initializeApiClient(window.ApiClient); } - $(ConnectionManager).on('apiclientcreated', function (e, apiClient) { + Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) { initializeApiClient(apiClient); }); }; diff --git a/dashboard-ui/scripts/movies.js b/dashboard-ui/scripts/movies.js index 38aafde2b4..7d82aff9ef 100644 --- a/dashboard-ui/scripts/movies.js +++ b/dashboard-ui/scripts/movies.js @@ -72,7 +72,6 @@ page.querySelector('.listTopPaging').innerHTML = pagingHtml; updateFilterControls(page); - var trigger = false; if (view == "Thumb") { html = LibraryBrowser.getPosterViewHtml({ @@ -112,7 +111,6 @@ items: result.Items, sortBy: query.SortBy }); - trigger = true; } else if (view == "Poster") { html = LibraryBrowser.getPosterViewHtml({ @@ -150,10 +148,6 @@ elem.innerHTML = html + pagingHtml; ImageLoader.lazyChildren(elem); - if (trigger) { - Events.trigger(elem, 'create'); - } - $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; reloadItems(page, viewPanel); diff --git a/dashboard-ui/scripts/moviesrecommended.js b/dashboard-ui/scripts/moviesrecommended.js index 4d382b9dce..eafaa483f9 100644 --- a/dashboard-ui/scripts/moviesrecommended.js +++ b/dashboard-ui/scripts/moviesrecommended.js @@ -370,13 +370,13 @@ } } - $(MediaController).on('playbackstop', onPlaybackStop); + Events.on(MediaController, 'playbackstop', onPlaybackStop); }); pageIdOn('pagebeforehide', "moviesPage", function () { var page = this; - $(MediaController).off('playbackstop', onPlaybackStop); + Events.off(MediaController, 'playbackstop', onPlaybackStop); }); function onPlaybackStop(e, state) { diff --git a/dashboard-ui/scripts/musicgenres.js b/dashboard-ui/scripts/musicgenres.js index 695d01329c..db617addef 100644 --- a/dashboard-ui/scripts/musicgenres.js +++ b/dashboard-ui/scripts/musicgenres.js @@ -66,7 +66,6 @@ items: result.Items, shape: "backdrop", preferThumb: true, - context: 'music', showItemCounts: true, lazy: true, centerText: true, @@ -79,13 +78,21 @@ items: result.Items, shape: "backdrop", preferThumb: true, - context: 'music', showItemCounts: true, cardLayout: true, lazy: true, showTitle: true }); } + else if (view == "Poster") { + html = LibraryBrowser.getPosterViewHtml({ + items: result.Items, + shape: "portrait", + centerText: true, + showItemCounts: true, + lazy: true + }); + } var elem = page.querySelector('#items'); elem.innerHTML = html; diff --git a/dashboard-ui/scripts/myprofile.js b/dashboard-ui/scripts/myprofile.js index 8c45337530..518d35ef40 100644 --- a/dashboard-ui/scripts/myprofile.js +++ b/dashboard-ui/scripts/myprofile.js @@ -11,7 +11,7 @@ ApiClient.getUser(userId).then(function (user) { $('.username', page).html(user.Name); - Events.trigger($('#uploadUserImage', page).val('')[0], 'change'); + $('#uploadUserImage', page).val('').trigger('change'); Dashboard.setPageTitle(user.Name); diff --git a/dashboard-ui/scripts/notifications.js b/dashboard-ui/scripts/notifications.js index a89747208a..205d2a1234 100644 --- a/dashboard-ui/scripts/notifications.js +++ b/dashboard-ui/scripts/notifications.js @@ -177,14 +177,15 @@ } function initializeApiClient(apiClient) { - $(apiClient).off("websocketmessage", onWebSocketMessage).on("websocketmessage", onWebSocketMessage); + Events.off(apiClient, "websocketmessage", onWebSocketMessage); + Events.on(apiClient, "websocketmessage", onWebSocketMessage); } if (window.ApiClient) { initializeApiClient(window.ApiClient); } - $(ConnectionManager).on('apiclientcreated', function (e, apiClient) { + Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) { initializeApiClient(apiClient); }); diff --git a/dashboard-ui/scripts/nowplayingbar.js b/dashboard-ui/scripts/nowplayingbar.js index abdc6f96fa..d28889fe0a 100644 --- a/dashboard-ui/scripts/nowplayingbar.js +++ b/dashboard-ui/scripts/nowplayingbar.js @@ -589,11 +589,11 @@ if (currentPlayer) { - $(currentPlayer).off('playbackstart', onPlaybackStart) - .off('playbackstop', onPlaybackStopped) - .off('volumechange', onVolumeChanged) - .off('playstatechange', onStateChanged) - .off('positionchange', onStateChanged); + Events.off(currentPlayer, 'playbackstart', onPlaybackStart); + Events.off(currentPlayer, 'playbackstop', onPlaybackStopped); + Events.off(currentPlayer, 'volumechange', onStateChanged); + Events.off(currentPlayer, 'playstatechange', onVolumeChanged); + Events.off(currentPlayer, 'positionchange', onStateChanged); currentPlayer.endPlayerUpdates(); currentPlayer = null; @@ -633,11 +633,11 @@ onStateChanged.call(player, { type: 'init' }, state); }); - $(player).on('playbackstart', onPlaybackStart) - .on('playbackstop', onPlaybackStopped) - .on('volumechange', onVolumeChanged) - .on('playstatechange', onStateChanged) - .on('positionchange', onStateChanged); + Events.on(player, 'playbackstart', onPlaybackStart); + Events.on(player, 'playbackstop', onPlaybackStopped); + Events.on(player, 'volumechange', onStateChanged); + Events.on(player, 'playstatechange', onVolumeChanged); + Events.on(player, 'positionchange', onStateChanged); } Events.on(MediaController, 'playerchange', function () { diff --git a/dashboard-ui/scripts/nowplayingpage.js b/dashboard-ui/scripts/nowplayingpage.js index bec9196eaa..331d692499 100644 --- a/dashboard-ui/scripts/nowplayingpage.js +++ b/dashboard-ui/scripts/nowplayingpage.js @@ -637,11 +637,11 @@ if (currentPlayer) { - $(currentPlayer).off('playbackstart', onPlaybackStart) - .off('playbackstop', onPlaybackStopped) - .off('volumechange', onStateChanged) - .off('playstatechange', onStateChanged) - .off('positionchange', onStateChanged); + Events.off(currentPlayer, 'playbackstart', onPlaybackStart); + Events.off(currentPlayer, 'playbackstop', onPlaybackStopped); + Events.off(currentPlayer, 'volumechange', onStateChanged); + Events.off(currentPlayer, 'playstatechange', onStateChanged); + Events.off(currentPlayer, 'positionchange', onStateChanged); currentPlayer.endPlayerUpdates(); currentPlayer = null; @@ -663,11 +663,11 @@ onStateChanged.call(player, { type: 'init' }, state); }); - $(player).on('playbackstart', onPlaybackStart) - .on('playbackstop', onPlaybackStopped) - .on('volumechange', onStateChanged) - .on('playstatechange', onStateChanged) - .on('positionchange', onStateChanged); + Events.on(player, 'playbackstart', onPlaybackStart); + Events.on(player, 'playbackstop', onPlaybackStopped); + Events.on(player, 'volumechange', onStateChanged); + Events.on(player, 'playstatechange', onStateChanged); + Events.on(player, 'positionchange', onStateChanged); var playerInfo = MediaController.getPlayerInfo(); @@ -820,7 +820,7 @@ } }); - $(MediaController).on('playerchange', function () { + Events.on(MediaController, 'playerchange', function () { updateCastIcon(page); }); @@ -832,7 +832,7 @@ currentImgUrl = null; - $(MediaController).on('playerchange', onPlayerChange); + Events.on(MediaController, 'playerchange', onPlayerChange); bindToPlayer(page, MediaController.getCurrentPlayer()); @@ -861,7 +861,7 @@ releaseCurrentPlayer(); - $(MediaController).off('playerchange', onPlayerChange); + Events.off(MediaController, 'playerchange', onPlayerChange); lastPlayerState = null; $(document.body).removeClass('hiddenViewMenuBar').removeClass('hiddenNowPlayingBar'); diff --git a/dashboard-ui/scripts/remotecontrol.js b/dashboard-ui/scripts/remotecontrol.js index d37fd24501..1244d2a1c3 100644 --- a/dashboard-ui/scripts/remotecontrol.js +++ b/dashboard-ui/scripts/remotecontrol.js @@ -385,14 +385,15 @@ } function initializeApiClient(apiClient) { - $(apiClient).on("websocketmessage", onWebSocketMessageReceived).on("websocketopen", onWebSocketConnectionChange); + Events.on(apiClient, "websocketmessage", onWebSocketMessageReceived); + Events.on(apiClient, "websocketopen", onWebSocketConnectionChange); } if (window.ApiClient) { initializeApiClient(window.ApiClient); } - $(ConnectionManager).on('apiclientcreated', function (e, apiClient) { + Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) { initializeApiClient(apiClient); }); diff --git a/dashboard-ui/scripts/scheduledtaskpage.js b/dashboard-ui/scripts/scheduledtaskpage.js index ab7d765dc4..e957bd8359 100644 --- a/dashboard-ui/scripts/scheduledtaskpage.js +++ b/dashboard-ui/scripts/scheduledtaskpage.js @@ -154,7 +154,7 @@ var ScheduledTaskPage = { var page = $.mobile.activePage; - Events.trigger($('#selectTriggerType', page).val('DailyTrigger')[0], 'change'); + $('#selectTriggerType', page).val('DailyTrigger').trigger('change'); $('#popupAddTrigger', page).on("popupafteropen", function () { $('#addTriggerForm input:first', this).focus(); diff --git a/dashboard-ui/scripts/scheduledtaskspage.js b/dashboard-ui/scripts/scheduledtaskspage.js index 33903a6672..82f1e89453 100644 --- a/dashboard-ui/scripts/scheduledtaskspage.js +++ b/dashboard-ui/scripts/scheduledtaskspage.js @@ -284,13 +284,15 @@ reloadList(page); }); - $(ApiClient).on("websocketmessage", onWebSocketMessage).on("websocketopen", onWebSocketConnectionOpen); + Events.on(ApiClient, "websocketmessage", onWebSocketMessage); + Events.on(ApiClient, "websocketopen", onWebSocketConnectionOpen); }).on('pagebeforehide', "#scheduledTasksPage", function () { var page = this; - $(ApiClient).off("websocketmessage", onWebSocketMessage).off("websocketopen", onWebSocketConnectionOpen); + Events.off(ApiClient, "websocketmessage", onWebSocketMessage); + Events.off(ApiClient, "websocketopen", onWebSocketConnectionOpen); stopInterval(); }); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 1e9d3c330e..e3e72c12ea 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -12,6 +12,13 @@ })(); +// Compatibility +window.Logger = { + log: function(msg) { + console.log(msg); + } +}; + var Dashboard = { filterHtml: function (html) { @@ -888,7 +895,6 @@ var Dashboard = { html += ''; $('.content-primary', page).before(html); - Events.trigger(page, 'create'); } }, @@ -1605,18 +1611,20 @@ var AppInfo = {}; apiClient.getDefaultImageQuality = Dashboard.getDefaultImageQuality; apiClient.normalizeImageOptions = Dashboard.normalizeImageOptions; - $(apiClient).off("websocketmessage", Dashboard.onWebSocketMessageReceived).off('requestfail', Dashboard.onRequestFail); + Events.off(apiClient, 'websocketmessage', Dashboard.onWebSocketMessageReceived); + Events.on(apiClient, 'websocketmessage', Dashboard.onWebSocketMessageReceived); - $(apiClient).on("websocketmessage", Dashboard.onWebSocketMessageReceived).on('requestfail', Dashboard.onRequestFail); + Events.off(apiClient, 'requestfail', Dashboard.onRequestFail); + Events.on(apiClient, 'requestfail', Dashboard.onRequestFail); } //localStorage.clear(); - function createConnectionManager(capabilities) { + function createConnectionManager(credentialProviderFactory, capabilities) { var credentialKey = Dashboard.isConnectMode() ? null : 'servercredentials4'; - var credentialProvider = new MediaBrowser.CredentialProvider(credentialKey); + var credentialProvider = new credentialProviderFactory(credentialKey); - window.ConnectionManager = new MediaBrowser.ConnectionManager(Logger, credentialProvider, AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, capabilities); + window.ConnectionManager = new MediaBrowser.ConnectionManager(credentialProvider, AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, capabilities, window.devicePixelRatio); if (window.location.href.toLowerCase().indexOf('wizardstart.html') != -1) { window.ConnectionManager.clearData(); @@ -1653,12 +1661,14 @@ var AppInfo = {}; } else { - var apiClient = new MediaBrowser.ApiClient(Logger, Dashboard.serverAddress(), AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId); - apiClient.enableAutomaticNetworking = false; - ConnectionManager.addApiClient(apiClient); - Dashboard.importCss(apiClient.getUrl('Branding/Css')); - window.ApiClient = apiClient; - resolve(); + require(['apiclient'], function(apiClientFactory) { + var apiClient = new apiClientFactory(Dashboard.serverAddress(), AppInfo.appName, AppInfo.appVersion, AppInfo.deviceName, AppInfo.deviceId, window.devicePixelRatio); + apiClient.enableAutomaticNetworking = false; + ConnectionManager.addApiClient(apiClient); + Dashboard.importCss(apiClient.getUrl('Branding/Css')); + window.ApiClient = apiClient; + resolve(); + }); } }); } @@ -1779,7 +1789,12 @@ var AppInfo = {}; masonry: bowerPath + '/masonry/dist/masonry.pkgd.min', humanedate: 'components/humanedate', jQuery: bowerPath + '/jquery/dist/jquery.min', - fastclick: bowerPath + '/fastclick/lib/fastclick' + fastclick: bowerPath + '/fastclick/lib/fastclick', + events: apiClientBowerPath + '/events', + credentialprovider: apiClientBowerPath + '/credentials', + apiclient: apiClientBowerPath + '/apiclient', + connectionmanagerfactory: apiClientBowerPath + '/connectionmanager', + connectservice: apiClientBowerPath + '/connectservice' }; paths.hlsjs = bowerPath + "/hls.js/dist/hls.min"; @@ -1906,13 +1921,8 @@ var AppInfo = {}; define("fileupload", [apiClientBowerPath + "/fileupload"]); } - define("connectservice", [apiClientBowerPath + "/connectservice"]); define("apiclient-store", [apiClientBowerPath + "/store"]); - define("apiclient-events", [apiClientBowerPath + "/events"]); - define("apiclient-logger", [apiClientBowerPath + "/logger"]); - define("apiclient-credentials", [apiClientBowerPath + "/credentials"]); - define("apiclient-deferred", [apiClientBowerPath + "/deferred"]); - define("apiclient", [apiClientBowerPath + "/apiclient"]); + define("apiclient-deferred", ["legacy/deferred"]); define("connectionmanager", [apiClientBowerPath + "/connectionmanager"]); define("contentuploader", [apiClientBowerPath + "/sync/contentuploader"]); @@ -1983,6 +1993,7 @@ var AppInfo = {}; define("buttonenabled", ["legacy/buttonenabled"]); var deps = []; + deps.push('events'); if (!window.fetch) { deps.push('fetch'); @@ -1990,13 +2001,14 @@ var AppInfo = {}; deps.push('scripts/mediacontroller'); deps.push('scripts/globalize'); - deps.push('apiclient-events'); deps.push('jQuery'); deps.push('paper-drawer-panel'); - require(deps, function () { + require(deps, function (events) { + + window.Events = events; for (var i in hostingAppInfo) { AppInfo[i] = hostingAppInfo[i]; @@ -2032,6 +2044,8 @@ var AppInfo = {}; } var deps = []; + deps.push('connectionmanagerfactory'); + deps.push('credentialprovider'); if (AppInfo.isNativeApp && browserInfo.android) { require(['cordova/android/logging']); @@ -2040,11 +2054,13 @@ var AppInfo = {}; deps.push('appstorage'); deps.push('scripts/mediaplayer'); deps.push('scripts/appsettings'); - deps.push('apiclient'); - deps.push('connectionmanager'); - deps.push('apiclient-credentials'); - require(deps, function () { + require(deps, function (connectionManagerExports, credentialProviderFactory) { + + window.MediaBrowser = window.MediaBrowser || {}; + for (var i in connectionManagerExports) { + MediaBrowser[i] = connectionManagerExports[i]; + } // TODO: This needs to be deprecated, but it's used heavily $.fn.checked = function (value) { @@ -2094,8 +2110,7 @@ var AppInfo = {}; promises.push(getRequirePromise(deps)); promises.push(Globalize.ensure()); - promises.push(createConnectionManager(capabilities)); - + promises.push(createConnectionManager(credentialProviderFactory, capabilities)); Promise.all(promises).then(function () { @@ -2417,7 +2432,6 @@ var AppInfo = {}; var initialDependencies = []; initialDependencies.push('isMobile'); - initialDependencies.push('apiclient-logger'); initialDependencies.push('apiclient-store'); initialDependencies.push('scripts/extensions'); diff --git a/dashboard-ui/scripts/songs.js b/dashboard-ui/scripts/songs.js index 5079288f44..5bdff3e533 100644 --- a/dashboard-ui/scripts/songs.js +++ b/dashboard-ui/scripts/songs.js @@ -74,8 +74,6 @@ elem.innerHTML = html + pagingHtml; ImageLoader.lazyChildren(elem); - Events.trigger(elem, 'create'); - $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; reloadItems(page, viewPanel); diff --git a/dashboard-ui/scripts/syncactivity.js b/dashboard-ui/scripts/syncactivity.js index 24d3a38c93..32dd6b38e4 100644 --- a/dashboard-ui/scripts/syncactivity.js +++ b/dashboard-ui/scripts/syncactivity.js @@ -206,7 +206,6 @@ } var elem = $('.syncActivity', page).html(html).lazyChildren(); - Events.trigger(elem[0], 'create'); $('.btnJobMenu', elem).on('click', function () { showJobMenu(page, this); @@ -417,7 +416,7 @@ }); startListening(page); - $(ApiClient).on("websocketmessage", onWebSocketMessage); + Events.on(ApiClient, "websocketmessage", onWebSocketMessage); }).on('pagebeforehide', ".syncActivityPage", function () { @@ -429,7 +428,7 @@ }); stopListening(); - $(ApiClient).off("websocketmessage", onWebSocketMessage); + Events.off(ApiClient, "websocketmessage", onWebSocketMessage); }); })(); \ No newline at end of file diff --git a/dashboard-ui/scripts/syncjob.js b/dashboard-ui/scripts/syncjob.js index 213f60a5e5..16e1e25c8d 100644 --- a/dashboard-ui/scripts/syncjob.js +++ b/dashboard-ui/scripts/syncjob.js @@ -411,14 +411,14 @@ loadJob(page); startListening(page); - $(ApiClient).on("websocketmessage", onWebSocketMessage); + Events.on(ApiClient, "websocketmessage", onWebSocketMessage); }).on('pagebeforehide', ".syncJobPage", function () { var page = this; stopListening(); - $(ApiClient).off("websocketmessage", onWebSocketMessage); + Events.off(ApiClient, "websocketmessage", onWebSocketMessage); }); })(); \ No newline at end of file diff --git a/dashboard-ui/scripts/taskbutton.js b/dashboard-ui/scripts/taskbutton.js index 6f8e2105a8..98e1846bf1 100644 --- a/dashboard-ui/scripts/taskbutton.js +++ b/dashboard-ui/scripts/taskbutton.js @@ -156,7 +156,8 @@ if (options.mode == 'off') { this.off('click', onButtonClick); - $(ApiClient).off("websocketmessage", onSocketMessage).off('websocketopen', onSocketOpen); + Events.off(ApiClient, 'websocketmessage', onSocketMessage); + Events.off(ApiClient, 'websocketopen', onSocketOpen); stopInterval(); } else if (this.length) { @@ -167,7 +168,8 @@ startInterval(); - $(ApiClient).on("websocketmessage", onSocketMessage).on('websocketopen', onSocketOpen); + Events.on(ApiClient, 'websocketmessage', onSocketMessage); + Events.on(ApiClient, 'websocketopen', onSocketOpen); } return this; diff --git a/dashboard-ui/scripts/tvrecommended.js b/dashboard-ui/scripts/tvrecommended.js index 374417d9af..4b71017381 100644 --- a/dashboard-ui/scripts/tvrecommended.js +++ b/dashboard-ui/scripts/tvrecommended.js @@ -298,13 +298,13 @@ } } - $(MediaController).on('playbackstop', onPlaybackStop); + Events.on(MediaController, 'playbackstop', onPlaybackStop); }); pageIdOn('pagebeforehide', "tvRecommendedPage", function () { var page = this; - $(MediaController).off('playbackstop', onPlaybackStop); + Events.off(MediaController, 'playbackstop', onPlaybackStop); }); function onPlaybackStop(e, state) { diff --git a/dashboard-ui/scripts/tvshows.js b/dashboard-ui/scripts/tvshows.js index 8f094cd9ff..f9dbb5ed6b 100644 --- a/dashboard-ui/scripts/tvshows.js +++ b/dashboard-ui/scripts/tvshows.js @@ -52,7 +52,6 @@ var view = getPageData().view; var html = ''; - var trigger = false; var pagingHtml = LibraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, @@ -113,7 +112,6 @@ context: 'tv', sortBy: query.SortBy }); - trigger = true; } else if (view == "PosterCard") { html = LibraryBrowser.getPosterViewHtml({ @@ -142,10 +140,6 @@ elem.innerHTML = html + pagingHtml; ImageLoader.lazyChildren(elem); - if (trigger) { - Events.trigger(elem, 'create'); - } - $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; reloadItems(page, viewPanel);