diff --git a/dashboard-ui/bower_components/iron-flex-layout/.bower.json b/dashboard-ui/bower_components/iron-flex-layout/.bower.json index 90b7b9e929..6533803466 100644 --- a/dashboard-ui/bower_components/iron-flex-layout/.bower.json +++ b/dashboard-ui/bower_components/iron-flex-layout/.bower.json @@ -23,14 +23,14 @@ "paper-styles": "polymerelements/paper-styles#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, - "homepage": "https://github.com/polymerelements/iron-flex-layout", + "homepage": "https://github.com/PolymerElements/iron-flex-layout", "_release": "1.0.3", "_resolution": { "type": "version", "tag": "v1.0.3", "commit": "e6c2cfec18354973ac03e70dcd8afcc3c72d09b9" }, - "_source": "git://github.com/polymerelements/iron-flex-layout.git", + "_source": "git://github.com/PolymerElements/iron-flex-layout.git", "_target": "^1.0.0", - "_originalSource": "polymerelements/iron-flex-layout" + "_originalSource": "PolymerElements/iron-flex-layout" } \ No newline at end of file diff --git a/dashboard-ui/channelitems.html b/dashboard-ui/channelitems.html index 5593b55306..4c6ec0cd04 100644 --- a/dashboard-ui/channelitems.html +++ b/dashboard-ui/channelitems.html @@ -15,7 +15,7 @@
-
+
diff --git a/dashboard-ui/components/imagedownloader/imagedownloader.js b/dashboard-ui/components/imagedownloader/imagedownloader.js index a66b7f3642..bf68a9fc28 100644 --- a/dashboard-ui/components/imagedownloader/imagedownloader.js +++ b/dashboard-ui/components/imagedownloader/imagedownloader.js @@ -273,8 +273,11 @@ dlg.setAttribute('with-backdrop', 'with-backdrop'); dlg.setAttribute('role', 'alertdialog'); + // without this safari will scroll the background instead of the dialog contents - dlg.setAttribute('modal', 'modal'); + // but not needed here since this is already on top of an existing dialog + // dlg.setAttribute('modal', 'modal'); + // seeing max call stack size exceeded in the debugger with this dlg.setAttribute('noAutoFocus', 'noAutoFocus'); dlg.entryAnimation = 'scale-up-animation'; diff --git a/dashboard-ui/components/imageuploader/imageuploader.js b/dashboard-ui/components/imageuploader/imageuploader.js index e9118d8c23..b2518f5f79 100644 --- a/dashboard-ui/components/imageuploader/imageuploader.js +++ b/dashboard-ui/components/imageuploader/imageuploader.js @@ -136,8 +136,11 @@ dlg.setAttribute('with-backdrop', 'with-backdrop'); dlg.setAttribute('role', 'alertdialog'); + // without this safari will scroll the background instead of the dialog contents - dlg.setAttribute('modal', 'modal'); + // but not needed here since this is already on top of an existing dialog + // dlg.setAttribute('modal', 'modal'); + // seeing max call stack size exceeded in the debugger with this dlg.setAttribute('noAutoFocus', 'noAutoFocus'); dlg.entryAnimation = 'scale-up-animation'; diff --git a/dashboard-ui/components/metadataeditor/metadataeditor.js b/dashboard-ui/components/metadataeditor/metadataeditor.js new file mode 100644 index 0000000000..4a96babe3a --- /dev/null +++ b/dashboard-ui/components/metadataeditor/metadataeditor.js @@ -0,0 +1,115 @@ +(function ($, document, window, FileReader, escape) { + + var currentItem; + + function getBaseRemoteOptions() { + + var options = {}; + + options.itemId = currentItem.Id; + + return options; + } + + function reload(page, item) { + + Dashboard.showLoadingMsg(); + + if (item) { + reloadItem(page, item); + } + else { + ApiClient.getItem(Dashboard.getCurrentUserId(), currentItem.Id).done(function (item) { + reloadItem(page, item); + }); + } + } + + function reloadItem(page, item) { + + currentItem = item; + + } + + function initEditor(page) { + + } + + function showEditor(itemId) { + + Dashboard.showLoadingMsg(); + + ApiClient.ajax({ + + type: 'GET', + url: 'components/metadataeditor/metadataeditor.template.html' + + }).done(function (template) { + + ApiClient.getItem(Dashboard.getCurrentUserId(), itemId).done(function (item) { + + var dlg = document.createElement('paper-dialog'); + + dlg.setAttribute('with-backdrop', 'with-backdrop'); + dlg.setAttribute('role', 'alertdialog'); + // without this safari will scroll the background instead of the dialog contents + dlg.setAttribute('modal', 'modal'); + // seeing max call stack size exceeded in the debugger with this + dlg.setAttribute('noAutoFocus', 'noAutoFocus'); + dlg.entryAnimation = 'scale-up-animation'; + dlg.exitAnimation = 'fade-out-animation'; + dlg.classList.add('fullscreen-editor-paper-dialog'); + dlg.classList.add('ui-body-b'); + dlg.classList.add('smoothScrollY'); + + var html = ''; + html += '

'; + html += ''; + html += '
' + Globalize.translate('ButtonEdit') + '
'; + html += '

'; + + html += '
'; + html += Globalize.translateDocument(template); + html += '
'; + + dlg.innerHTML = html; + document.body.appendChild(dlg); + + initEditor(dlg); + + // Has to be assigned a z-index after the call to .open() + $(dlg).on('iron-overlay-closed', onDialogClosed); + + PaperDialogHelper.openWithHash(dlg, 'metadataeditor'); + + var editorContent = dlg.querySelector('.editorContent'); + reload(editorContent, item); + + $('.btnCloseDialog', dlg).on('click', closeDialog); + }); + }); + } + + function closeDialog() { + + history.back(); + } + + function onDialogClosed() { + + $(this).remove(); + Dashboard.hideLoadingMsg(); + } + + window.MetadataEditor = { + show: function (itemId) { + + require(['components/paperdialoghelper'], function () { + + Dashboard.importCss('css/metadataeditor.css'); + showEditor(itemId); + }); + } + }; + +})(jQuery, document, window, window.FileReader, escape); \ No newline at end of file diff --git a/dashboard-ui/components/metadataeditor/metadataeditor.template.html b/dashboard-ui/components/metadataeditor/metadataeditor.template.html new file mode 100644 index 0000000000..bccf0a67f7 --- /dev/null +++ b/dashboard-ui/components/metadataeditor/metadataeditor.template.html @@ -0,0 +1,318 @@ + +
+ +
+ + + + + + ${ButtonRefresh} + ${ButtonIdentify} + +
+ +
+ +
+ +
+
+ +
+ + + + + + + + + + + + + + +
+ +
+ +
+ + +
+
+ + + + + + + + + + + + + + + +
+
+ + + + + +
+

+ ${HeaderExternalIds} +

