diff --git a/dashboard-ui/apiclient/connectionmanager.js b/dashboard-ui/apiclient/connectionmanager.js index d1fbba9689..555ebcb5df 100644 --- a/dashboard-ui/apiclient/connectionmanager.js +++ b/dashboard-ui/apiclient/connectionmanager.js @@ -636,7 +636,6 @@ resolve({ localUser: localUser, name: connectUser ? connectUser.Name : (localUser ? localUser.Name : null), - canManageServer: localUser ? localUser.Policy.IsAdministrator : false, imageUrl: image.url, supportsImageParams: image.supportsParams }); @@ -851,8 +850,8 @@ return new Promise(function (resolve, reject) { - require(['serverdiscovery'], function () { - ServerDiscovery.findServers(1000).then(function (foundServers) { + require(['serverdiscovery'], function (serverDiscovery) { + serverDiscovery.findServers(1000).then(function (foundServers) { var servers = foundServers.map(function (foundServer) { @@ -974,12 +973,12 @@ function beginWakeServer(server) { - require(['wakeonlan'], function () { + require(['wakeonlan'], function (wakeonlan) { var infos = server.WakeOnLanInfos || []; for (var i = 0, length = infos.length; i < length; i++) { - WakeOnLan.send(infos[i]); + wakeonlan.send(infos[i]); } }); } diff --git a/dashboard-ui/apiclient/serverdiscovery.js b/dashboard-ui/apiclient/serverdiscovery.js index fe0579c303..ec0b3746c6 100644 --- a/dashboard-ui/apiclient/serverdiscovery.js +++ b/dashboard-ui/apiclient/serverdiscovery.js @@ -1,6 +1,6 @@ -(function (globalScope) { +define([], function () { - globalScope.ServerDiscovery = { + return { findServers: function (timeoutMs) { @@ -15,4 +15,4 @@ } }; -})(window); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/apiclient/wakeonlan.js b/dashboard-ui/apiclient/wakeonlan.js index 60c01db8bc..5f6dc19ae7 100644 --- a/dashboard-ui/apiclient/wakeonlan.js +++ b/dashboard-ui/apiclient/wakeonlan.js @@ -1,4 +1,4 @@ -(function (globalScope) { +define([], function () { function send(info) { @@ -8,8 +8,8 @@ }); } - globalScope.WakeOnLan = { + return { send: send }; -})(window); \ No newline at end of file +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/iron-meta/.bower.json b/dashboard-ui/bower_components/iron-meta/.bower.json index f4bfef4a7c..e1304d174b 100644 --- a/dashboard-ui/bower_components/iron-meta/.bower.json +++ b/dashboard-ui/bower_components/iron-meta/.bower.json @@ -26,14 +26,14 @@ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "main": "iron-meta.html", - "homepage": "https://github.com/polymerelements/iron-meta", + "homepage": "https://github.com/PolymerElements/iron-meta", "_release": "1.1.1", "_resolution": { "type": "version", "tag": "v1.1.1", "commit": "e171ee234b482219c9514e6f9551df48ef48bd9f" }, - "_source": "git://github.com/polymerelements/iron-meta.git", + "_source": "git://github.com/PolymerElements/iron-meta.git", "_target": "^1.0.0", - "_originalSource": "polymerelements/iron-meta" + "_originalSource": "PolymerElements/iron-meta" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-input/.bower.json b/dashboard-ui/bower_components/paper-input/.bower.json index 8d106232c1..b59e0b67c3 100644 --- a/dashboard-ui/bower_components/paper-input/.bower.json +++ b/dashboard-ui/bower_components/paper-input/.bower.json @@ -52,7 +52,7 @@ "tag": "v1.1.3", "commit": "f070288446f9e78fbe16b032ddb429a8e8015ee7" }, - "_source": "git://github.com/polymerelements/paper-input.git", - "_target": "^1.0.9", - "_originalSource": "polymerelements/paper-input" + "_source": "git://github.com/PolymerElements/paper-input.git", + "_target": "^1.0.0", + "_originalSource": "PolymerElements/paper-input" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-ripple/.bower.json b/dashboard-ui/bower_components/paper-ripple/.bower.json index 157225ee71..2f654d71c6 100644 --- a/dashboard-ui/bower_components/paper-ripple/.bower.json +++ b/dashboard-ui/bower_components/paper-ripple/.bower.json @@ -32,14 +32,14 @@ "iron-test-helpers": "PolymerElements/iron-test-helpers#^1.0.0" }, "ignore": [], - "homepage": "https://github.com/PolymerElements/paper-ripple", + "homepage": "https://github.com/polymerelements/paper-ripple", "_release": "1.0.5", "_resolution": { "type": "version", "tag": "v1.0.5", "commit": "d72e7a9a8ab518b901ed18dde492df3b87a93be5" }, - "_source": "git://github.com/PolymerElements/paper-ripple.git", + "_source": "git://github.com/polymerelements/paper-ripple.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/paper-ripple" + "_originalSource": "polymerelements/paper-ripple" } \ No newline at end of file diff --git a/dashboard-ui/components/dialog.js b/dashboard-ui/components/dialog.js deleted file mode 100644 index 57e7b22b0c..0000000000 --- a/dashboard-ui/components/dialog.js +++ /dev/null @@ -1,55 +0,0 @@ -define(['fade-in-animation', 'fade-out-animation', 'paper-dialog'], function () { - - return function (options) { - - var title = options.title; - var message = options.message; - var buttons = options.buttons; - var callback = options.callback; - - var id = 'paperdlg' + new Date().getTime(); - - var html = ''; - html += '

' + title + '

'; - html += '
' + message + '
'; - html += '
'; - - var index = 0; - html += buttons.map(function (b) { - - var dataIndex = ' data-index="' + index + '"'; - index++; - return '' + b + ''; - - }).join(''); - - html += '
'; - html += '
'; - - $(document.body).append(html); - - // This timeout is obviously messy but it's unclear how to determine when the webcomponent is ready for use - // element onload never fires - setTimeout(function () { - - var dlg = document.getElementById(id); - - $('.dialogButton', dlg).on('click', function () { - - if (callback) { - callback(parseInt(this.getAttribute('data-index'))); - } - - }); - - // Has to be assigned a z-index after the call to .open() - dlg.addEventListener('iron-overlay-closed', function (e) { - - dlg.parentNode.removeChild(dlg); - }); - - dlg.open(); - - }, 300); - }; -}); \ No newline at end of file diff --git a/dashboard-ui/components/buttonenabled.js b/dashboard-ui/legacy/buttonenabled.js similarity index 100% rename from dashboard-ui/components/buttonenabled.js rename to dashboard-ui/legacy/buttonenabled.js diff --git a/dashboard-ui/scripts/actionsheet.js b/dashboard-ui/scripts/actionsheet.js index 3e23ec2108..52c2bcdc41 100644 --- a/dashboard-ui/scripts/actionsheet.js +++ b/dashboard-ui/scripts/actionsheet.js @@ -66,7 +66,11 @@ return o.ironIcon; }).length; - html += ''; + if (options.title && !renderIcon) { + html += ''; + } else { + html += ''; + } for (var i = 0, length = options.items.length; i < length; i++) { var option = options.items[i]; diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index f9197fc843..662fad2749 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -70,43 +70,6 @@ var header = document.querySelector('.viewMenuBar'); - var headerSearchButton = header.querySelector('.headerSearchButton'); - var btnCast = header.querySelector('.btnCast'); - - if (user.localUser) { - btnCast.classList.remove('hide'); - - if (headerSearchButton) { - headerSearchButton.classList.remove('hide'); - } - - requirejs(['voice/voice'], function () { - - if (VoiceInputManager.isSupported()) { - header.querySelector('.headerVoiceButton').classList.remove('hide'); - } else { - header.querySelector('.headerVoiceButton').classList.add('hide'); - } - - }); - - } else { - btnCast.classList.add('hide'); - header.querySelector('.headerVoiceButton').classList.add('hide'); - if (headerSearchButton) { - headerSearchButton.classList.add('hide'); - } - } - - var dashboardEntryHeaderButton = header.querySelector('.dashboardEntryHeaderButton'); - if (dashboardEntryHeaderButton) { - if (user.canManageServer) { - dashboardEntryHeaderButton.classList.remove('hide'); - } else { - dashboardEntryHeaderButton.classList.add('hide'); - } - } - if (user.name) { if (user.imageUrl && AppInfo.enableUserImage) { @@ -127,29 +90,59 @@ } } + updateLocalUser(user.localUser); requiresUserRefresh = false; } + function updateLocalUser(user) { + + var header = document.querySelector('.viewMenuBar'); + + var headerSearchButton = header.querySelector('.headerSearchButton'); + var btnCast = header.querySelector('.btnCast'); + var dashboardEntryHeaderButton = header.querySelector('.dashboardEntryHeaderButton'); + + if (user) { + btnCast.classList.remove('hide'); + + if (headerSearchButton) { + headerSearchButton.classList.remove('hide'); + } + + if (dashboardEntryHeaderButton) { + if (user.Policy.IsAdministrator) { + dashboardEntryHeaderButton.classList.remove('hide'); + } else { + dashboardEntryHeaderButton.classList.add('hide'); + } + } + + requirejs(['voice/voice'], function () { + + if (VoiceInputManager.isSupported()) { + header.querySelector('.headerVoiceButton').classList.remove('hide'); + } else { + header.querySelector('.headerVoiceButton').classList.add('hide'); + } + + }); + + } else { + btnCast.classList.add('hide'); + header.querySelector('.headerVoiceButton').classList.add('hide'); + if (headerSearchButton) { + headerSearchButton.classList.add('hide'); + } + + if (dashboardEntryHeaderButton) { + dashboardEntryHeaderButton.classList.add('hide'); + } + } + } + function removeUserFromHeader() { - var header = document.querySelector('.viewMenuBar'); - - header.querySelector('.headerVoiceButton').classList.add('hide'); - - var btnCast = header.querySelector('.btnCast'); - if (btnCast) { - btnCast.classList.add('hide'); - } - - var headerSearchButton = header.querySelector('.headerSearchButton'); - if (headerSearchButton) { - headerSearchButton.classList.add('hide'); - } - - var dashboardEntryHeaderButton = header.querySelector('.dashboardEntryHeaderButton'); - if (dashboardEntryHeaderButton) { - dashboardEntryHeaderButton.classList.add('hide'); - } + updateLocalUser(null); } function bindMenuEvents() { @@ -933,15 +926,19 @@ initializeApiClient(window.ApiClient); } + var mainDrawerPanel = document.querySelector('.mainDrawerPanel'); + mainDrawerPanel.addEventListener('iron-select', onMainDrawerSelect); + + renderHeader(); + Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) { initializeApiClient(apiClient); - }); - Events.on(ConnectionManager, 'localusersignedin', function () { + Events.on(ConnectionManager, 'localusersignedin', function (e, user) { requiresLibraryMenuRefresh = true; requiresDrawerRefresh = true; - ConnectionManager.user(window.ApiClient).then(addUserToHeader); + ConnectionManager.user(ConnectionManager.getApiClient(user.ServerId)).then(addUserToHeader); }); Events.on(ConnectionManager, 'localusersignedout', function () { @@ -954,11 +951,6 @@ updateCastIcon(); }); - var mainDrawerPanel = document.querySelector('.mainDrawerPanel'); - mainDrawerPanel.addEventListener('iron-select', onMainDrawerSelect); - - renderHeader(); - })(window, document, jQuery, window.devicePixelRatio); (function () { diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js index d8bbe025a5..ccd9df200b 100644 --- a/dashboard-ui/scripts/mediacontroller.js +++ b/dashboard-ui/scripts/mediacontroller.js @@ -392,25 +392,46 @@ if (playerInfo.supportedCommands.indexOf('EndSession') != -1) { - var options = { - callback: function (result) { + var menuItems = []; - if (result == 0) { - MediaController.getCurrentPlayer().endSession(); - } - - if (result != 2) { - self.setDefaultPlayerActive(); - } - }, - message: Globalize.translate('ConfirmEndPlayerSession'), - title: Globalize.translate('HeaderDisconnectFromPlayer'), - buttons: [Globalize.translate('ButtonYes'), Globalize.translate('ButtonNo'), Globalize.translate('ButtonCancel')] - }; - - require(['dialog'], function (dialog) { - dialog(options); + menuItems.push({ + name: Globalize.translate('ButtonYes'), + id: 'yes' }); + menuItems.push({ + name: Globalize.translate('ButtonNo'), + id: 'no' + }); + menuItems.push({ + name: Globalize.translate('ButtonCancel'), + id: 'cancel' + }); + + require(['actionsheet'], function () { + + ActionSheetElement.show({ + items: menuItems, + //positionTo: positionTo, + title: Globalize.translate('ConfirmEndPlayerSession'), + callback: function (id) { + + switch (id) { + + case 'yes': + MediaController.getCurrentPlayer().endSession(); + self.setDefaultPlayerActive(); + break; + case 'no': + self.setDefaultPlayerActive(); + break; + default: + break; + } + } + }); + + }); + } else { diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 19dc7d9cb4..15298393c4 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -1789,10 +1789,14 @@ var AppInfo = {}; paths.dialog = "cordova/dialog"; paths.prompt = "cordova/prompt"; paths.sharingwidget = "cordova/sharingwidget"; + paths.serverdiscovery = "cordova/serverdiscovery"; + paths.wakeonlan = "cordova/wakeonlan"; } else { paths.dialog = "components/dialog"; paths.prompt = "components/prompt"; paths.sharingwidget = "components/sharingwidget"; + paths.serverdiscovery = "apiclient/serverdiscovery"; + paths.wakeonlan = "apiclient/wakeonlan"; } var sha1Path = bowerPath + "/cryptojslib/components/sha1-min"; @@ -1904,13 +1908,6 @@ var AppInfo = {}; return appStorage; }); } - if (Dashboard.isRunningInCordova()) { - define("serverdiscovery", ["cordova/serverdiscovery"]); - define("wakeonlan", ["cordova/wakeonlan"]); - } else { - define("serverdiscovery", ["apiclient/serverdiscovery"]); - define("wakeonlan", ["apiclient/wakeonlan"]); - } if (Dashboard.isRunningInCordova()) { define("localassetmanager", ["cordova/localassetmanager"]); @@ -1980,7 +1977,7 @@ var AppInfo = {}; define("fileupload", ["apiclient/fileupload"]); } - define("buttonenabled", ["components/buttonenabled"]); + define("buttonenabled", ["legacy/buttonenabled"]); var deps = []; diff --git a/dashboard-ui/scripts/supporterkeypage.js b/dashboard-ui/scripts/supporterkeypage.js index 2df9925b89..2429daada9 100644 --- a/dashboard-ui/scripts/supporterkeypage.js +++ b/dashboard-ui/scripts/supporterkeypage.js @@ -54,7 +54,7 @@ }); } - var page = $(form).parents('.page'); + var page = $(form).parents('.page')[0]; SupporterKeyPage.load(page); }); diff --git a/dashboard-ui/strings/javascript/en-US.json b/dashboard-ui/strings/javascript/en-US.json index 675b6225c0..c37d24dfda 100644 --- a/dashboard-ui/strings/javascript/en-US.json +++ b/dashboard-ui/strings/javascript/en-US.json @@ -882,7 +882,7 @@ "ButtonGuide": "Guide", "ButtonRecordedTv": "Recorded TV", "HeaderDisconnectFromPlayer": "Disconnect from Player", - "ConfirmEndPlayerSession": "Would you like to shutdown the app on the remote device?", + "ConfirmEndPlayerSession": "Would you like to close Emby on the device?", "ButtonYes": "Yes", "ButtonNo": "No", "ButtonRestorePreviousPurchase": "Restore Purchase", diff --git a/dashboard-ui/strings/javascript/javascript.json b/dashboard-ui/strings/javascript/javascript.json index 2246bb15f6..00e3333437 100644 --- a/dashboard-ui/strings/javascript/javascript.json +++ b/dashboard-ui/strings/javascript/javascript.json @@ -892,7 +892,7 @@ "ButtonGuide": "Guide", "ButtonRecordedTv": "Recorded TV", "HeaderDisconnectFromPlayer": "Disconnect from Player", - "ConfirmEndPlayerSession": "Would you like to shutdown the app on the remote device?", + "ConfirmEndPlayerSession": "Would you like to close Emby on the device?", "ButtonYes": "Yes", "ButtonNo": "No", "ButtonRestorePreviousPurchase": "Restore Purchase", diff --git a/dashboard-ui/themes/halloween/theme.js b/dashboard-ui/themes/halloween/theme.js index 4121e62efd..5c6421c856 100644 --- a/dashboard-ui/themes/halloween/theme.js +++ b/dashboard-ui/themes/halloween/theme.js @@ -59,21 +59,23 @@ function onIconClick() { - require(['dialog'], function (dialog) { - dialog({ + // todo: switch this to action sheet - title: "Happy Halloween", - message: "Happy Halloween from the Emby Team. We hope your Halloween is spooktacular! Would you like to allow the Halloween theme to continue?", - callback: function (result) { + //require(['dialog'], function (dialog) { + // dialog({ - if (result == 1) { - destroyTheme(); - } - }, + // title: "Happy Halloween", + // message: "Happy Halloween from the Emby Team. We hope your Halloween is spooktacular! Would you like to allow the Halloween theme to continue?", + // callback: function (result) { - buttons: [Globalize.translate('ButtonYes'), Globalize.translate('ButtonNo')] - }); - }); + // if (result == 1) { + // destroyTheme(); + // } + // }, + + // buttons: [Globalize.translate('ButtonYes'), Globalize.translate('ButtonNo')] + // }); + //}); } function destroyTheme() {