diff --git a/dashboard-ui/about.html b/dashboard-ui/about.html index 9d24100e33..882afc3654 100644 --- a/dashboard-ui/about.html +++ b/dashboard-ui/about.html @@ -22,31 +22,39 @@
${VersionNumber}

-
-

${PleaseSupportOtherProduces}

+
+
${HeaderCredits}
+
+

+ ${PismoMessage} +

+

+ ${TangibleSoftwareMessage} +

-

- FanArt.tv -

-

- last.fm -

-

- MusicBrainz -

-

- TheMovieDb.org -

-

- The Open Movie Database -

-

- TheTVDB.com -

+
+

${PleaseSupportOtherProduces}

+ +

+ FanArt.tv +

+

+ last.fm +

+

+ MusicBrainz +

+

+ TheMovieDb.org +

+

+ The Open Movie Database +

+

+ TheTVDB.com +

+
-

- ${PismoMessage} -

diff --git a/dashboard-ui/css/images/items/folders/edit.png b/dashboard-ui/css/images/items/folders/edit.png index 6b276f1cdd..e48e0e1d1c 100644 Binary files a/dashboard-ui/css/images/items/folders/edit.png and b/dashboard-ui/css/images/items/folders/edit.png differ diff --git a/dashboard-ui/css/images/items/folders/report.png b/dashboard-ui/css/images/items/folders/report.png new file mode 100644 index 0000000000..441b7fd5cb Binary files /dev/null and b/dashboard-ui/css/images/items/folders/report.png differ diff --git a/dashboard-ui/css/librarybrowser.css b/dashboard-ui/css/librarybrowser.css index 9c2582cdcc..db5e0f6f59 100644 --- a/dashboard-ui/css/librarybrowser.css +++ b/dashboard-ui/css/librarybrowser.css @@ -12,12 +12,12 @@ margin-left: .5em; } -.libraryPage { +.page[data-theme=b] { background-color: #202020; } .backdropPage { - background-color: rgba(0, 0, 0, .85); + background-color: rgba(0, 0, 0, .85)!important; } .backdropContainer { @@ -1036,62 +1036,6 @@ a.itemTag:hover { } } -.nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { - font-size: 30px; -} - -.nowPlayingPageImage img { - max-height: 300px; - max-width: 300px; -} - -.nowPlayingPage .positionSliderContainer { - width: 350px; -} - -.nowPlayingNavButtonContainer { - width: 400px; -} - -@media all and (max-width: 600px) { - - .nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { - font-size: 26px; - } - - .nowPlayingPageImage img { - max-height: 200px; - max-width: 250px; - } - - .nowPlayingPage .positionSliderContainer { - width: 300px; - } -} - - -@media all and (max-width: 500px) { - - .nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { - font-size: 22px; - } -} - -@media all and (max-width: 400px) { - - .nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { - font-size: 19px; - } - - .nowPlayingPage .positionSliderContainer { - width: 220px; - } - - .nowPlayingNavButtonContainer { - width: 300px; - } -} - .spotlight { position: absolute; left: 0; diff --git a/dashboard-ui/css/librarymenu.css b/dashboard-ui/css/librarymenu.css index 230de1f29a..3dd301bbeb 100644 --- a/dashboard-ui/css/librarymenu.css +++ b/dashboard-ui/css/librarymenu.css @@ -232,6 +232,9 @@ background-image: url(images/items/folders/settings.png); background-position: 16px 8px; } +.reportsViewMenu { + background-image: url(images/items/folders/report.png); +} .viewMenuSecondary { position: absolute; diff --git a/dashboard-ui/css/nowplaying.css b/dashboard-ui/css/nowplaying.css new file mode 100644 index 0000000000..87c2e32f83 --- /dev/null +++ b/dashboard-ui/css/nowplaying.css @@ -0,0 +1,97 @@ +.nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { + font-size: 30px; +} + +.nowPlayingPageImage img { + max-height: 300px; + max-width: 300px; +} + +.nowPlayingPage .positionSliderContainer { + width: 350px; +} + +.nowPlayingNavButtonContainer { + width: 400px; +} + +.chapterMenuOverlay { + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 1000; +} + +.chapterMenu { + position: fixed; + top: 30%; + height: 180px; + left: 0; + right: 0; + background-color: rgba(0,0,0,.9); + overflow-x: auto; + overflow-y: hidden; + z-index: 1001; +} + +.chapterMenuInner { + padding: 1em 0; + text-align: center; + white-space: nowrap; +} + +.chapterPosterItem { + width: 240px!important; + cursor: pointer; +} + + .chapterPosterItem .posterItemImage { + height: 135px!important; + } + +.currentChapter { + -moz-box-shadow: 0 0 12px 7px #cc3333; + -webkit-box-shadow: 0 0 12px 7px #cc3333; + box-shadow: 0 0 12px 7px #cc3333; +} + +@media all and (max-width: 600px) { + + .nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { + font-size: 26px; + } + + .nowPlayingPageImage img { + max-height: 160px; + max-width: 250px; + } + + .nowPlayingPage .positionSliderContainer { + width: 300px; + } +} + + +@media all and (max-width: 500px) { + + .nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { + font-size: 24px; + } +} + +@media all and (max-width: 400px) { + + .nowPlayingPage .btnCommand, .nowPlayingPage .btnPlayStateCommand { + font-size: 19px; + } + + .nowPlayingPage .positionSliderContainer { + width: 220px; + } + + .nowPlayingNavButtonContainer { + width: 300px; + } +} diff --git a/dashboard-ui/css/posteritem.css b/dashboard-ui/css/posteritem.css index 8364aa463a..9c04e89aee 100644 --- a/dashboard-ui/css/posteritem.css +++ b/dashboard-ui/css/posteritem.css @@ -92,15 +92,10 @@ .posterItemTextOverlay .posterItemText { background-color: transparent; padding-left: 5px; - padding: 0 5px 3px; + padding: 0 5px 4px; } - .posterItemTextOverlay .posterItemText:first-child { - font-weight: bold; - font-size: 14px; - } - - .posterItemTextOverlay .posterItemText:last-child { + .posterItemTextOverlay .posterItemText:last-child:not(.posterItemProgress) { padding-bottom: 8px; } @@ -165,12 +160,16 @@ height: 51.8px; } -.posterItemProgress .itemProgressBar { - height: 8px; - width: 100%; - opacity: .8; +.posterItemProgress { + line-height: 7px; } + .posterItemProgress .itemProgressBar { + height: 7px; + width: 100%; + opacity: .8; + } + .miniPosterItemProgress { /* Make sure it's on top of the fade gradient '*/ z-index: 1000; diff --git a/dashboard-ui/css/site.css b/dashboard-ui/css/site.css index 575ffe4022..287a79b712 100644 --- a/dashboard-ui/css/site.css +++ b/dashboard-ui/css/site.css @@ -90,6 +90,14 @@ h2 { font-size: 1.68em; } +a, a.ui-link { + font-weight: normal; +} + +.ui-controlgroup a, a.ui-btn { + font-weight: bold; +} + h1 a { text-decoration: none; } diff --git a/dashboard-ui/metadata.html b/dashboard-ui/metadata.html index eac329b5eb..513a15f546 100644 --- a/dashboard-ui/metadata.html +++ b/dashboard-ui/metadata.html @@ -11,11 +11,7 @@
${TabBasics} - ${TabMovies} - ${TabTV} - ${TabGames} - ${TabMusic} - ${TabOthers} + ${TabCustomizations} ${TabSubtitles} ${TabAdvanced}
diff --git a/dashboard-ui/metadataadvanced.html b/dashboard-ui/metadataadvanced.html index 9c21fae1e7..a53d8c182b 100644 --- a/dashboard-ui/metadataadvanced.html +++ b/dashboard-ui/metadataadvanced.html @@ -11,11 +11,7 @@
diff --git a/dashboard-ui/metadataimages.html b/dashboard-ui/metadataimages.html index 4613aceae4..7106570c16 100644 --- a/dashboard-ui/metadataimages.html +++ b/dashboard-ui/metadataimages.html @@ -11,24 +11,20 @@
-

${HeaderCustomizeOptionsPerMediaType}

- -
-
- -
- +
+
+ + +
+
+
diff --git a/dashboard-ui/metadatasubtitles.html b/dashboard-ui/metadatasubtitles.html index a8483893c0..bf6171d143 100644 --- a/dashboard-ui/metadatasubtitles.html +++ b/dashboard-ui/metadatasubtitles.html @@ -11,11 +11,7 @@
diff --git a/dashboard-ui/nowplaying.html b/dashboard-ui/nowplaying.html index 4e27a600ed..3b3baa4f30 100644 --- a/dashboard-ui/nowplaying.html +++ b/dashboard-ui/nowplaying.html @@ -135,11 +135,17 @@
+ + + +
diff --git a/dashboard-ui/libraryreport.html b/dashboard-ui/reports.html similarity index 74% rename from dashboard-ui/libraryreport.html rename to dashboard-ui/reports.html index ad490d5f89..1c511e89a6 100644 --- a/dashboard-ui/libraryreport.html +++ b/dashboard-ui/reports.html @@ -4,47 +4,38 @@ ${TitleMediaBrowser} -
-
-
-
-
    -
+
+
+
+
+ Report: +
+ +
+ +
+
-
+
+
-
-
- Report: -
- -
- -
-
-
-
-
-
- -
-
+
diff --git a/dashboard-ui/scripts/edititemimages.js b/dashboard-ui/scripts/edititemimages.js index 0fb0db53d7..c3cb33db6d 100644 --- a/dashboard-ui/scripts/edititemimages.js +++ b/dashboard-ui/scripts/edititemimages.js @@ -545,11 +545,6 @@ $('.libraryTree', page).on('itemclicked', function (event, data) { - if (data.itemType == "libraryreport") { - Dashboard.navigate('libraryreport.html'); - return; - } - if (data.itemType == "livetvservice") { return; } diff --git a/dashboard-ui/scripts/edititemmetadata.js b/dashboard-ui/scripts/edititemmetadata.js index 71cc2cd2d9..70d07d29a0 100644 --- a/dashboard-ui/scripts/edititemmetadata.js +++ b/dashboard-ui/scripts/edititemmetadata.js @@ -1139,11 +1139,6 @@ $('.libraryTree', page).on('itemclicked', function (event, data) { - if (data.itemType == "libraryreport") { - Dashboard.navigate('libraryreport.html'); - return; - } - if (data.itemType == "livetvservice") { return; } diff --git a/dashboard-ui/scripts/edititempeople.js b/dashboard-ui/scripts/edititempeople.js index 91a4ee6822..e9891dc65b 100644 --- a/dashboard-ui/scripts/edititempeople.js +++ b/dashboard-ui/scripts/edititempeople.js @@ -255,11 +255,6 @@ $('.libraryTree', page).on('itemclicked', function (event, data) { - if (data.itemType == "libraryreport") { - Dashboard.navigate('libraryreport.html'); - return; - } - if (data.itemType == "livetvservice") { return; } diff --git a/dashboard-ui/scripts/editorsidebar.js b/dashboard-ui/scripts/editorsidebar.js index be490d9406..5e2b52864a 100644 --- a/dashboard-ui/scripts/editorsidebar.js +++ b/dashboard-ui/scripts/editorsidebar.js @@ -111,16 +111,7 @@ nodes.push({ attr: { id: name, rel: 'folder', itemtype: 'livetvservice' }, data: htmlName, state: 'closed' }); } - nodes.push({ attr: { id: 'libraryreport', rel: 'default', itemtype: 'libraryreport' }, data: 'Reports' }); - callback(nodes); - - if (!selectedId) { - - if (window.location.toString().toLowerCase().indexOf('report.html') != -1) { - selectedId = 'libraryreport'; - } - } if (selectedId && nodes.filter(function (f) { @@ -163,11 +154,6 @@ var itemtype = node.attr("itemtype"); - if (itemtype == 'libraryreport') { - - return; - } - if (itemtype == 'livetvservice') { loadLiveTvChannels(id, openItems, callback); diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js index 65861bf3a7..5c940d3ef4 100644 --- a/dashboard-ui/scripts/librarymenu.js +++ b/dashboard-ui/scripts/librarymenu.js @@ -98,8 +98,9 @@ if (user.Configuration.IsAdministrator) { html += '
'; - html += 'Dashboard'; + html += 'Dashboard'; html += 'Metadata Manager'; + html += 'Reports'; } return html; @@ -128,7 +129,7 @@ function getLibraryMenu(page, user, counts, items, liveTvInfo) { - var panel = $('#libraryPanel', page); + var panel = $('#libraryPanel'); if (!panel.length) { @@ -144,9 +145,9 @@ html += '
'; - $(page).append(html); + $(document.body).append(html); - panel = $('#libraryPanel', page).panel({}).trigger('create'); + panel = $('#libraryPanel').panel({}).trigger('create'); } updateLibraryNavLinks(page); @@ -179,14 +180,16 @@ } } - function updateLibraryNavLinks(page, updateElements) { + function updateLibraryNavLinks(page) { page = $(page); var isLiveTvPage = page.hasClass('liveTvPage'); var isChannelsPage = page.hasClass('channelsPage'); + var isEditorPage = page.hasClass('metadataEditorPage'); + var isReportsPage = page.hasClass('reportsPage'); - var id = isLiveTvPage || isChannelsPage || page.hasClass('allLibraryPage') ? + var id = isLiveTvPage || isChannelsPage || isEditorPage || isReportsPage || page.hasClass('allLibraryPage') ? '' : getTopParentId() || ''; @@ -202,6 +205,12 @@ else if (isLiveTvPage && itemId == 'livetv') { $(this).addClass('selectedMediaFolder'); } + else if (isEditorPage && itemId == 'editor') { + $(this).addClass('selectedMediaFolder'); + } + else if (isReportsPage && itemId == 'reports') { + $(this).addClass('selectedMediaFolder'); + } else if (id && itemId == id) { $(this).addClass('selectedMediaFolder'); } diff --git a/dashboard-ui/scripts/livetvstatus.js b/dashboard-ui/scripts/livetvstatus.js index f9426deba5..1a465bca31 100644 --- a/dashboard-ui/scripts/livetvstatus.js +++ b/dashboard-ui/scripts/livetvstatus.js @@ -123,7 +123,7 @@ versionHtml += ' Up to date!'; } - $('#activeServiceVersion', page).html(versionHtml); + $('#activeServiceVersion', page).html(versionHtml).trigger('create'); var status = liveTvInfo.Status; diff --git a/dashboard-ui/scripts/mediaplayer-video.js b/dashboard-ui/scripts/mediaplayer-video.js index 5b87e70334..e5c1463079 100644 --- a/dashboard-ui/scripts/mediaplayer-video.js +++ b/dashboard-ui/scripts/mediaplayer-video.js @@ -31,7 +31,7 @@ var currentTimeElement; self.initVideoPlayer = function () { - video = playVideo(item, mediaSource, startPosition, user); + video = playVideo(item, mediaSource, startPosition); return video; }; @@ -640,75 +640,6 @@ return html; } - function getInitialSubtitleStreamIndex(mediaStreams, user) { - - var i, length, mediaStream; - - // Find the first forced subtitle stream - for (i = 0, length = mediaStreams.length; i < length; i++) { - mediaStream = mediaStreams[i]; - - if (mediaStream.Type == "Subtitle" && mediaStream.IsForced) { - return mediaStream.Index; - } - - } - - // If none then look at user configuration - if (user.Configuration.SubtitleLanguagePreference) { - - for (i = 0, length = mediaStreams.length; i < length; i++) { - mediaStream = mediaStreams[i]; - - if (mediaStream.Type == "Subtitle" && mediaStream.Language == user.Configuration.SubtitleLanguagePreference) { - - if (user.Configuration.UseForcedSubtitlesOnly) { - - if (mediaStream.IsForced) { - return mediaStream.Index; - } - - } else { - return mediaStream.Index; - } - } - - } - } - - return null; - } - - function getInitialAudioStreamIndex(mediaStreams, user) { - - // Find all audio streams - var audioStreams = mediaStreams.filter(function (stream) { - return stream.Type == "Audio"; - - }).sort(function (a, b) { - - var av = a.IsDefault ? 0 : 1; - var bv = b.IsDefault ? 0 : 1; - - return av - bv; - }); - - if (user.Configuration.AudioLanguagePreference) { - - for (var i = 0, length = audioStreams.length; i < length; i++) { - var mediaStream = audioStreams[i]; - - if (mediaStream.Language == user.Configuration.AudioLanguagePreference) { - return mediaStream.Index; - } - - } - } - - // Just use the first audio stream - return audioStreams.length ? audioStreams[0].Index : null; - } - function getVideoQualityOptions(mediaStreams) { var videoStream = mediaStreams.filter(function (stream) { @@ -787,15 +718,15 @@ return options; } - function playVideo(item, mediaSource, startPosition, user) { + function playVideo(item, mediaSource, startPosition) { var mediaStreams = mediaSource.MediaStreams || []; var baseParams = { audioChannels: 2, StartTimeTicks: startPosition, - SubtitleStreamIndex: getInitialSubtitleStreamIndex(mediaStreams, user), - AudioStreamIndex: getInitialAudioStreamIndex(mediaStreams, user), + SubtitleStreamIndex: mediaSource.DefaultSubtitleStreamIndex, + AudioStreamIndex: mediaSource.DefaultAudioStreamIndex, deviceId: ApiClient.deviceId(), Static: false, mediaSourceId: mediaSource.Id diff --git a/dashboard-ui/scripts/metadataimagespage.js b/dashboard-ui/scripts/metadataimagespage.js index 82d90d7b15..5b5a700242 100644 --- a/dashboard-ui/scripts/metadataimagespage.js +++ b/dashboard-ui/scripts/metadataimagespage.js @@ -6,32 +6,18 @@ var html = ''; - html += '
'; - for (var i = 0, length = tabs.length; i < length; i++) { var tab = tabs[i]; - var isChecked = i == 0 ? ' checked="checked"' : ''; + var isChecked = i == 0 ? ' selected="selected"' : ''; - html += ''; - html += ''; + html += ''; } - html += '
'; - - var elem = $('.tabs', page).html(html).trigger('create'); + $('#selectItemType', page).html(html).selectmenu('refresh').trigger('change'); Dashboard.hideLoadingMsg(); - - $('.radioTypeTab', elem).on('change', function () { - - if (this.checked) { - - loadType(page, this.id); - } - - }).trigger('change'); } function loadType(page, type) { @@ -416,70 +402,29 @@ function loadPage(page) { - var type = getParameterByName('type'); + loadTabs(page, [ - $('.categoryTab', page).removeClass('ui-btn-active'); - - if (type == 'games') { - - loadTabs(page, [ - - { name: 'Games', type: 'Game' }, - { name: 'Game Systems', type: 'GameSystem' }, - { name: 'Game Genres', type: 'GameGenre' } - ]); - - $('.gamesTab', page).addClass('ui-btn-active'); - } - else if (type == 'movies') { - - loadTabs(page, [ - - { name: 'Movies', type: 'Movie' }, - { name: 'Trailers', type: 'Trailer' }, - { name: 'Collections', type: 'BoxSet' } - ]); - - $('.moviesTab', page).addClass('ui-btn-active'); - } - else if (type == 'tv') { - - loadTabs(page, [ - - { name: 'Series', type: 'Series' }, - { name: 'Seasons', type: 'Season' }, - { name: 'Episodes', type: 'Episode' } - ]); - - $('.tvTab', page).addClass('ui-btn-active'); - } - else if (type == 'music') { - - loadTabs(page, [ - - { name: 'Artists', type: 'MusicArtist' }, - { name: 'Albums', type: 'MusicAlbum' }, - { name: 'Songs', type: 'Audio' }, - { name: 'Music Videos', type: 'MusicVideo' }, - { name: 'Music Genres', type: 'MusicGenre' } - ]); - - $('.musicTab', page).addClass('ui-btn-active'); - } - else if (type == 'others') { - - loadTabs(page, [ - - { name: 'People', type: 'Person' }, - { name: 'Genres', type: 'Genre' }, - { name: 'Studios', type: 'Studio' }, - { name: 'Books', type: 'Book' }, - { name: 'Home Videos', type: 'Video' }, - { name: 'Adult Videos', type: 'AdultVideo' } - ]); - - $('.othersTab', page).addClass('ui-btn-active'); - } + { name: 'Movies', type: 'Movie' }, + { name: 'Trailers', type: 'Trailer' }, + { name: 'Collections', type: 'BoxSet' }, + { name: 'TV Series', type: 'Series' }, + { name: 'TV Seasons', type: 'Season' }, + { name: 'TV Episodes', type: 'Episode' }, + { name: 'Games', type: 'Game' }, + { name: 'Game Systems', type: 'GameSystem' }, + { name: 'Game Genres', type: 'GameGenre' }, + { name: 'Music Artists', type: 'MusicArtist' }, + { name: 'Music Albums', type: 'MusicAlbum' }, + { name: 'Music Videos', type: 'MusicVideo' }, + { name: 'Music Genres', type: 'MusicGenre' }, + { name: 'Songs', type: 'Audio' }, + { name: 'Home Videos', type: 'Video' }, + { name: 'Books', type: 'Book' }, + { name: 'Adult Videos', type: 'AdultVideo' }, + { name: 'People', type: 'Person' }, + { name: 'Genres', type: 'Genre' }, + { name: 'Studios', type: 'Studio' } + ]); } function saveSettingsIntoConfig(form, config) { @@ -614,7 +559,12 @@ ul.listview('destroy').listview({}); }); - + + $('#selectItemType', page).on('change', function () { + + loadType(page, this.value); + }); + }).on('pageshow', "#metadataImagesConfigurationPage", function () { Dashboard.showLoadingMsg(); diff --git a/dashboard-ui/scripts/nowplayingpage.js b/dashboard-ui/scripts/nowplayingpage.js index 83765cf7fa..c8927826f0 100644 --- a/dashboard-ui/scripts/nowplayingpage.js +++ b/dashboard-ui/scripts/nowplayingpage.js @@ -4,6 +4,106 @@ var lastPlayerState; var isPositionSliderActive; + function populateChapters(elem, chapters, itemId, runtimeTicks) { + + var html = ''; + + for (var i = 0, length = chapters.length; i < length; i++) { + + var chapter = chapters[i]; + + html += '
'; + + var imgUrl; + + if (chapter.ImageTag) { + + imgUrl = ApiClient.getImageUrl(itemId, { + maxwidth: 600, + tag: chapter.ImageTag, + type: "Chapter", + index: i + }); + + } else { + imgUrl = "css/images/items/list/chapter.png"; + } + + var dataSrc = ' data-src="' + imgUrl + '"'; + + html += '
'; + + html += '
'; + + if (chapter.Name) { + html += "
"; + html += chapter.Name; + html += "
"; + } + + html += "
"; + var pct = 100 * (chapter.StartPositionTicks / runtimeTicks); + html += ''; + html += "
"; + + html += "
"; + + html += "
"; + + html += "
"; + } + + elem.html(html).trigger('create'); + } + + function selectCurrentChapter(elem, positionTicks) { + + var elems = $('.chapterPosterItem', elem).removeClass('currentChapter'); + + var matches = elems.get().filter(function (i) { + + var ticks = i.getAttribute('data-positionticks'); + + return positionTicks >= ticks; + + }); + + var chapterElem = matches[matches.length - 1]; + + $(chapterElem).addClass('currentChapter'); + + chapterElem.scrollIntoView(); + + elem[0].scrollLeft += 50; + } + + function showChapterMenu(page, item, currentPositionTicks) { + + $('.chapterMenuOverlay', page).show(); + + var elem = $('.chapterMenu', page).show(); + + if (item.Id == elem.attr('data-itemid')) { + + selectCurrentChapter(elem, currentPositionTicks); + return; + } + + var innerElem = $('.chapterMenuInner', elem); + + populateChapters(innerElem, item.Chapters, item.Id, item.RunTimeTicks); + + elem.attr('data-itemid', item.Id); + + selectCurrentChapter(elem, currentPositionTicks); + } + + function hideChapterMenu(page) { + + $('.chapterMenuOverlay', page).hide(); + $('.chapterMenu', page).hide(); + } + function showAudioMenu(page, item, currentIndex) { var streams = (item.MediaStreams || []).filter(function (i) { @@ -20,7 +120,7 @@ var streamHtml = '
  • '; streamHtml += '

    '; - + if (s.Index == currentIndex) { streamHtml += ''; } @@ -67,7 +167,7 @@ function showSubtitleMenu(page, item, currentIndex) { var currentStreamImage = ''; - + var streams = (item.MediaStreams || []).filter(function (i) { return i.Type == 'Subtitle'; @@ -138,6 +238,22 @@ $(this).addClass('ui-btn-active'); }); + $('.chapterMenuOverlay', page).on('click', function () { + + hideChapterMenu(page); + }); + + $('.chapterMenu', page).on('click', '.chapterPosterItem', function () { + + if (currentPlayer) { + var ticks = this.getAttribute('data-positionticks'); + + currentPlayer.seek(parseInt(ticks)); + } + + hideChapterMenu(page); + }); + $('.btnCommand,.btnToggleFullscreen', page).on('click', function () { if (currentPlayer) { @@ -192,6 +308,9 @@ $('.btnChapters', page).on('click', function () { if (currentPlayer && lastPlayerState) { + + var currentPositionTicks = lastPlayerState.PlayState.PositionTicks; + showChapterMenu(page, lastPlayerState.NowPlayingItem, currentPositionTicks); } }); @@ -299,7 +418,14 @@ $('.btnAudioTracks', page).buttonEnabled(hasStreams(item, 'Audio') && supportedCommands.indexOf('SetAudioStreamIndex') != -1); $('.btnSubtitles', page).buttonEnabled(hasStreams(item, 'Subtitle') && supportedCommands.indexOf('SetSubtitleStreamIndex') != -1); - $('.btnChapters', page).buttonEnabled(item && item.Chapters && item.Chapters.length); + + if (item && item.Chapters && item.Chapters.length) { + $('.btnChapters', page).buttonEnabled(true); + + } else { + $('.btnChapters', page).buttonEnabled(false); + hideChapterMenu(page); + } $('.sendMessageElement', page).buttonEnabled(supportedCommands.indexOf('DisplayMessage') != -1); $('.typeTextElement', page).buttonEnabled(supportedCommands.indexOf('SendString') != -1); @@ -520,9 +646,9 @@ return false; }, - - onSendStringSubmit: function() { - + + onSendStringSubmit: function () { + var form = this; MediaController.sendCommand({ diff --git a/dashboard-ui/scripts/libraryreport.js b/dashboard-ui/scripts/reports.js similarity index 98% rename from dashboard-ui/scripts/libraryreport.js rename to dashboard-ui/scripts/reports.js index 83e1c0826d..7f1e359c6a 100644 --- a/dashboard-ui/scripts/libraryreport.js +++ b/dashboard-ui/scripts/reports.js @@ -484,9 +484,9 @@ if (c.sortField == currentSortField) { if (currentSortDirection == "Descending") { - cellHtml += ''; + cellHtml += ''; } else { - cellHtml += ''; + cellHtml += ''; } } } @@ -623,19 +623,6 @@ var page = this; - $('.libraryTree', page).on('itemclicked', function (event, data) { - - if (data.itemType == "libraryreport") { - return; - } - - if (data.itemType == "livetvservice") { - return; - } - - Dashboard.navigate('edititemmetadata.html?id=' + data.id); - }); - $('#radioBasicFilters', page).on('change', function () { if (this.checked) { diff --git a/dashboard-ui/scripts/usersettings.js b/dashboard-ui/scripts/usersettings.js index c4a835c9aa..41b6497363 100644 --- a/dashboard-ui/scripts/usersettings.js +++ b/dashboard-ui/scripts/usersettings.js @@ -29,12 +29,14 @@ $('#selectSubtitleLanguage', page).val(user.Configuration.SubtitleLanguagePreference || "").selectmenu("refresh"); }); - $('#chkForcedSubtitlesOnly', page).checked(user.Configuration.UseForcedSubtitlesOnly || false).checkboxradio("refresh"); $('#chkDisplayMissingEpisodes', page).checked(user.Configuration.DisplayMissingEpisodes || false).checkboxradio("refresh"); $('#chkDisplayUnairedEpisodes', page).checked(user.Configuration.DisplayUnairedEpisodes || false).checkboxradio("refresh"); $('#chkGroupMoviesIntoCollections', page).checked(user.Configuration.GroupMoviesIntoBoxSets || false).checkboxradio("refresh"); + $('#selectSubtitlePlaybackMode', page).val(user.Configuration.SubtitleMode || "").selectmenu("refresh"); + $('#chkPlayDefaultAudioTrack', page).checked(user.Configuration.PlayDefaultAudioTrack || false).checkboxradio("refresh"); + Dashboard.hideLoadingMsg(); } @@ -57,11 +59,13 @@ user.Configuration.AudioLanguagePreference = $('#selectAudioLanguage', page).val(); user.Configuration.SubtitleLanguagePreference = $('#selectSubtitleLanguage', page).val(); - user.Configuration.UseForcedSubtitlesOnly = $('#chkForcedSubtitlesOnly', page).checked(); user.Configuration.DisplayMissingEpisodes = $('#chkDisplayMissingEpisodes', page).checked(); user.Configuration.DisplayUnairedEpisodes = $('#chkDisplayUnairedEpisodes', page).checked(); user.Configuration.GroupMoviesIntoBoxSets = $('#chkGroupMoviesIntoCollections', page).checked(); + user.Configuration.SubtitleMode = $('#selectSubtitlePlaybackMode', page).val(); + user.Configuration.PlayDefaultAudioTrack = $('#chkPlayDefaultAudioTrack', page).checked(); + ApiClient.updateUser(user).done(function () { onSaveComplete(page); }); diff --git a/dashboard-ui/usersettings.html b/dashboard-ui/usersettings.html index e461ade4b2..8cd8ea0c85 100644 --- a/dashboard-ui/usersettings.html +++ b/dashboard-ui/usersettings.html @@ -36,15 +36,23 @@
  • -
    ${LabelAudioLanguagePreferenceHelp}
    +
  • +
  • + +
  • - - + +