+
+
+
+
+
+ + + + + + + + + + +
+ +
+ +
\ No newline at end of file diff --git a/dashboard-ui/cordova/ios/vlcplayer.js b/dashboard-ui/cordova/ios/vlcplayer.js index 323a05d0da..32a33927f3 100644 --- a/dashboard-ui/cordova/ios/vlcplayer.js +++ b/dashboard-ui/cordova/ios/vlcplayer.js @@ -68,7 +68,10 @@ self.duration = function (val) { - return self.playerState.duration; + // TODO + // This value doesn't seem to be getting reported properly + // Right now it's only used to determine if the player can seek, so for now we can mock it + return 1; }; self.stop = function () { diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index 1cc45ecfdf..da6cf9151a 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -704,8 +704,10 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { .detailSectionHeader { background-clip: border-box; - padding: .75em 0 .75em 1em; - border-radius: 4px; + padding: 0 0 .25em .25em; + background-color: transparent; + border-radius: 0; + margin-bottom: .5em; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; @@ -718,26 +720,23 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { } .ui-body-a .detailSectionHeader { - background-color: transparent; border: 1px solid #ddd; border-width: 0 0 1px 0; - border-radius: 0; - padding: 0 0 .25em .25em; - margin-bottom: .5em; -} - - .ui-body-a .detailSectionHeader, .ui-body-a .detailSectionHeader h3 { - font-size: 20px; - } - -.detailSectionHeader paper-button { - font-size: 13px; } .ui-body-b .detailSectionHeader { - background-color: #141414; + border: 1px solid #444; + border-width: 0 0 1px 0; } +.detailSectionHeader, .detailSectionHeader h3 { + font-size: 20px; +} + + .detailSectionHeader paper-button { + font-size: 13px; + } + .detailSectionHeaderButton { margin-left: 1em; } @@ -1045,63 +1044,15 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { height: 24px; border-radius: 50%; color: #fff; - background: rgba(82, 181, 75, .8); - line-height: 16px; + background: rgba(0, 0, 0, .8); + line-height: 19px; } -.syncWorkingIndicator { - background: rgba(255, 106, 0, .8); -} - -.pieIndicator { - height: 24px; - position: absolute; - top: 32px; - right: 29px; - vertical-align: middle; -} - -.pieBackground { - background-color: rgb(82, 181, 75); - position: absolute; - width: 24px; - height: 24px; - -moz-border-radius: 50px; - -webkit-border-radius: 50px; - -o-border-radius: 50px; - border-radius: 50px; - z-index: 1; -} - -.pieIndicator iron-icon { - position: absolute; - z-index: 4; - color: #fff; -} - -.pie { - position: absolute; - width: 24px; - height: 24px; - -moz-border-radius: 50px; - -webkit-border-radius: 50px; - -o-border-radius: 50px; - border-radius: 50px; - clip: rect(0px, 12px, 24px, 0px); - background-color: rgba(10, 10, 10, 1); - z-index: 2; -} - -.hold { - position: absolute; - width: 24px; - height: 24px; - -moz-border-radius: 50px; - -webkit-border-radius: 50px; - -o-border-radius: 50px; - border-radius: 50px; - clip: rect(0px, 24px, 24px, 12px); - z-index: 3; +.workingSyncIndicator iron-icon { + -webkit-animation: spin 3s infinite linear; + -moz-animation: spin 3s infinite linear; + -o-animation: spin 3s infinite linear; + -ms-animation: spin 3s infinite linear; } .playedIndicator { @@ -1815,3 +1766,67 @@ span.itemCommunityRating:not(:empty) + .userDataIcons { font-size: 40px; } } + +@-webkit-keyframes spin { + 0% { + -moz-transform: rotateZ(0deg); + -webkit-transform: rotateZ(0deg); + -o-transform: rotateZ(0deg); + -ms-transform: rotateZ(0deg); + } + + 100% { + -moz-transform: rotateZ(360deg); + -webkit-transform: rotateZ(360deg); + -o-transform: rotateZ(360deg); + -ms-transform: rotateZ(360deg); + } +} + +@-moz-keyframes spin { + 0% { + -moz-transform: rotateZ(0deg); + -webkit-transform: rotateZ(0deg); + -o-transform: rotateZ(0deg); + -ms-transform: rotateZ(0deg); + } + + 100% { + -moz-transform: rotateZ(360deg); + -webkit-transform: rotateZ(360deg); + -o-transform: rotateZ(360deg); + -ms-transform: rotateZ(360deg); + } +} + +@-o-keyframes spin { + 0% { + -moz-transform: rotateZ(0deg); + -webkit-transform: rotateZ(0deg); + -o-transform: rotateZ(0deg); + -ms-transform: rotateZ(0deg); + } + + 100% { + -moz-transform: rotateZ(360deg); + -webkit-transform: rotateZ(360deg); + -o-transform: rotateZ(360deg); + -ms-transform: rotateZ(360deg); + } +} + +@-ms-keyframes spin { + 0% { + -moz-transform: rotateZ(0deg); + -webkit-transform: rotateZ(0deg); + -o-transform: rotateZ(0deg); + -ms-transform: rotateZ(0deg); + } + + 100% { + -moz-transform: rotateZ(360deg); + -webkit-transform: rotateZ(360deg); + -o-transform: rotateZ(360deg); + -ms-transform: rotateZ(360deg); + } +} diff --git a/dashboard-ui/css/librarymenu.css b/dashboard-ui/css/librarymenu.css index 867e80430d..a166c0d177 100644 --- a/dashboard-ui/css/librarymenu.css +++ b/dashboard-ui/css/librarymenu.css @@ -207,7 +207,7 @@ } .viewMenuBar.semiTransparent { - background-color: rgba(18, 18, 18, .75); + background-color: rgba(18, 18, 18, .70); } .paperLibraryViewNav { diff --git a/dashboard-ui/css/site.css b/dashboard-ui/css/site.css index 2f6625c4ac..0e8f96859f 100644 --- a/dashboard-ui/css/site.css +++ b/dashboard-ui/css/site.css @@ -496,15 +496,6 @@ select { display: block; } -.ui-body-b select { - border-color: #1f1f1f; - background: #373737; -} - - .ui-body-b select option { - color: #fff; - } - .ui-body-a select { background: none; border-color: rgb(221, 221, 221); @@ -514,6 +505,15 @@ select { color: #000; } +.ui-body-b select { + border-color: #1f1f1f; + background: #373737; +} + + .ui-body-b select option { + color: #fff; + } + a[data-role='button'], button:not([data-role='none']):not(.clearButton) { -webkit-font-smoothing: antialiased; -webkit-user-select: none; diff --git a/dashboard-ui/encodingsettings.html b/dashboard-ui/encodingsettings.html index 657f7cd08d..0cb658324c 100644 --- a/dashboard-ui/encodingsettings.html +++ b/dashboard-ui/encodingsettings.html @@ -23,7 +23,7 @@
${LabelHardwareVideoDecoderHelp}
diff --git a/dashboard-ui/episodes.html b/dashboard-ui/episodes.html index 30e0c6a181..5f866e1142 100644 --- a/dashboard-ui/episodes.html +++ b/dashboard-ui/episodes.html @@ -27,7 +27,7 @@
- +
diff --git a/dashboard-ui/index.html b/dashboard-ui/index.html index 2098366362..55a9a9c782 100644 --- a/dashboard-ui/index.html +++ b/dashboard-ui/index.html @@ -40,7 +40,7 @@

${HeaderNextUp}

- ${ButtonSync} + ${ButtonSync}
diff --git a/dashboard-ui/itemdetails.html b/dashboard-ui/itemdetails.html index 2a875ed5e7..4a98d7f190 100644 --- a/dashboard-ui/itemdetails.html +++ b/dashboard-ui/itemdetails.html @@ -51,7 +51,7 @@ ${ButtonPlayTrailer} ${ButtonRecord} ${ButtonCancelRecording} - ${ButtonSync} + ${ButtonSync}
@@ -71,7 +71,7 @@ ${ButtonPlayTrailer} ${ButtonRecord} ${ButtonCancelRecording} - ${ButtonSync} + ${ButtonSync}
diff --git a/dashboard-ui/itemlist.html b/dashboard-ui/itemlist.html index e0556246fe..92e1af165a 100644 --- a/dashboard-ui/itemlist.html +++ b/dashboard-ui/itemlist.html @@ -16,49 +16,50 @@
-
-
+
+
+ -
+
-

- ${HeaderFilters} -

+

+ ${HeaderFilters} +

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
-
- -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- + +
-
diff --git a/dashboard-ui/livetv.html b/dashboard-ui/livetv.html index d4e2d70212..524d380fe1 100644 --- a/dashboard-ui/livetv.html +++ b/dashboard-ui/livetv.html @@ -107,7 +107,7 @@

${HeaderLatestRecordings}

- ${ButtonSync} + ${ButtonSync}

@@ -133,7 +133,7 @@
-
+
diff --git a/dashboard-ui/movies.html b/dashboard-ui/movies.html index e4788c26da..e567e4ce52 100644 --- a/dashboard-ui/movies.html +++ b/dashboard-ui/movies.html @@ -34,7 +34,7 @@ @@ -87,7 +87,7 @@
-
+
@@ -139,7 +139,7 @@
-
+
@@ -248,7 +248,7 @@
-
+
@@ -290,7 +290,7 @@
-
+
diff --git a/dashboard-ui/music.html b/dashboard-ui/music.html index dc6fc409ec..d808106684 100644 --- a/dashboard-ui/music.html +++ b/dashboard-ui/music.html @@ -68,7 +68,7 @@
@@ -85,7 +85,7 @@
@@ -102,7 +102,7 @@
@@ -126,7 +126,7 @@
@@ -136,7 +136,7 @@
-
+
@@ -192,7 +192,7 @@
-
+
@@ -227,7 +227,7 @@
-
+
@@ -263,7 +263,7 @@
-
+
diff --git a/dashboard-ui/mypreferencesmenu.html b/dashboard-ui/mypreferencesmenu.html index 64d39a64bc..eef6a7bfd4 100644 --- a/dashboard-ui/mypreferencesmenu.html +++ b/dashboard-ui/mypreferencesmenu.html @@ -70,7 +70,7 @@ - +
${ButtonSyncSettings}
${ButtonSyncSettingsHelp}
diff --git a/dashboard-ui/mysync.html b/dashboard-ui/mysync.html index b80698a411..ac236572a6 100644 --- a/dashboard-ui/mysync.html +++ b/dashboard-ui/mysync.html @@ -24,7 +24,7 @@
${LabelSyncStatus} - +
diff --git a/dashboard-ui/scripts/edititemmetadata.js b/dashboard-ui/scripts/edititemmetadata.js index 11cf039ed2..910c6c4078 100644 --- a/dashboard-ui/scripts/edititemmetadata.js +++ b/dashboard-ui/scripts/edititemmetadata.js @@ -1378,6 +1378,12 @@ }); } + menuItems.push({ + name: Globalize.translate('ButtonEditImages'), + id: 'editimages', + ironIcon: 'photo' + }); + require(['actionsheet'], function () { ActionSheetElement.show({ @@ -1393,6 +1399,9 @@ case 'delete': LibraryBrowser.deleteItem(currentItem.Id); break; + case 'editimages': + LibraryBrowser.editImages(currentItem.Id); + break; default: break; } @@ -1443,8 +1452,6 @@ if (data.id != currentItem.Id) { - //Dashboard.navigate('edititemmetadata.html?id=' + data.id); - //$.mobile.urlHistory.ignoreNextHashChange = true; window.location.hash = 'editItemMetadataPage?id=' + data.id; reload(page); diff --git a/dashboard-ui/scripts/indexpage.js b/dashboard-ui/scripts/indexpage.js index e6fc48637d..8a2139f907 100644 --- a/dashboard-ui/scripts/indexpage.js +++ b/dashboard-ui/scripts/indexpage.js @@ -244,6 +244,17 @@ Events.on(page.querySelector('.btnTakeTour'), 'click', function () { takeTour(page, Dashboard.getCurrentUserId()); }); + }); + + pageIdOn('pageshowready', "indexPage", function () { + + var page = this; + + }); + + pageIdOn('pagebeforehide', "indexPage", function () { + + var page = this; }); diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 1c6d1fb25c..a2ba50919f 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -752,6 +752,16 @@ }); }, + editMetadata: function (itemId) { + + Dashboard.navigate('edititemmetadata.html?id=' + itemId); + return; + require(['components/metadataeditor/metadataeditor'], function () { + + MetadataEditor.show(itemId); + }); + }, + showMoreCommands: function (positionTo, itemId, commands) { var items = []; @@ -861,7 +871,7 @@ break; } case 'edit': - Dashboard.navigate('edititemmetadata.html?id=' + itemId); + LibraryBrowser.editMetadata(itemId); break; case 'editsubtitles': LibraryBrowser.editSubtitles(itemId); @@ -2345,26 +2355,19 @@ getSyncIndicator: function (item) { - if (item.SyncPercent) { + if (item.SyncStatus == 'Synced') { - if (item.SyncPercent >= 100) { - return '
'; - } - - var degree = (item.SyncPercent / 100) * 360; - return '
'; + return '
'; } - if (item.SyncStatus) { - if (item.SyncStatus == 'Queued' || item.SyncStatus == 'Converting' || item.SyncStatus == 'ReadyToTransfer' || item.SyncStatus == 'Transferring') { + var syncPercent = item.SyncPercent; + if (syncPercent) { + return '
'; + } - return '
'; - } + if (item.SyncStatus == 'Queued' || item.SyncStatus == 'Converting' || item.SyncStatus == 'ReadyToTransfer' || item.SyncStatus == 'Transferring') { - if (item.SyncStatus == 'Synced') { - - return '
'; - } + return '
'; } return ''; diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js index 243ad14add..8edfdde064 100644 --- a/dashboard-ui/scripts/librarylist.js +++ b/dashboard-ui/scripts/librarylist.js @@ -428,7 +428,7 @@ break; } case 'edit': - Dashboard.navigate('edititemmetadata.html?id=' + itemId); + LibraryBrowser.editMetadata(itemId); break; case 'refresh': ApiClient.refreshItem(itemId, { @@ -796,7 +796,7 @@ contentHtml += '' + Globalize.translate('ButtonOpen') + ''; if (SyncManager.isAvailable(item, user)) { - contentHtml += '' + Globalize.translate('ButtonSync') + ''; + contentHtml += '' + Globalize.translate('ButtonSync') + ''; } contentHtml += '
'; @@ -1273,7 +1273,6 @@ $('
').insertAfter($('.cardOverlayTarget', card)); } $('.playedIndicator', card).html(''); - $('.cardProgress', card).remove(); } else if (userData.UnplayedItemCount) { @@ -1283,13 +1282,23 @@ } $('.playedIndicator', card).html(userData.UnplayedItemCount); } + + var progressHtml = LibraryBrowser.getItemProgressBarHtml(userData); + + if (progressHtml) { + var cardProgress = card.querySelector('.cardProgress'); + + if (!cardProgress) { + cardProgress = document.createElement('div'); + cardProgress.classList.add('cardProgress'); + + $('.cardFooter', card).append(cardProgress); + } + + cardProgress.innerHTML = progressHtml; + } else { - - $('.playedIndicator', card).remove(); - - var progressHtml = LibraryBrowser.getItemProgressBarHtml(userData); - - $('.cardProgress', card).html(progressHtml); + $('.cardProgress', card).remove(); } } diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index 57b7f4538c..8cf96ee378 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -40,7 +40,7 @@ var viewMenuBar = document.createElement('div'); viewMenuBar.classList.add('viewMenuBar'); - viewMenuBar.classList.add('ui-bar-b'); + viewMenuBar.classList.add('ui-body-b'); viewMenuBar.innerHTML = html; document.body.appendChild(viewMenuBar); @@ -356,7 +356,7 @@ html += '
' + Globalize.translate('ButtonSettings') + ''; } - html += '' + Globalize.translate('ButtonSync') + ''; + html += '' + Globalize.translate('ButtonSync') + ''; if (Dashboard.isConnectMode()) { html += '' + Globalize.translate('ButtonSelectServer') + ''; diff --git a/dashboard-ui/scripts/localsync.js b/dashboard-ui/scripts/localsync.js index 261b25698b..6f9afc9dce 100644 --- a/dashboard-ui/scripts/localsync.js +++ b/dashboard-ui/scripts/localsync.js @@ -1,6 +1,7 @@ (function () { var syncPromise; + var lastStart = 0; window.LocalSync = { @@ -13,6 +14,7 @@ if (!syncPromise) { require(['multiserversync'], function () { + lastStart = new Date().getTime(); syncPromise = new MediaBrowser.MultiServerSync(ConnectionManager).sync().done(function () { syncPromise = null; @@ -34,15 +36,23 @@ } }; - Dashboard.ready(function () { + var syncInterval = 1800000; + + function restartInterval() { if (LocalSync.isSupported) { setInterval(function () { LocalSync.startSync(); - }, 3600000); + }, syncInterval); + + if (lastStart > 0 && (now - lastStart) >= syncInterval) { + LocalSync.startSync(); + } } //LocalSync.startSync(); - }); + } + Dashboard.ready(restartInterval); + document.addEventListener("resume", restartInterval, false); })(); \ No newline at end of file diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index 3854dead47..48d24d70fe 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -5,7 +5,6 @@ var self = this; var currentProgressInterval; - var canClientSeek; var currentPlaylistIndex = 0; self.currentMediaRenderer = null; @@ -513,17 +512,19 @@ return supportsTextTracks; }; - self.updateCanClientSeek = function (mediaRenderer) { + // Returns true if the player can seek using native client-side seeking functions + function canPlayerSeek() { + var mediaRenderer = self.currentMediaRenderer; var currentSrc = self.getCurrentSrc(mediaRenderer); if ((currentSrc || '').indexOf('.m3u8') != -1) { - canClientSeek = true; + return true; } else { var duration = mediaRenderer.duration(); - canClientSeek = duration && !isNaN(duration) && duration != Number.POSITIVE_INFINITY && duration != Number.NEGATIVE_INFINITY; + return duration && !isNaN(duration) && duration != Number.POSITIVE_INFINITY && duration != Number.NEGATIVE_INFINITY; } - }; + } self.getCurrentSrc = function (mediaRenderer) { return mediaRenderer.currentSrc(); @@ -610,7 +611,7 @@ var mediaRenderer = self.currentMediaRenderer; - if (canClientSeek && params == null) { + if (canPlayerSeek() && params == null) { mediaRenderer.currentTime(ticks / 10000); return; @@ -664,8 +665,6 @@ $(mediaRenderer).one("play", function () { - self.updateCanClientSeek(this); - Events.on(this, 'ended', self.onPlaybackStopped); $(this).one('ended', self.playNextAfterEnded); @@ -742,7 +741,7 @@ if (positionSlider) { - positionSlider.disabled = !((self.currentDurationTicks || 0) > 0 || canClientSeek); + positionSlider.disabled = !((self.currentDurationTicks || 0) > 0 || canPlayerSeek()); } if (currentTimeElement) { @@ -1600,7 +1599,7 @@ RunTimeTicks: mediaSource.RunTimeTicks }; - state.PlayState.CanSeek = (mediaSource.RunTimeTicks || 0) > 0 || canClientSeek; + state.PlayState.CanSeek = (mediaSource.RunTimeTicks || 0) > 0 || canPlayerSeek(); } if (item) { @@ -1694,8 +1693,6 @@ self.onPlaybackStart = function (mediaRenderer, item, mediaSource) { - self.updateCanClientSeek(mediaRenderer); - var state = self.getPlayerStateInternal(mediaRenderer, item, mediaSource); Events.trigger(self, 'playbackstart', [state]); diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 9130796f3e..62ff889fe9 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -117,12 +117,12 @@ var Dashboard = { } }, - onPopupOpen: function(){ + onPopupOpen: function () { Dashboard.popupCount = (Dashboard.popupCount || 0) + 1; document.body.classList.add('bodyWithPopupOpen'); }, - onPopupClose: function(){ + onPopupClose: function () { Dashboard.popupCount = (Dashboard.popupCount || 1) - 1; @@ -1592,7 +1592,7 @@ var Dashboard = { } }, - getAppInfo: function (appName, deviceId, deviceName) { + getAppInfo: function (appName, appVersion, deviceId, deviceName) { function generateDeviceName() { @@ -1624,7 +1624,7 @@ var Dashboard = { return name; } - var appVersion = window.dashboardVersion; + appVersion = appVersion || window.dashboardVersion; appName = appName || "Emby Web Client"; deviceName = deviceName || generateDeviceName(); @@ -1991,7 +1991,7 @@ var AppInfo = {}; } } - function init(deferred, capabilities, appName, deviceId, deviceName) { + function init(deferred, capabilities, appName, appVersion, deviceId, deviceName) { requirejs.config({ urlArgs: "v=" + window.dashboardVersion, @@ -2174,7 +2174,7 @@ var AppInfo = {}; } require(deps, function () { - $.extend(AppInfo, Dashboard.getAppInfo(appName, deviceId, deviceName)); + $.extend(AppInfo, Dashboard.getAppInfo(appName, appVersion, deviceId, deviceName)); initAfterDependencies(deferred, capabilities); }); @@ -2300,11 +2300,13 @@ var AppInfo = {}; require(['cordova/imagestore']); - var capablities = Dashboard.capabilities(); + cordova.getAppVersion.getVersionNumber(function (appVersion) { + var capablities = Dashboard.capabilities(); - var name = $.browser.android ? "Emby for Android" : ($.browser.safari ? "Emby for iOS" : "Emby Mobile"); + var name = $.browser.android ? "Emby for Android" : ($.browser.safari ? "Emby for iOS" : "Emby Mobile"); - init(deferred, capablities, name, deviceId, device.model); + init(deferred, capablities, name, appVersion, deviceId, device.model); + }); } function initCordova(deferred) { @@ -2398,13 +2400,13 @@ pageClassOn('pageshow', "page", function () { if (currentTheme == 'a') { docElem.classList.add('background-theme-a'); docElem.classList.remove('background-theme-b'); - docElem.classList.add('ui-body-a'); - docElem.classList.remove('ui-body-b'); + page.classList.add('ui-body-a'); + page.classList.remove('ui-body-b'); } else { docElem.classList.add('background-theme-b'); docElem.classList.remove('background-theme-a'); - docElem.classList.add('ui-body-b'); - docElem.classList.remove('ui-body-a'); + page.classList.add('ui-body-b'); + page.classList.remove('ui-body-a'); } if (currentTheme != 'a' && !$.browser.mobile) { diff --git a/dashboard-ui/scripts/sync.js b/dashboard-ui/scripts/sync.js index 0cd7162b6f..417833abd8 100644 --- a/dashboard-ui/scripts/sync.js +++ b/dashboard-ui/scripts/sync.js @@ -236,7 +236,7 @@ html += '
'; html += '

'; - html += ''; + html += ''; html += '

'; html += ''; diff --git a/dashboard-ui/scripts/syncactivity.js b/dashboard-ui/scripts/syncactivity.js index 57bc63a310..dce8492bc7 100644 --- a/dashboard-ui/scripts/syncactivity.js +++ b/dashboard-ui/scripts/syncactivity.js @@ -55,7 +55,7 @@ html += '
'; if (job.Progress && job.Progress < 100) { - html += '
'; + html += '
'; html += "
"; html += ''; html += "
"; @@ -147,31 +147,36 @@ var cardBoxCssClass = 'cardBox visualCardBox'; var syncJobPage = 'syncjob.html'; + var showTargetName = true; if ($(page).hasClass('mySyncPage')) { syncJobPage = 'mysyncjob.html'; + + showTargetName = !hasLocalSync(); } for (var i = 0, length = jobs.length; i < length; i++) { var job = jobs[i]; - var targetName = job.TargetName || 'Unknown'; + if (showTargetName) { + var targetName = job.TargetName || 'Unknown'; - if (targetName != lastTargetName) { + if (targetName != lastTargetName) { - if (lastTargetName) { - html += '
'; - html += '
'; - html += '
'; + if (lastTargetName) { + html += '
'; + html += '
'; + html += '
'; + } + + lastTargetName = targetName; + + html += '
'; + + html += '
' + targetName + '
'; + + html += '
'; } - - lastTargetName = targetName; - - html += '
'; - - html += '
' + targetName + '
'; - - html += '
'; } html += getSyncJobHtml(page, job, cardBoxCssClass, syncJobPage); @@ -236,6 +241,10 @@ }); } + function hasLocalSync() { + return Dashboard.capabilities().SupportsSync; + } + function reloadData(page) { Dashboard.showLoadingMsg(); @@ -246,6 +255,10 @@ if ($(page).hasClass('mySyncPage')) { options.UserId = Dashboard.getCurrentUserId(); + + if (hasLocalSync()) { + options.TargetId = ApiClient.deviceId(); + } } ApiClient.getJSON(ApiClient.getUrl('Sync/Jobs', options)).done(function (response) { @@ -263,7 +276,16 @@ var page = $.mobile.activePage; if (msg.MessageType == "SyncJobs") { - loadData(page, msg.Data); + + var data = msg.Data; + + if (hasLocalSync()) { + var targetId = ApiClient.deviceId(); + data = data.filter(function (j) { + return TargetId = targetId; + }); + } + loadData(page, data); } } diff --git a/dashboard-ui/scripts/syncjob.js b/dashboard-ui/scripts/syncjob.js index 6202e4b424..5cbaeaf49f 100644 --- a/dashboard-ui/scripts/syncjob.js +++ b/dashboard-ui/scripts/syncjob.js @@ -64,7 +64,7 @@ html += ''; } else { - html += ''; + html += ''; } html += ''; diff --git a/dashboard-ui/scripts/taskbutton.js b/dashboard-ui/scripts/taskbutton.js index 2469a7f3d9..26ab8d09d1 100644 --- a/dashboard-ui/scripts/taskbutton.js +++ b/dashboard-ui/scripts/taskbutton.js @@ -78,7 +78,7 @@ $.fn.taskButton = function (options) { var id = button.getAttribute('data-taskid'); var key = 'scheduledTaskButton' + options.taskKey; - var expectedValue = '4'; + var expectedValue = new Date().getMonth() + '5'; if (appStorage.getItem(key) == expectedValue) { onScheduledTaskMessageConfirmed(button, id); @@ -86,8 +86,9 @@ $.fn.taskButton = function (options) { var msg = Globalize.translate('ConfirmMessageScheduledTaskButton'); msg += '
'; - msg += '
'; - msg += '' + Globalize.translate('ButtonScheduledTasks') + ''; + msg += ''; Dashboard.confirm(msg, Globalize.translate('HeaderConfirmation'), function (result) { diff --git a/dashboard-ui/strings/html/server.json b/dashboard-ui/strings/html/server.json index c36e8e3b75..a82d9cc5bd 100644 --- a/dashboard-ui/strings/html/server.json +++ b/dashboard-ui/strings/html/server.json @@ -1276,7 +1276,7 @@ "LabelExtractChaptersDuringLibraryScanHelp": "If enabled, chapter images will be extracted when videos are imported during the library scan. If disabled they will be extracted during the chapter images scheduled task, allowing the regular library scan to complete faster.", "LabelConnectGuestUserName": "Their Emby username or email address:", "LabelConnectUserName": "Emby username/email:", - "LabelConnectUserNameHelp": "Connect this user to an Emby account to enable easy sign-in access from any Emby app without having to know the server ip address.", + "LabelConnectUserNameHelp": "Connect this local user to an online Emby account to enable easy sign-in access from any Emby app without having to know the server ip address.", "ButtonLearnMoreAboutEmbyConnect": "Learn more about Emby Connect", "LabelExternalPlayers": "External players:", "LabelExternalPlayersHelp": "Display buttons to play content in external players. This is only available on devices that support url schemes, generally Android and iOS. With external players there is generally no support for remote control or resuming.", @@ -1541,5 +1541,5 @@ "OptionEnableVideoFrameAnalysisHelp": "Extract detailed information about videos that can be used to make transcoding as efficient as possible. This will cause library scans to take longer.", "LabelVideoFrameAnalysisLimit": "Limit frame by frame analysis to videos less than:", "LabelHardwareVideoDecoder": "Hardware video decoder:", - "LabelHardwareVideoDecoderHelp": "Available on supported systems only, and will revert to default when unavailable." + "LabelHardwareVideoDecoderHelp": "Available on supported systems only." } diff --git a/dashboard-ui/strings/javascript/javascript.json b/dashboard-ui/strings/javascript/javascript.json index b6d9d9170d..3750c42f43 100644 --- a/dashboard-ui/strings/javascript/javascript.json +++ b/dashboard-ui/strings/javascript/javascript.json @@ -101,7 +101,7 @@ "MessageItemsAdded": "Items added", "ButtonAddToCollection": "Add to collection", "HeaderSelectCertificatePath": "Select Certificate Path", - "ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task. It can also be run manually here. To configure the scheduled task, see:", + "ConfirmMessageScheduledTaskButton": "This operation normally runs automatically as a scheduled task and does not require any manual effort. To configure the scheduled task, see:", "HeaderSupporterBenefit": "A supporter membership provides additional benefits such as access to sync, premium plugins, internet channel content, and more. {0}Learn more{1}.", "LabelSyncNoTargetsHelp": "It looks like you don't currently have any apps that support sync.", "HeaderWelcomeToProjectServerDashboard": "Welcome to the Emby Server Dashboard", diff --git a/dashboard-ui/syncactivity.html b/dashboard-ui/syncactivity.html index 90cb5acf22..9025d3c1f3 100644 --- a/dashboard-ui/syncactivity.html +++ b/dashboard-ui/syncactivity.html @@ -16,7 +16,7 @@
- + ${ButtonConvertMedia}

diff --git a/dashboard-ui/themes/android.css b/dashboard-ui/themes/android.css index 2c4c5bf1a0..4f3399aff2 100644 --- a/dashboard-ui/themes/android.css +++ b/dashboard-ui/themes/android.css @@ -3,7 +3,7 @@ } .viewMenuBar.semiTransparent { - background-color: rgba(27, 27, 27, .75); + background-color: rgba(27, 27, 27, .70); } .background-theme-b { diff --git a/dashboard-ui/themes/ios.css b/dashboard-ui/themes/ios.css index 02f404d96f..dbce1bb6dd 100644 --- a/dashboard-ui/themes/ios.css +++ b/dashboard-ui/themes/ios.css @@ -192,3 +192,198 @@ paper-tab { /* Eliminate transparency to prevent clicks from passing through to the elements underneath */ background-color: rgb(26,26,26); } + + +/* Checkboxes */ +input[type='checkbox'] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + appearance: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + height: 31px; + width: 51px; + position: relative; + border-radius: 16px; + cursor: pointer; + outline: 0; + z-index: 0; + margin: 0; + padding: 0; + border: none; + -webkit-transition-duration: 600ms; + -moz-transition-duration: 600ms; + transition-duration: 600ms; + -webkit-transition-timing-function: ease-in-out; + -moz-transition-timing-function: ease-in-out; + transition-timing-function: ease-in-out; + -webkit-touch-callout: none; + -webkit-text-size-adjust: none; + -webkit-tap-highlight-color: transparent; + -webkit-user-select: none; +} + +.ui-body-a input[type='checkbox'] { + background-color: #e5e5e5; +} + +.ui-body-b input[type='checkbox'] { + background-color: #1f1f1f; +} + +input[type='checkbox']::before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + height: 27px; + width: 47px; + content: ' '; + position: absolute; + left: 2px; + top: 2px; + border-radius: 16px; + z-index: 1; + -webkit-transition-duration: 300ms; + -moz-transition-duration: 300ms; + transition-duration: 300ms; + -webkit-transform: scale(1); + -moz-transform: scale(1); + -ms-transform: scale(1); + -o-transform: scale(1); + transform: scale(1); +} + +.ui-body-a input[type='checkbox']::before { + background-color: #ffffff; +} + +.ui-body-b input[type='checkbox']::before { + background-color: #000; +} + +input[type='checkbox']::after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + height: 27px; + width: 27px; + content: ' '; + position: absolute; + border-radius: 27px; + background: #ffffff; + z-index: 2; + top: 2px; + left: 2px; + box-shadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.25), 0px 4px 11px 0px rgba(0, 0, 0, 0.08), -1px 3px 3px 0px rgba(0, 0, 0, 0.14); + -webkit-transition: -webkit-transform 300ms, width 280ms; + -moz-transition: -moz-transform 300ms, width 280ms; + transition: transform 300ms, width 280ms; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-transition-timing-function: cubic-bezier(0.42, 0.8, 0.58, 1.2); + -moz-transition-timing-function: cubic-bezier(0.42, 0.8, 0.58, 1.2); + transition-timing-function: cubic-bezier(0.42, 0.8, 0.58, 1.2); +} + +input[type='checkbox']:checked { + background-color: #4CD964; + background-image: -webkit-linear-gradient(-90deg, #4CD964 0%, #4dd865 100%); + background-image: linear-gradient(-180deg,#4CD964 0%, #4dd865 100%); +} + + input[type='checkbox']:checked::after { + -webkit-transform: translate3d(16px, 0, 0); + -moz-transform: translate3d(16px, 0, 0); + -ms-transform: translate3d(16px, 0, 0); + -o-transform: translate3d(16px, 0, 0); + transform: translate3d(16px, 0, 0); + right: 18px; + left: inherit; + } + +input[type='checkbox']:active::after { + width: 35px; +} + +input[type='checkbox']:checked::before, input[type='checkbox']:active::before { + -webkit-transform: scale(0); + -moz-transform: scale(0); + -ms-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); +} + +input[type='checkbox']:disabled { + opacity: 0.5; + cursor: default; + -webkit-transition: none; + -moz-transition: none; + transition: none; +} + + input[type='checkbox']:disabled:active::before, input[type='checkbox']:disabled:active::after, input[type='checkbox']:disabled:checked:active::before, input[type='checkbox']:disabled:checked::before { + width: 27px; + -webkit-transition: none; + -moz-transition: none; + transition: none; + } + + input[type='checkbox']:disabled:active::before { + height: 27px; + width: 41px; + -webkit-transform: translate3d(6px, 0, 0); + -moz-transform: translate3d(6px, 0, 0); + -ms-transform: translate3d(6px, 0, 0); + -o-transform: translate3d(6px, 0, 0); + transform: translate3d(6px, 0, 0); + } + + input[type='checkbox']:disabled:checked:active::before { + height: 27px; + width: 27px; + -webkit-transform: scale(0); + -moz-transform: scale(0); + -ms-transform: scale(0); + -o-transform: scale(0); + transform: scale(0); + } + +.ui-body-a input[type='checkbox'] { + background-color: #e5e5e5; +} + +.ui-body-b input[type='checkbox'] { + background-color: #151515; +} + +.ui-body-a input[type='checkbox']::before { + background-color: #ffffff; +} + +.ui-body-b input[type='checkbox']::before { + background-color: #000; +} + +.ui-body-a input[type='checkbox']::after { + background: #ffffff; +} + +.ui-body-b input[type='checkbox']::after { + background: #444; +} + +input[type='checkbox']:checked { + background-color: #4CD964; + background-image: -webkit-linear-gradient(-90deg, #4CD964 0%, #4dd865 100%); + background-image: linear-gradient(-180deg,#4CD964 0%, #4dd865 100%); +} diff --git a/dashboard-ui/thirdparty/emby-icons.html b/dashboard-ui/thirdparty/emby-icons.html index fadbd15c0a..baf95c50df 100644 --- a/dashboard-ui/thirdparty/emby-icons.html +++ b/dashboard-ui/thirdparty/emby-icons.html @@ -133,6 +133,9 @@ See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for + + + diff --git a/dashboard-ui/thirdparty/jquerymobile-1.4.5/jqm.panel.css b/dashboard-ui/thirdparty/jquerymobile-1.4.5/jqm.panel.css index 3d8f1eb324..a07bd533ae 100644 --- a/dashboard-ui/thirdparty/jquerymobile-1.4.5/jqm.panel.css +++ b/dashboard-ui/thirdparty/jquerymobile-1.4.5/jqm.panel.css @@ -1,238 +1,266 @@ /* Panel */ .ui-panel { - width: 17em; - min-height: 100%; - max-height: none; - border-width: 0; - position: absolute; - top: 0; - display: block; + width: 17em; + min-height: 100%; + max-height: none; + border-width: 0; + position: absolute; + top: 0; + display: block; } + .ui-panel-closed { - width: 0; - max-height: 100%; - overflow: hidden; - visibility: hidden; - left: 0; - clip: rect(1px,1px,1px,1px); + width: 0; + max-height: 100%; + overflow: hidden; + visibility: hidden; + left: 0; + clip: rect(1px,1px,1px,1px); } + .ui-panel-fixed { - position: fixed; - bottom: -1px; /* Fixes gap on Chrome for Android */ - padding-bottom: 1px; + position: fixed; + bottom: -1px; /* Fixes gap on Chrome for Android */ + padding-bottom: 1px; } + .ui-panel-display-reveal { - z-index: 1; + z-index: 1; } + .ui-panel-display-push { - z-index: 999; + z-index: 999; } + .ui-panel-display-overlay { - z-index: 1001; /* Fixed toolbars have z-index 1000 */ + z-index: 1001; /* Fixed toolbars have z-index 1000 */ } + .ui-panel-inner { - padding: 1em; + padding: 1em; } /* Container, page and wrapper */ .ui-panel-page-container { - overflow-x: visible; + overflow-x: visible; } + .ui-panel-page-container-themed .ui-page-active { - background: none; + background: none; } + .ui-panel-wrapper { - position: relative; - min-height: inherit; - border: 0; - overflow-x: hidden; - z-index: 999; + position: relative; + min-height: inherit; + border: 0; + overflow-x: hidden; + z-index: 999; } /* Fixed toolbars */ .ui-panel-fixed-toolbar { - overflow-x: hidden; + overflow-x: hidden; } /* Dismiss */ .ui-panel-dismiss { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 100%; - z-index: 1002; - display: none; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 100%; + z-index: 1002; + display: none; } + .ui-panel-dismiss-open { - display: block; + display: block; } /* Animate class is added to panel, wrapper and fixed toolbars */ .ui-panel-animate { - -webkit-transition: -webkit-transform 300ms ease; - -webkit-transition-duration: 300ms; - -moz-transition: -moz-transform 300ms ease; - transition: transform 300ms ease; + -webkit-transition: -webkit-transform 300ms ease; + -webkit-transition-duration: 300ms; + -moz-transition: -moz-transform 300ms ease; + transition: transform 300ms ease; } /* Fix for Windows Phone issue #6349: unset the transition for transforms in case of fixed toolbars. */ @media screen and ( max-device-width: 768px ) { - .ui-page-header-fixed .ui-panel-animate.ui-panel-wrapper, - .ui-page-footer-fixed .ui-panel-animate.ui-panel-wrapper, - .ui-panel-animate.ui-panel-fixed-toolbar { - -ms-transition: none; - } - /* We need a transitionend event ... */ - .ui-panel-animate.ui-panel-fixed-toolbar { - -ms-transition: -ms-transform 1ms; - -ms-transform: rotate(0deg); - } + .ui-page-header-fixed .ui-panel-animate.ui-panel-wrapper, + .ui-page-footer-fixed .ui-panel-animate.ui-panel-wrapper, + .ui-panel-animate.ui-panel-fixed-toolbar { + -ms-transition: none; + } + /* We need a transitionend event ... */ + .ui-panel-animate.ui-panel-fixed-toolbar { + -ms-transition: -ms-transform 1ms; + -ms-transform: rotate(0deg); + } } /* Hardware acceleration for smoother transitions on WebKit browsers */ .ui-panel-animate.ui-panel:not(.ui-panel-display-reveal) { - -webkit-backface-visibility: hidden; - -webkit-transform: translate3d(0,0,0); + -webkit-backface-visibility: hidden; + -webkit-transform: translate3d(0,0,0); } /* Panel positioning (for overlay and push) */ /* Panel left closed */ .ui-panel-position-left { - left: -17em; + left: -17em; } /* Panel left closed animated */ .ui-panel-animate.ui-panel-position-left.ui-panel-display-overlay, .ui-panel-animate.ui-panel-position-left.ui-panel-display-push { - left: 0; - -webkit-transform: translate3d(-17em,0,0); - -moz-transform: translate3d(-17em,0,0); - transform: translate3d(-17em,0,0); + left: 0; + -webkit-transform: translate3d(-17em,0,0); + -moz-transform: translate3d(-17em,0,0); + transform: translate3d(-17em,0,0); } /* Panel left open */ .ui-panel-position-left.ui-panel-display-reveal, /* Unset "panel left closed" for reveal */ .ui-panel-open.ui-panel-position-left { - left: 0; + left: 0; } /* Panel left open animated */ .ui-panel-animate.ui-panel-open.ui-panel-position-left.ui-panel-display-overlay, .ui-panel-animate.ui-panel-open.ui-panel-position-left.ui-panel-display-push { - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - -moz-transform: none; + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + -moz-transform: none; } /* Panel right closed */ .ui-panel-position-right { - right: -17em; + right: -17em; } /* Panel right closed animated */ .ui-panel-animate.ui-panel-position-right.ui-panel-display-overlay, .ui-panel-animate.ui-panel-position-right.ui-panel-display-push { - right: 0; - -webkit-transform: translate3d(17em,0,0); - -moz-transform: translate3d(17em,0,0); - transform: translate3d(17em,0,0); + right: 0; + -webkit-transform: translate3d(17em,0,0); + -moz-transform: translate3d(17em,0,0); + transform: translate3d(17em,0,0); } /* Panel right open */ .ui-panel-position-right.ui-panel-display-reveal, /* Unset "panel right closed" for reveal */ .ui-panel-position-right.ui-panel-open { - right: 0; + right: 0; } /* Panel right open animated */ .ui-panel-animate.ui-panel-open.ui-panel-position-right.ui-panel-display-overlay, .ui-panel-animate.ui-panel-open.ui-panel-position-right.ui-panel-display-push { - -webkit-transform: translate3d(0,0,0); - transform: translate3d(0,0,0); - -moz-transform: none; + -webkit-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + -moz-transform: none; } /* Wrapper and fixed toolbars positioning (for reveal and push) */ /* Panel left open */ .ui-panel-page-content-position-left { - left: 17em; - right: -17em; + left: 17em; + right: -17em; } /* Panel left open animated */ .ui-panel-animate.ui-panel-page-content-position-left { - left: 0; - right: 0; - -webkit-transform: translate3d(17em,0,0); - -moz-transform: translate3d(17em,0,0); - transform: translate3d(17em,0,0); + left: 0; + right: 0; + -webkit-transform: translate3d(17em,0,0); + -moz-transform: translate3d(17em,0,0); + transform: translate3d(17em,0,0); } /* Panel right open */ .ui-panel-page-content-position-right { - left: -17em; - right: 17em; + left: -17em; + right: 17em; } /* Panel right open animated */ .ui-panel-animate.ui-panel-page-content-position-right { - left: 0; - right: 0; - -webkit-transform: translate3d(-17em,0,0); - -moz-transform: translate3d(-17em,0,0); - transform: translate3d(-17em,0,0); + left: 0; + right: 0; + -webkit-transform: translate3d(-17em,0,0); + -moz-transform: translate3d(-17em,0,0); + transform: translate3d(-17em,0,0); } /* Dismiss model open */ .ui-panel-dismiss-open.ui-panel-dismiss-position-left { - left: 17em; + left: 17em; } + .ui-panel-dismiss-open.ui-panel-dismiss-position-right { - right: 17em; + right: 17em; } /* Shadows and borders */ .ui-panel-display-reveal { - -webkit-box-shadow: inset -5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: inset -5px 0 5px rgba(0,0,0,.15); - box-shadow: inset -5px 0 5px rgba(0,0,0,.15); + -webkit-box-shadow: inset -5px 0 5px rgba(0,0,0,.15); + -moz-box-shadow: inset -5px 0 5px rgba(0,0,0,.15); + box-shadow: inset -5px 0 5px rgba(0,0,0,.15); } + .ui-panel-position-right.ui-panel-display-reveal { - -webkit-box-shadow: inset 5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: inset 5px 0 5px rgba(0,0,0,.15); - box-shadow: inset 5px 0 5px rgba(0,0,0,.15); + -webkit-box-shadow: inset 5px 0 5px rgba(0,0,0,.15); + -moz-box-shadow: inset 5px 0 5px rgba(0,0,0,.15); + box-shadow: inset 5px 0 5px rgba(0,0,0,.15); } + .ui-panel-display-overlay { - -webkit-box-shadow: 5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: 5px 0 5px rgba(0,0,0,.15); - box-shadow: 5px 0 5px rgba(0,0,0,.15); + -webkit-box-shadow: 5px 0 5px rgba(0,0,0,.15); + -moz-box-shadow: 5px 0 5px rgba(0,0,0,.15); + box-shadow: 5px 0 5px rgba(0,0,0,.15); } + .ui-panel-position-right.ui-panel-display-overlay { - -webkit-box-shadow: -5px 0 5px rgba(0,0,0,.15); - -moz-box-shadow: -5px 0 5px rgba(0,0,0,.15); - box-shadow: -5px 0 5px rgba(0,0,0,.15); + -webkit-box-shadow: -5px 0 5px rgba(0,0,0,.15); + -moz-box-shadow: -5px 0 5px rgba(0,0,0,.15); + box-shadow: -5px 0 5px rgba(0,0,0,.15); } + .ui-panel-open.ui-panel-position-left.ui-panel-display-push { - border-right-width: 1px; - margin-right: -1px; + border-right-width: 1px; + margin-right: -1px; } + .ui-panel-page-content-position-left.ui-panel-page-content-display-push { - margin-left: 1px; - width: auto; + margin-left: 1px; + width: auto; } + .ui-panel-open.ui-panel-position-right.ui-panel-display-push { - border-left-width: 1px; - margin-left: -1px; + border-left-width: 1px; + margin-left: -1px; } + .ui-panel-page-content-position-right.ui-panel-page-content-display-push { - margin-right: 1px; - width: auto; + margin-right: 1px; + width: auto; } /* Responsive: wrap on wide viewports once open */ @media (min-width:55em) { - .ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-left { - margin-right: 17em; - } - .ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-right { - margin-left: 17em; - } - .ui-responsive-panel .ui-panel-page-content-open { - width: auto; - } - .ui-responsive-panel .ui-panel-dismiss-display-push, - .ui-responsive-panel.ui-page-active ~ .ui-panel-dismiss-display-push { - display: none; - } -} \ No newline at end of file + .ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-left { + margin-right: 17em; + } + + .ui-responsive-panel .ui-panel-page-content-open.ui-panel-page-content-position-right { + margin-left: 17em; + } + + .ui-responsive-panel .ui-panel-page-content-open { + width: auto; + } + + .ui-responsive-panel .ui-panel-dismiss-display-push, + .ui-responsive-panel.ui-page-active ~ .ui-panel-dismiss-display-push { + display: none; + } +} + +.ui-body-a.ui-panel { + background-color: #fff; +} + +.ui-body-b.ui-panel { + background-color: #222; +} diff --git a/dashboard-ui/thirdparty/jquerymobile-1.4.5/jquery.mobile.custom.theme.css b/dashboard-ui/thirdparty/jquerymobile-1.4.5/jquery.mobile.custom.theme.css index 20e195dd61..aee5d14c98 100644 --- a/dashboard-ui/thirdparty/jquerymobile-1.4.5/jquery.mobile.custom.theme.css +++ b/dashboard-ui/thirdparty/jquerymobile-1.4.5/jquery.mobile.custom.theme.css @@ -31,33 +31,6 @@ div.ui-controlgroup-label { font-size: 16px; } -/* Separators ------------------------------------------------------------------------------------------------------------*/ - - -/* Table opt-in classes: strokes between each row, and alternating row stripes */ -/* Classes table-stroke and table-stripe are deprecated in 1.4. */ -.table-stroke thead th, -.table-stripe thead th, -.table-stripe tbody tr:last-child { - border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback */ - border-bottom: 1px solid rgba(0,0,0,.1); -} -.table-stroke tbody th, -.table-stroke tbody td { - border-bottom: 1px solid #e6e6e6; /* non-RGBA fallback */ - border-bottom: 1px solid rgba(0,0,0,.05); -} -.table-stripe.table-stroke tbody tr:last-child th, -.table-stripe.table-stroke tbody tr:last-child td { - border-bottom: 0; -} -.table-stripe tbody tr:nth-child(odd) td, -.table-stripe tbody tr:nth-child(odd) th { - background-color: #eeeeee; /* non-RGBA fallback */ - background-color: rgba(0,0,0,.04); -} - /* Buttons -----------------------------------------------------------------------------------------------------------*/ @@ -224,7 +197,6 @@ html body .ui-group-theme-a .ui-bar-inherit { } /* Page and overlay */ -.ui-body-a, .ui-page-theme-a .ui-panel-wrapper { background-color: #f9f9f9 /*{a-page-background-color}*/; border-color: #bbb /*{a-page-border}*/; @@ -232,7 +204,6 @@ html body .ui-group-theme-a .ui-bar-inherit { } /* Body: Read-only lists, text inputs, collapsible content */ -.ui-body-a, .ui-page-theme-a .ui-body-inherit, html .ui-bar-a .ui-body-inherit, html .ui-body-a .ui-body-inherit, @@ -370,7 +341,6 @@ html body .ui-group-theme-b .ui-bar-inherit { } /* Page and overlay */ -.ui-body-b, .ui-page-theme-b .ui-panel-wrapper { background-color: #252525 /*{b-page-background-color}*/; border-color: #454545 /*{b-page-border}*/; @@ -378,7 +348,6 @@ html body .ui-group-theme-b .ui-bar-inherit { } /* Body: Read-only lists, text inputs, collapsible content */ -.ui-body-b, .ui-page-theme-b .ui-body-inherit, html .ui-bar-b .ui-body-inherit, html .ui-body-b .ui-body-inherit, @@ -390,29 +359,17 @@ html .ui-panel-page-container-b { } /* Links */ -.ui-page-theme-b a, -html .ui-bar-b a, -html .ui-body-b a, -html body .ui-group-theme-b a { +.ui-body-b a { color: #22aadd /*{b-link-color}*/; font-weight: bold; } -.ui-page-theme-b a:visited, -html .ui-bar-b a:visited, -html .ui-body-b a:visited, -html body .ui-group-theme-b a:visited { +.ui-body-b a:visited { color: #22aadd /*{b-link-visited}*/; } -.ui-page-theme-b a:hover, -html .ui-bar-b a:hover, -html .ui-body-b a:hover, -html body .ui-group-theme-b a:hover { +.ui-body-b a:hover { color: #0088bb /*{b-link-hover}*/; } -.ui-page-theme-b a:active, -html .ui-bar-b a:active, -html .ui-body-b a:active, -html body .ui-group-theme-b a:active { +.ui-body-b a:active { color: #0088bb /*{b-link-active}*/; } @@ -494,27 +451,4 @@ html head + body .ui-body-b.ui-focus { -webkit-box-shadow: 0 0 12px #22aadd /*{b-active-background-color}*/; -moz-box-shadow: 0 0 12px #22aadd /*{b-active-background-color}*/; box-shadow: 0 0 12px #22aadd /*{b-active-background-color}*/; -} - -/* Structure */ - -/* Disabled ------------------------------------------------------------------------------------------------------------*/ -/* Class ui-disabled deprecated in 1.4. :disabled not supported by IE8 so we use [disabled] */ - -.ui-disabled, -.ui-state-disabled, -button[disabled] { - filter: Alpha(Opacity=30); - opacity: .3; - cursor: default !important; - pointer-events: none; -} - -/* Focus state outline ------------------------------------------------------------------------------------------------------------*/ - -.ui-btn:focus, -.ui-btn.ui-focus { - outline: 0; } \ No newline at end of file diff --git a/dashboard-ui/thirdparty/paper-button-style.css b/dashboard-ui/thirdparty/paper-button-style.css index aff1c9b2b5..23750d1573 100644 --- a/dashboard-ui/thirdparty/paper-button-style.css +++ b/dashboard-ui/thirdparty/paper-button-style.css @@ -106,7 +106,7 @@ paper-button[raised].cancelDark { color: #fff; } -.ui-body-b paper-button[raised][disabled].subdued { +.ui-body-b paper-button[raised][disabled].subduedd { background: #111; } @@ -379,12 +379,16 @@ paper-menu-item { color: inherit; } +.ui-body-a .paperCheckboxFieldDescription { + color: #333; +} + .ui-body-b .paperCheckboxFieldDescription { color: #ccc; } .ui-body-b paper-checkbox #checkbox.paper-checkbox { - border-color: #ccc; + border-color: #eee; } .ui-body-b paper-checkbox #checkbox.checked.paper-checkbox { @@ -402,24 +406,24 @@ paper-input label, paper-textarea label { font-family: inherit !important; } -.ui-body-b paper-input label, .ui-body-b paper-textarea label { - color: #858585 !important; +.ui-body-b .paper-input-container-0 .input-content.paper-input-container label, .ui-body-b .paper-input-container-0 .input-content.paper-input-container .paper-input-label, .ui-body-b paper-textarea label { + color: #858585; } -.ui-body-a paper-input label, .ui-body-a paper-textarea label { - color: #656565 !important; +.ui-body-a .paper-input-container-0 .input-content.paper-input-container label, .ui-body-a .paper-input-container-0 .input-content.paper-input-container .paper-input-label, .ui-body-a paper-textarea label { + color: #656565; } -.ui-body-a .label-is-highlighted label { - color: green !important; +.ui-body-a .paper-input-container-0 .input-content.label-is-highlighted.paper-input-container label, .ui-body-a .paper-input-container-0 .input-content.label-is-highlighted.paper-input-container .paper-input-label { + color: green; } -.ui-body-b .label-is-highlighted label { - color: #52B54B !important; +.ui-body-b .paper-input-container-0 .input-content.label-is-highlighted.paper-input-container label, .ui-body-b .paper-input-container-0 .input-content.label-is-highlighted.paper-input-container .paper-input-label { + color: #52B54B; } -.ui-body-b paper-input input, .ui-body-b paper-textarea textarea { - color: #fff !important; +.ui-body-b .paper-input-container-0 .input-content.paper-input-container input, .ui-body-b .paper-input-container-0 .input-content.paper-input-container textarea, .ui-body-b .paper-input-container-0 .input-content.paper-input-container iron-autogrow-textarea, .ui-body-b .paper-input-container-0 .input-content.paper-input-container .paper-input-input { + color: #fff; } paper-input .focused-line, paper-textarea .focused-line { diff --git a/dashboard-ui/tvlatest.html b/dashboard-ui/tvlatest.html index 95036b1cfc..19f2db3133 100644 --- a/dashboard-ui/tvlatest.html +++ b/dashboard-ui/tvlatest.html @@ -22,7 +22,7 @@

${HeaderLatestEpisodes}

- ${ButtonSync} + ${ButtonSync}
diff --git a/dashboard-ui/tvrecommended.html b/dashboard-ui/tvrecommended.html index 254758c8f3..002770489d 100644 --- a/dashboard-ui/tvrecommended.html +++ b/dashboard-ui/tvrecommended.html @@ -22,7 +22,7 @@