From 20836ec2f67790fb69de11e5f3020c1e515acc36 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Mon, 12 May 2014 14:04:25 -0400 Subject: [PATCH] Add remote control chapter menu --- dashboard-ui/about.html | 54 ++++--- .../css/images/items/folders/edit.png | Bin 1994 -> 2124 bytes .../css/images/items/folders/report.png | Bin 0 -> 1259 bytes dashboard-ui/css/librarybrowser.css | 60 +------- dashboard-ui/css/librarymenu.css | 3 + dashboard-ui/css/nowplaying.css | 97 ++++++++++++ dashboard-ui/css/posteritem.css | 21 ++- dashboard-ui/css/site.css | 8 + dashboard-ui/metadata.html | 6 +- dashboard-ui/metadataadvanced.html | 6 +- dashboard-ui/metadataimages.html | 20 +-- dashboard-ui/metadatasubtitles.html | 6 +- dashboard-ui/nowplaying.html | 8 +- .../{libraryreport.html => reports.html} | 67 ++++----- dashboard-ui/scripts/edititemimages.js | 5 - dashboard-ui/scripts/edititemmetadata.js | 5 - dashboard-ui/scripts/edititempeople.js | 5 - dashboard-ui/scripts/editorsidebar.js | 14 -- dashboard-ui/scripts/librarymenu.js | 21 ++- dashboard-ui/scripts/livetvstatus.js | 2 +- dashboard-ui/scripts/mediaplayer-video.js | 77 +--------- dashboard-ui/scripts/metadataimagespage.js | 112 ++++---------- dashboard-ui/scripts/nowplayingpage.js | 138 +++++++++++++++++- .../scripts/{libraryreport.js => reports.js} | 17 +-- dashboard-ui/scripts/usersettings.js | 8 +- dashboard-ui/usersettings.html | 14 +- 26 files changed, 400 insertions(+), 374 deletions(-) create mode 100644 dashboard-ui/css/images/items/folders/report.png create mode 100644 dashboard-ui/css/nowplaying.css rename dashboard-ui/{libraryreport.html => reports.html} (74%) rename dashboard-ui/scripts/{libraryreport.js => reports.js} (98%) 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 6b276f1cdd113ddafb9726355aefff57c139f82a..e48e0e1d1c6e349fdc1ff3494e3783a5e8eccf86 100644 GIT binary patch delta 2061 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 Jg4gMs{{h}UysQ8K 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 0000000000000000000000000000000000000000..441b7fd5cbf2060816b08d9f5de01ed2066b1510 GIT binary patch literal 1259 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S901|%(3I5Gh##^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!ng&l7$B>G+w{z_?gac)c&t7trMMuM8#}?DQ zTT)Iec(6br<6vk(K|sI---`zi`nn$UlnIfMkqOm#p`fvYL$D;EKx2mDlJG?fo12@O z0~Y>#{5`$S%crP(@3Xu5<EqPi_zVoD;lB`ZU2%{rMf zZ_)hI#Zy`KPw@INTYl2XCqkEY=a_kyuFKihFSqMO(nbqAQ`4_p?DaENw=ua)oqhJ% z%%4Ahevi32-Gi@9=jX`{s=^j+HCj`vc5m8L)V#XK$mF8zr2fKC2?_UIOgE49XJ#x~ zzI=Ipt51>o_tQ^5@%8l@h+NDt+&(cjXS&nLzRu3h(=yVIH3lUUV~#g$I<=7{^N;)6 zCp+Z5r=`Aq_(Oi;j8Ywa{rE#Buf)XvAAar7ydY@ho5LS3^rTCNmj)fro_sfW--Yv5 z1r6eJRrtAQoq9M!u5jb*k8XBY7=AHK$ZRXFOU46JP z=c5Sk$#g}_6;~%N-MV#au*`9(@QZt_iu$|V4nDU#U!D|6{1!{JK{5 zg;m#yUvV=g#PBKep8IIEDf{iE{|RPWF4zVnpSd(YtVI%>{G5=|X2=!+ttbxCg}yALu z?;|a%i5^od-Ykq;KmUorrhw#wmR9fVnJ)G{e=mML|AE%jQzt{TT%~tfZEO*_dB1qE z>HD^f<+19yr#C&bkdp|%xGh(_Kw@2^?PNnBs2JpJ@V<-U1^g;Q3TOZD!S zkv>>_t#RKEnN1Pz%dfOs$MqL|>Rz64FXR~4^_>2`>wgU#2`3Ouw^sj6|CvVGcrww><_?Y_*|dt5-~ ff?9iW@_xpT$ELL0=u~w97ElbHu6{1-oD!M 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}
    +
  • +
  • + +
  • - - + +