From 0db16cad5a999f65a650838ba4b750c4bef91955 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sat, 19 Sep 2015 22:06:56 -0400 Subject: [PATCH] update metadata editor --- .../iron-flex-layout/.bower.json | 6 +- dashboard-ui/channelitems.html | 2 +- .../imagedownloader/imagedownloader.js | 5 +- .../components/imageuploader/imageuploader.js | 5 +- .../metadataeditor/metadataeditor.js | 115 +++++++ .../metadataeditor.template.html | 318 ++++++++++++++++++ dashboard-ui/cordova/ios/vlcplayer.js | 5 +- dashboard-ui/css/librarybrowser.css | 155 +++++---- dashboard-ui/css/librarymenu.css | 2 +- dashboard-ui/css/site.css | 18 +- dashboard-ui/encodingsettings.html | 2 +- dashboard-ui/episodes.html | 2 +- dashboard-ui/index.html | 2 +- dashboard-ui/itemdetails.html | 4 +- dashboard-ui/itemlist.html | 77 ++--- dashboard-ui/livetv.html | 4 +- dashboard-ui/movies.html | 16 +- dashboard-ui/music.html | 16 +- dashboard-ui/mypreferencesmenu.html | 2 +- dashboard-ui/mysync.html | 2 +- dashboard-ui/scripts/edititemmetadata.js | 11 +- dashboard-ui/scripts/indexpage.js | 11 + dashboard-ui/scripts/librarybrowser.js | 35 +- dashboard-ui/scripts/librarylist.js | 27 +- dashboard-ui/scripts/librarymenu.js | 4 +- dashboard-ui/scripts/localsync.js | 16 +- dashboard-ui/scripts/mediaplayer.js | 21 +- dashboard-ui/scripts/site.js | 28 +- dashboard-ui/scripts/sync.js | 2 +- dashboard-ui/scripts/syncactivity.js | 54 ++- dashboard-ui/scripts/syncjob.js | 2 +- dashboard-ui/scripts/taskbutton.js | 7 +- dashboard-ui/strings/html/server.json | 4 +- .../strings/javascript/javascript.json | 2 +- dashboard-ui/syncactivity.html | 2 +- dashboard-ui/themes/android.css | 2 +- dashboard-ui/themes/ios.css | 195 +++++++++++ dashboard-ui/thirdparty/emby-icons.html | 3 + .../jquerymobile-1.4.5/jqm.panel.css | 268 ++++++++------- .../jquery.mobile.custom.theme.css | 74 +--- .../thirdparty/paper-button-style.css | 28 +- dashboard-ui/tvlatest.html | 2 +- dashboard-ui/tvrecommended.html | 4 +- dashboard-ui/vulcanize-out.html | 3 + 44 files changed, 1125 insertions(+), 438 deletions(-) create mode 100644 dashboard-ui/components/metadataeditor/metadataeditor.js create mode 100644 dashboard-ui/components/metadataeditor/metadataeditor.template.html diff --git a/dashboard-ui/bower_components/iron-flex-layout/.bower.json b/dashboard-ui/bower_components/iron-flex-layout/.bower.json index 90b7b9e92..653380346 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 5593b5530..4c6ec0cd0 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 a66b7f364..bf68a9fc2 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 e9118d8c2..b2518f5f7 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 000000000..4a96babe3 --- /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 000000000..bccf0a67f --- /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 323a05d0d..32a33927f 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 1cc45ecfd..da6cf9151 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 867e80430..a166c0d17 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 2f6625c4a..0e8f96859 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 657f7cd08..0cb658324 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 30e0c6a18..5f866e114 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 209836636..55a9a9c78 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 2a875ed5e..4a98d7f19 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 e0556246f..92e1af165 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 d4e2d7021..524d380fe 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 e4788c26d..e567e4ce5 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 dc6fc409e..d80810668 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 64d39a64b..eef6a7bfd 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 b80698a41..ac236572a 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 11cf039ed..910c6c407 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 e6fc48637..8a2139f90 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 1c6d1fb25..a2ba50919 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 243ad14ad..8edfdde06 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 57b7f4538..8cf96ee37 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 261b25698..6f9afc9dc 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 3854dead4..48d24d70f 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 9130796f3..62ff889fe 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 0cd7162b6..417833abd 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 57bc63a31..dce8492bc 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 6202e4b42..5cbaeaf49 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 2469a7f3d..26ab8d09d 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 c36e8e3b7..a82d9cc5b 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 b6d9d9170..3750c42f4 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 90cb5acf2..9025d3c1f 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 2c4c5bf1a..4f3399aff 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 02f404d96..dbce1bb6d 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 fadbd15c0..baf95c50d 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 3d8f1eb32..a07bd533a 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 20e195dd6..aee5d14c9 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 aff1c9b2b..23750d157 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 95036b1cf..19f2db313 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 254758c8f..002770489 100644 --- a/dashboard-ui/tvrecommended.html +++ b/dashboard-ui/tvrecommended.html @@ -22,7 +22,7 @@