1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

change tv and home to multi-pages

This commit is contained in:
Luke Pulverenti 2015-06-29 14:45:42 -04:00
parent e2823d0367
commit 5bfd2d683c
63 changed files with 987 additions and 658 deletions

View file

@ -28,14 +28,14 @@
"web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"homepage": "https://github.com/polymerelements/iron-selector",
"homepage": "https://github.com/PolymerElements/iron-selector",
"_release": "1.0.2",
"_resolution": {
"type": "version",
"tag": "v1.0.2",
"commit": "ea22d91d11ba6f72c01faa952d5e600f9d1773cf"
},
"_source": "git://github.com/polymerelements/iron-selector.git",
"_source": "git://github.com/PolymerElements/iron-selector.git",
"_target": "^1.0.0",
"_originalSource": "polymerelements/iron-selector"
"_originalSource": "PolymerElements/iron-selector"
}

View file

@ -89,7 +89,7 @@
ApiClientBridge.sendRequest(JSON.stringify(javaRequest), request.dataType, id);
Events.on(AndroidAjax, 'response' + id, function (e, isSuccess, status, response) {
Events.on(AndroidAjax, 'response' + id, function (e, isSuccess, response) {
Events.off(AndroidAjax, 'response' + id);
@ -116,7 +116,10 @@
var error = {};
error.status = response.StatusCode;
if (response.StatusCode) {
error.status = response.StatusCode;
}
error.ResponseHeaders = response.ResponseHeaders || {};
error.getResponseHeader = function (name) {
@ -133,13 +136,13 @@
window.AndroidAjax = {
onResponse: function (id, status, response) {
onResponse: function (id, response) {
Events.trigger(AndroidAjax, 'response' + id, [true, status, response]);
Events.trigger(AndroidAjax, 'response' + id, [true, response]);
},
onError: function (id, status, response) {
onError: function (id, response) {
Events.trigger(AndroidAjax, 'response' + id, [false, status, response]);
Events.trigger(AndroidAjax, 'response' + id, [false, response]);
}
};

View file

@ -65,15 +65,15 @@
return;
}
$(player).on('playbackstart.fullscreen', onPlaybackStart)
.on('playbackstop.fullscreen', onPlaybackStopped);
$(player).on('playbackstart', onPlaybackStart)
.on('playbackstop', onPlaybackStopped);
}
function releaseCurrentPlayer() {
if (currentPlayer) {
$(currentPlayer).off('.fullscreen');
$(currentPlayer).off('playbackstart', onPlaybackStart).off('playbackstop', onPlaybackStopped);
}
}

View file

@ -119,7 +119,11 @@
if (currentPlayer) {
$(currentPlayer).off('.cordovaremote');
$(currentPlayer).off('playbackstart', onPlaybackStart)
.off('playbackstop', onPlaybackStopped)
.off('playstatechange', onStateChanged)
.off('positionchange', onStateChanged);
currentPlayer.endPlayerUpdates();
currentPlayer = null;
@ -153,10 +157,10 @@
onStateChanged.call(player, { type: 'init' }, state);
});
$(player).on('playbackstart.cordovaremote', onPlaybackStart)
.on('playbackstop.cordovaremote', onPlaybackStopped)
.on('playstatechange.cordovaremote', onStateChanged)
.on('positionchange.cordovaremote', onStateChanged);
$(player).on('playbackstart', onPlaybackStart)
.on('playbackstop', onPlaybackStopped)
.on('playstatechange', onStateChanged)
.on('positionchange', onStateChanged);
}
Dashboard.ready(function () {

View file

@ -6,6 +6,8 @@
// Try to make it react quicker to the orientation change
doc.scrollTop(doc.scrollTop() + 1);
$('.libraryViewNav').filter(':visible').hide().show();
}
function onOrientationChange() {

View file

@ -94,7 +94,11 @@
if (currentPlayer) {
$(currentPlayer).off('.cordovaremote');
$(currentPlayer).off('playbackstart', onPlaybackStart)
.off('playbackstop', onPlaybackStopped)
.off('playstatechange', onStateChanged)
.off('positionchange', onStateChanged);
currentPlayer.endPlayerUpdates();
currentPlayer = null;
@ -151,10 +155,10 @@
onStateChanged.call(player, { type: 'init' }, state);
});
$(player).on('playbackstart.cordovaremote', onPlaybackStart)
.on('playbackstop.cordovaremote', onPlaybackStopped)
.on('playstatechange.cordovaremote', onStateChanged)
.on('positionchange.cordovaremote', onStateChanged);
$(player).on('playbackstart', onPlaybackStart)
.on('playbackstop', onPlaybackStopped)
.on('playstatechange', onStateChanged)
.on('positionchange', onStateChanged);
}
Dashboard.ready(function () {

View file

@ -1,24 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Emby</title>
</head>
<body>
<div id="favoritesPage" data-role="page" class="page libraryPage allLibraryPage backdropPage" data-backdroptype="movie,series,game,book" data-require="scripts/favorites,paperbuttonstyle">
<div class="libraryViewNav scopedLibraryViewNav">
<a href="index.html"><i class="material-icons">home</i>${TabHome}</a>
<a href="tvrecommended.html"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="favorites.html" class="ui-btn-active"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="tvupcoming.html"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
<div data-role="content">
<div class="ehsContent">
<div class="sections"></div>
</div>
</div>
</div>
</body>
</html>

View file

@ -9,9 +9,9 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="#" class="ui-btn-active"><i class="material-icons">home</i>${TabHome}</a>
<a href="tvrecommended.html"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="favorites.html"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="tvupcoming.html"><i class="material-icons">schedule</i>${TabUpcoming}</a>
<a href="#homeNextUpPage"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="#favoritesPage"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="#homeUpcomingPage"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
<div data-role="content">
@ -29,6 +29,72 @@
</div>
</div>
<div id="homeNextUpPage" data-role="page" class="page libraryPage backdropPage" data-backdroptype="series" data-require="scripts/homenextup,paperbuttonstyle">
<div class="libraryViewNav globalNav">
<a href="#indexPage"><i class="material-icons">home</i>${TabHome}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="#favoritesPage"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="#homeUpcomingPage"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
<div data-role="content">
<div class="ehsContent">
<div id="resumableSection" style="display: none;" class="scopedContent homePageSection">
<div>
<h1 class="listHeader" style="display:inline-block;vertical-align:middle;">${HeaderResume}</h1>
<paper-button raised class="submit mini categorySyncButton" data-category="Resume"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button>
</div>
<div id="resumableItems" class="itemsContainer">
</div>
</div>
<div class="homePageSection">
<div>
<h1 class="listHeader nextUpHeader" style="display:inline-block;vertical-align:middle;">${HeaderNextUp}</h1>
<paper-button raised class="submit mini categorySyncButton" data-category="NextUp"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button>
</div>
<div id="nextUpItems" class="itemsContainer">
</div>
</div>
<p class="noNextUpItems" style="display: none;">${NoNextUpItemsMessage}</p>
</div>
</div>
</div>
<div id="favoritesPage" data-role="page" class="page libraryPage allLibraryPage backdropPage" data-backdroptype="movie,series,game,book" data-require="scripts/favorites,paperbuttonstyle">
<div class="libraryViewNav scopedLibraryViewNav">
<a href="#indexPage"><i class="material-icons">home</i>${TabHome}</a>
<a href="#homeNextUpPage"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="#favoritesPage" class="ui-btn-active"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="#homeUpcomingPage"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
<div data-role="content">
<div class="ehsContent">
<div class="sections"></div>
</div>
</div>
</div>
<div id="homeUpcomingPage" data-role="page" class="page libraryPage backdropPage" data-backdroptype="series" data-require="scripts/homeupcoming">
<div class="libraryViewNav globalNav">
<a href="#indexPage"><i class="material-icons">home</i>${TabHome}</a>
<a href="#homeNextUpPage"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="#favoritesPage"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
<div data-role="content">
<div class="ehsContent">
<div id="upcomingItems" class="itemsContainer">
</div>
<div class="noItemsMessage" style="display: none;">
<p>${MessageNothingHere}</p>
<p><a href="metadata.html">${MessagePleaseEnsureInternetMetadata}</a></p>
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -9,9 +9,9 @@
<div class="itemTabs homeTabs" style="display: none;">
<div class="libraryViewNav scopedLibraryViewNav">
<a href="index.html" class="lnkHomeHome"><i class="material-icons">home</i>${TabHome}</a>
<a href="tvrecommended.html" class="lnkHomeNextUp"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="favorites.html" class="lnkHomeFavorites"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="tvupcoming.html" class="lnkHomeUpcoming"><i class="material-icons">schedule</i>${TabUpcoming}</a>
<a href="index.html#homeNextUpPage" class="lnkHomeNextUp"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="index.html#favoritesPage" class="lnkHomeFavorites"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="index.html#homeUpcomingPage" class="lnkHomeUpcoming"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
</div>

View file

@ -7,11 +7,11 @@
<div id="liveTvChannelPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvchannel,paperbuttonstyle,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html" class="ui-btn-active"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage" class="ui-btn-active"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<table class="detailPageContent primaryDetailPageContent">
<tr>

View file

@ -1,60 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Emby</title>
</head>
<body>
<div id="liveTvChannelsPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvchannels,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html" class="ui-btn-active"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div class="viewSettings">
<div class="listTopPaging">
</div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" class="viewPanel" data-theme="a" data-position="right" data-display="overlay" data-position-fixed="true">
<form>
<div data-role="controlgroup" data-type="horizontal" data-mini="true" class="viewPanelTabs">
<a href="#" data-role="button" class="viewTabButton" data-tab="tabView">${TabView}</a>
<a href="#" data-role="button" class="viewTabButton" data-tab="tabFilter">${TabFilter}</a>
</div>
<div class="tabView viewTab">
<div>
<label for="selectPageSize">${LabelPageSize}</label>
<select id="selectPageSize"></select>
</div>
</div>
<div class="tabFilter viewTab">
<fieldset data-role="controlgroup">
<legend>${HeaderFilters}</legend>
<input class="chkStandardFilter" type="checkbox" id="chkFavorite" data-filter="IsFavorite" data-mini="true">
<label for="chkFavorite">${OptionFavorite}</label>
<input class="chkStandardFilter" type="checkbox" id="chkLikes" data-filter="Likes" data-mini="true">
<label for="chkLikes">${OptionLikes}</label>
<input class="chkStandardFilter" type="checkbox" id="chkDislikes" data-filter="Dislikes" data-mini="true">
<label for="chkDislikes">${OptionDislikes}</label>
</fieldset>
</div>
</form>
</div>
</div>
</body>
</html>

View file

@ -1,42 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Emby</title>
</head>
<body>
<div id="liveTvGuidePage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/registrationservices,scripts/livetvcomponents,scripts/livetvguide,paperbuttonstyle,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html" class="ui-btn-active"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content" style="padding-top: 5px;padding-left:0!important;padding-right:0!important;">
<div class="tvGuide">
<div class="tvGuideHeader">
<div class="channelTimeslotHeader">
<div class="timeslotHeaderInner">
<a class="btnSelectDate" href="#" style="display:block;padding-left:5px;color:#fff;text-decoration:none;font-weight:normal!important;padding:4px 10px 4px 0;"><i class="fa fa-calendar" style="margin-right:3px;"></i><span class="currentDate"></span></a>
</div>
</div>
<div class="timeslotHeaders hiddenScrollX"></div>
</div>
<div class="programContainer">
<div class="channelList"></div>
<div class="programGrid hiddenScrollX"></div>
</div>
<div class="channelPaging"></div>
</div>
<div class="guideRequiresUnlock readOnlyContent" style="margin:1em auto;text-align:center;display:none;padding:1em;">
<p class="unlockText"></p>
<paper-button raised class="secondary block btnUnlockGuide"><iron-icon icon="check"></iron-icon><span>${ButtonUnlockGuide}</span></paper-button>
</div>
</div>
</div>
</body>
</html>

View file

@ -7,11 +7,11 @@
<div id="liveTvItemsPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvitems,scripts/queryfilters,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html" class="ui-btn-active"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div class="viewSettings">

View file

@ -7,11 +7,11 @@
<div id="liveTvNewRecordingPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvnewrecording,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<form class="liveTvNewRecordingForm" style="margin: 0 auto;">

View file

@ -7,11 +7,11 @@
<div id="liveTvProgramPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvprogram,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html" class="ui-btn-active"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage" class="ui-btn-active"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div style="padding: 1em 0;">
<div>

View file

@ -7,11 +7,11 @@
<div id="liveTvRecordingPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvrecording,paperbuttonstyle,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div style="padding: 1em 0;">
<div>

View file

@ -7,11 +7,11 @@
<div id="liveTvRecordingListPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvrecordinglist,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div class="viewSettings" style="margin:.5em 0;">

View file

@ -1,40 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Emby</title>
</head>
<body>
<div id="liveTvRecordingsPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvrecordings,paperbuttonstyle,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div class="ehsContent">
<div id="activeRecordings" style="display: none;">
<h1 class="listHeader">${HeaderActiveRecordings}</h1>
<div class="recordingItems itemsContainer"></div>
<br />
</div>
<div id="latestRecordings" style="display: none;">
<div>
<h1 class="listHeader" style="display:inline-block;vertical-align:middle;">${HeaderLatestRecordings}</h1>
<paper-button raised class="submit mini categorySyncButton" data-category="Latest"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button>
</div>
<div class="recordingItems itemsContainer"></div>
<br />
</div>
<div id="recordingGroups" style="display: none;">
<h1 class="listHeader"><a href="livetvrecordinglist.html">${HeaderAllRecordings}<img src="css/images/rightarrow.png" class="headerArrowImage" /></a></h1>
<div id="recordingGroupItems"></div>
</div>
</div>
</div>
</div>
</body>
</html>

View file

@ -7,11 +7,11 @@
<div id="liveTvSeriesTimerPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvseriestimer,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html" class="ui-btn-active"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage" class="ui-btn-active"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<form class="liveTvSeriesTimerForm" style="margin: 0 auto; max-width: 720px;">

View file

@ -1,57 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Emby</title>
</head>
<body>
<div id="liveTvSeriesTimersPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvseriestimers,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div style="max-width: 600px; margin: 0 auto;">
<div style="text-align: right;">
<button data-mini="true" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">${ButtonSort}</button>
</div>
<div id="items"></div>
</div>
</div>
<div data-role="panel" id="sortPanel" data-theme="a" data-position="right" data-display="overlay" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
${HeaderSortBy}
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">${OptionNameSort}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioPriority" value="off" data-sortby="Priority" data-mini="true">
<label for="radioPriority">${OptionPriority}</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
${HeaderSortOrder}
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">${OptionAscending}</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">${OptionDescending}</label>
</fieldset>
</form>
</div>
</div>
</body>
</html>

View file

@ -8,11 +8,11 @@
<div class="libraryViewNav">
<a href="#" class="ui-btn-active"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div class="ehsContent">
@ -45,5 +45,187 @@
</div>
</div>
</div>
<div id="liveTvGuidePage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/registrationservices,scripts/livetvcomponents,scripts/livetvguide,paperbuttonstyle,livetvcss">
<div class="libraryViewNav">
<a href="#liveTvSuggestedPage"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content" style="padding-top: 5px;padding-left:0!important;padding-right:0!important;">
<div class="tvGuide">
<div class="tvGuideHeader">
<div class="channelTimeslotHeader">
<div class="timeslotHeaderInner">
<a class="btnSelectDate" href="#" style="display:block;padding-left:5px;color:#fff;text-decoration:none;font-weight:normal!important;padding:4px 10px 4px 0;"><i class="fa fa-calendar" style="margin-right:3px;"></i><span class="currentDate"></span></a>
</div>
</div>
<div class="timeslotHeaders hiddenScrollX"></div>
</div>
<div class="programContainer">
<div class="channelList"></div>
<div class="programGrid hiddenScrollX"></div>
</div>
<div class="channelPaging"></div>
</div>
<div class="guideRequiresUnlock readOnlyContent" style="margin:1em auto;text-align:center;display:none;padding:1em;">
<p class="unlockText"></p>
<paper-button raised class="secondary block btnUnlockGuide"><iron-icon icon="check"></iron-icon><span>${ButtonUnlockGuide}</span></paper-button>
</div>
</div>
</div>
<div id="liveTvChannelsPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvchannels,livetvcss">
<div class="libraryViewNav">
<a href="#liveTvSuggestedPage"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div class="viewSettings">
<div class="listTopPaging">
</div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" class="viewPanel" data-theme="a" data-position="right" data-display="overlay" data-position-fixed="true">
<form>
<div data-role="controlgroup" data-type="horizontal" data-mini="true" class="viewPanelTabs">
<a href="#" data-role="button" class="viewTabButton" data-tab="tabView">${TabView}</a>
<a href="#" data-role="button" class="viewTabButton" data-tab="tabFilter">${TabFilter}</a>
</div>
<div class="tabView viewTab">
<div>
<label for="selectPageSize">${LabelPageSize}</label>
<select id="selectPageSize"></select>
</div>
</div>
<div class="tabFilter viewTab">
<fieldset data-role="controlgroup">
<legend>${HeaderFilters}</legend>
<input class="chkStandardFilter" type="checkbox" id="chkFavorite" data-filter="IsFavorite" data-mini="true">
<label for="chkFavorite">${OptionFavorite}</label>
<input class="chkStandardFilter" type="checkbox" id="chkLikes" data-filter="Likes" data-mini="true">
<label for="chkLikes">${OptionLikes}</label>
<input class="chkStandardFilter" type="checkbox" id="chkDislikes" data-filter="Dislikes" data-mini="true">
<label for="chkDislikes">${OptionDislikes}</label>
</fieldset>
</div>
</form>
</div>
</div>
<div id="liveTvRecordingsPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvrecordings,paperbuttonstyle,livetvcss">
<div class="libraryViewNav">
<a href="#liveTvSuggestedPage"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div class="ehsContent">
<div id="activeRecordings" style="display: none;">
<h1 class="listHeader">${HeaderActiveRecordings}</h1>
<div class="recordingItems itemsContainer"></div>
<br />
</div>
<div id="latestRecordings" style="display: none;">
<div>
<h1 class="listHeader" style="display:inline-block;vertical-align:middle;">${HeaderLatestRecordings}</h1>
<paper-button raised class="submit mini categorySyncButton" data-category="Latest"><iron-icon icon="refresh"></iron-icon><span>${ButtonSync}</span></paper-button>
</div>
<div class="recordingItems itemsContainer"></div>
<br />
</div>
<div id="recordingGroups" style="display: none;">
<h1 class="listHeader"><a href="livetvrecordinglist.html">${HeaderAllRecordings}<img src="css/images/rightarrow.png" class="headerArrowImage" /></a></h1>
<div id="recordingGroupItems"></div>
</div>
</div>
</div>
</div>
<div id="liveTvTimersPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvtimers,livetvcss">
<div class="libraryViewNav">
<a href="#liveTvSuggestedPage"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div style="max-width: 600px; margin: 0 auto;">
<div id="items"></div>
</div>
</div>
</div>
<div id="liveTvSeriesTimersPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvseriestimers,livetvcss">
<div class="libraryViewNav">
<a href="#liveTvSuggestedPage"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="#liveTvTimersPage"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div style="max-width: 600px; margin: 0 auto;">
<div style="text-align: right;">
<button data-mini="true" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">${ButtonSort}</button>
</div>
<div id="items"></div>
</div>
</div>
<div data-role="panel" id="sortPanel" data-theme="a" data-position="right" data-display="overlay" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
${HeaderSortBy}
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">${OptionNameSort}</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioPriority" value="off" data-sortby="Priority" data-mini="true">
<label for="radioPriority">${OptionPriority}</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
${HeaderSortOrder}
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">${OptionAscending}</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">${OptionDescending}</label>
</fieldset>
</form>
</div>
</div>
</body>
</html>

View file

@ -7,11 +7,11 @@
<div id="liveTvTimerPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvcomponents,scripts/livetvtimer,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html" class="ui-btn-active"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
<a href="livetvsuggested.html#liveTvGuidePage"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvsuggested.html#liveTvChannelsPage"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvsuggested.html#liveTvRecordingsPage"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvsuggested.html#liveTvTimersPage" class="ui-btn-active"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvsuggested.html#liveTvSeriesTimersPage"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
@ -74,7 +74,7 @@
<button type="submit" data-theme="a" data-icon="check" data-mini="true">
${ButtonSave}
</button>
<button type="button" onclick="Dashboard.navigate('livetvtimers.html');" data-icon="delete" data-mini="true">
<button type="button" onclick="Dashboard.navigate('livetvsuggested.html#liveTvTimersPage');" data-icon="delete" data-mini="true">
${ButtonCancel}
</button>
</li>

View file

@ -1,23 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Emby</title>
</head>
<body>
<div id="liveTvTimersPage" data-role="page" class="page libraryPage liveTvPage" data-contextname="${HeaderLiveTv}" data-require="scripts/livetvtimers,livetvcss">
<div class="libraryViewNav">
<a href="livetvsuggested.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="livetvguide.html"><i class="material-icons">grid_on</i>${TabGuide}</a>
<a href="livetvchannels.html"><i class="material-icons">live_tv</i>${TabChannels}</a>
<a href="livetvrecordings.html"><i class="material-icons">slideshow</i>${TabRecordings}</a>
<a href="livetvtimers.html" class="ui-btn-active"><i class="material-icons">schedule</i>${TabScheduled}</a>
<a href="livetvseriestimers.html"><i class="material-icons">refresh</i>${TabSeries}</a>
</div>
<div data-role="content">
<div style="max-width: 600px; margin: 0 auto;">
<div id="items"></div>
</div>
</div>
</div>
</body>
</html>

View file

@ -20,8 +20,8 @@
var pos = $(options.positionTo).offset();
pos.top += options.positionTo.innerHeight / 2;
pos.left += options.positionTo.innerWidth / 2;
pos.top += $(options.positionTo).innerHeight() / 2;
pos.left += $(options.positionTo).innerWidth() / 2;
// Account for margins
pos.top -= 24;

View file

@ -379,7 +379,7 @@
mode: 'off'
});
$(ApiClient).off(".autoorganizelog");
$(ApiClient).off("websocketmessage.autoorganizelog", onWebSocketMessage);
});
})(jQuery, document, window);

View file

@ -109,9 +109,10 @@
function setDefault(page) {
getElement().css('backgroundImage', 'url(css/images/splash.jpg)');
getElement().style.backgroundImage = "url(css/images/splash.jpg)";
page.classList.add('backdropPage staticBackdropPage');
page.classList.add('backdropPage');
page.classList.add('staticBackdropPage');
}
function isEnabledByDefault() {

View file

@ -1022,23 +1022,19 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
showOverlayTimeout = null;
}
$('.cardOverlayTarget:visible', this).each(function () {
var elem = this.querySelector('.cardOverlayTarget');
var elem = this;
$(this).animate({ "height": "0" }, "fast", function () {
$(elem).hide();
if ($(elem).is(':visible')) {
require(["jquery", "velocity"], function ($, Velocity) {
Velocity.animate(elem, { "height": "0" },
{
complete: function () {
$(elem).hide();
}
});
});
});
$('.cardOverlayTarget:visible', this).stop().animate({ "height": "0" }, function () {
$(this).hide();
});
}
}
$.fn.createSessionItemMenus = function () {
@ -1082,8 +1078,7 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
return this;
}
return this.off('.sessionItemMenu').on('mouseenter.sessionItemMenu', '.playingSession', onHoverIn)
.on('mouseleave.sessionItemMenu', '.playingSession', onHoverOut);
return this.off('mouseenter', '.playingSession', onHoverIn).off('mouseleave', '.playingSession', onHoverOut).on('mouseenter', '.playingSession', onHoverIn).on('mouseleave', '.playingSession', onHoverOut);
};
})(jQuery, document, window);
@ -1225,7 +1220,8 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
elem.each(function () {
reloadData(this);
});
}).addClass('activityLogListWidget');
var apiClient = ApiClient;
@ -1233,21 +1229,7 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
return;
}
$(apiClient).on('websocketmessage.activityloglistener', function (e, data) {
var msg = data;
if (msg.MessageType === "ActivityLogEntry") {
elem.each(function () {
reloadData(this);
});
}
}).on('websocketopen.activityloglistener', function (e, data) {
startListening(apiClient);
});
$(apiClient).on('websocketmessage', onSocketMessage).on('websocketopen', onSocketOpen);
}
function startListening(apiClient) {
@ -1266,22 +1248,41 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
}
function onSocketOpen() {
var apiClient = ApiClient;
if (apiClient) {
startListening(apiClient);
}
}
function onSocketMessage(e, data) {
var msg = data;
if (msg.MessageType === "ActivityLogEntry") {
$('.activityLogListWidget').each(function () {
reloadData(this);
});
}
}
function destroyList(elem) {
var apiClient = ApiClient;
if (apiClient) {
$(apiClient).off('websocketopen.activityloglistener').off('websocketmessage.activityloglistener');
$(apiClient).off('websocketopen', onSocketOpen).off('websocketmessage', onSocketOpen);
stopListening(apiClient);
}
return this;
}
$.fn.activityLogList = function (action) {
if (action == 'destroy') {
this.removeClass('activityLogListWidget');
destroyList(this);
} else {
createList(this);
@ -1310,7 +1311,7 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
result.CustomPrefs[welcomeTourKey] = welcomeDismissValue;
ApiClient.updateDisplayPreferences('dashboard', result, userId, 'dashboard');
$(page).off('.checktour');
$(page).off('pageshowready', onPageShowReadyCheckTour);
});
}
@ -1367,6 +1368,16 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
});
}
function onPageShowReadyCheckTour() {
var page = this;
var apiClient = ApiClient;
if (apiClient && !AppInfo.isNativeApp) {
showWelcomeIfNeeded(page, apiClient);
}
}
$(document).on('pageinitdepends', "#dashboardPage", function () {
var page = this;
@ -1375,17 +1386,7 @@ $(document).on('pageshowready', "#dashboardPage", DashboardPage.onPageShow).on('
takeTour(page, Dashboard.getCurrentUserId());
});
}).on('pageshowready.checktour', "#dashboardPage", function () {
var page = this;
var apiClient = ApiClient;
if (apiClient && !AppInfo.isNativeApp) {
showWelcomeIfNeeded(page, apiClient);
}
});
}).on('pageshowready', "#dashboardPage", onPageShowReadyCheckTour);
})(jQuery, document, window);

View file

@ -285,17 +285,11 @@
reload(page);
$("body").on("popupafteropen.collections", ".popupIdentify", function (e) {
$("#txtLookupName").focus().select();
});
}).on('pagebeforehide', "#editCollectionTitlesPage", function () {
var page = this;
currentItem = null;
$("body").off("popupafteropen.collections");
});
})(jQuery, document, window, window.FileReader, escape);

View file

@ -809,9 +809,9 @@
function getAlbumArtists(form) {
return $('#txtAlbumArtist', form).val().trim().split(';').filter(function(s){
return $('#txtAlbumArtist', form).val().trim().split(';').filter(function (s) {
return s.length > 0;
return s.length > 0;
}).map(function (a) {
@ -823,9 +823,9 @@
function getArtists(form) {
return $('#txtArtist', form).val().trim().split(';').filter(function(s){
return $('#txtArtist', form).val().trim().split(';').filter(function (s) {
return s.length > 0;
return s.length > 0;
}).map(function (a) {
@ -1379,6 +1379,18 @@
$(ApiClient).off("websocketmessage", onWebSocketMessageReceived);
}
function onItemDeleted(e, itemId) {
if (currentItem && currentItem.Id == itemId) {
if (currentItem.ParentId) {
Dashboard.navigate('edititemmetadata.html?id=' + currentItem.ParentId);
} else {
Dashboard.navigate('edititemmetadata.html');
}
}
}
$(document).on('pageinitdepends', "#editItemMetadataPage", function () {
var page = this;
@ -1450,22 +1462,12 @@
reload(page);
$(LibraryBrowser).on('itemdeleting.editor', function (e, itemId) {
if (currentItem && currentItem.Id == itemId) {
if (currentItem.ParentId) {
Dashboard.navigate('edititemmetadata.html?id=' + currentItem.ParentId);
} else {
Dashboard.navigate('edititemmetadata.html');
}
}
});
$(LibraryBrowser).on('itemdeleting', onItemDeleted);
}).on('pagebeforehide', "#editItemMetadataPage", function () {
var page = this;
$(LibraryBrowser).off('itemdeleting.editor');
$(LibraryBrowser).off('itemdeleting', onItemDeleted);
unbindItemChanged(page);

View file

@ -269,6 +269,53 @@
});
}
function onNodeSelect(event, data) {
var node = data.node;
var eventData = {
id: node.id,
itemType: node.li_attr.itemtype
};
if (eventData.itemType != 'livetv' && eventData.itemType != 'mediafolders') {
$(this).trigger('itemclicked', [eventData]);
}
}
function onNodeOpen(event, data) {
var page = $(this).parents('.page')[0];
var node = data.node;
if (node.children && node.children) {
loadNodesToLoad(page, node);
}
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
node.li_attr.loadedFromServer = true;
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
}
}
function onNodeLoad(event, data) {
var page = $(this).parents('.page')[0];
var node = data.node;
if (node.children && node.children) {
loadNodesToLoad(page, node);
}
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
node.li_attr.loadedFromServer = true;
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
}
}
function initializeTreeInternal(page, currentUser, openItems, selectedId) {
nodesToLoad = [];
@ -293,50 +340,7 @@
}
}
}).off('select_node.jstree').on('select_node.jstree', function (event, data) {
var node = data.node;
var eventData = {
id: node.id,
itemType: node.li_attr.itemtype
};
if (eventData.itemType != 'livetv' && eventData.itemType != 'mediafolders') {
$(this).trigger('itemclicked', [eventData]);
}
}).off('open_node.jstree').on('open_node.jstree', function (event, data) {
var node = data.node;
if (node.children && node.children) {
loadNodesToLoad(page, node);
}
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
node.li_attr.loadedFromServer = true;
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
}
}).off('load_node.jstree').on('load_node.jstree', function (event, data) {
var node = data.node;
if (node.children && node.children) {
loadNodesToLoad(page, node);
}
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
node.li_attr.loadedFromServer = true;
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
}
});
}).off('select_node.jstree', onNodeSelect).on('select_node.jstree', onNodeSelect).off('open_node.jstree', onNodeOpen).on('open_node.jstree', onNodeOpen).off('load_node.jstree', onNodeLoad).on('load_node.jstree', onNodeLoad);
}
function loadNodesToLoad(page, node) {
@ -431,7 +435,7 @@
var page = this;
$('.libraryTree', page).off('select_node.jstree');
$('.libraryTree', page).off('select_node.jstree', onNodeSelect).off('open_node.jstree', onNodeOpen).off('load_node.jstree', onNodeLoad);
});

View file

@ -312,7 +312,7 @@ function replaceQueryString(url, param, value) {
var re = new RegExp("([?|&])" + param + "=.*?(&|$)", "i");
if (url.match(re))
return url.replace(re, '$1' + param + "=" + value + '$2');
else {
else if (value) {
if (url.indexOf('?') == -1) {
return url + '?' + param + "=" + value;
@ -320,6 +320,8 @@ function replaceQueryString(url, param, value) {
return url + '&' + param + "=" + value;
}
return url;
}
function parseISO8601Date(s, options) {

View file

@ -54,7 +54,7 @@
html += '</div>';
if (result.TotalRecordCount > result.Items.length) {
var href = "favorites.html?sectionid=" + section.id;
var href = "index.html#favoritesPage?sectionid=" + section.id;
html += '<a class="clearLink" href="' + href + '"><paper-button raised class="more">' + Globalize.translate('ButtonMoreItems') + '</paper-button></a>';
}

View file

@ -0,0 +1,191 @@
(function ($, document) {
function getView() {
return 'Thumb';
}
function getResumeView() {
return 'Poster';
}
function reload(page) {
Dashboard.showLoadingMsg();
var context = '';
if (LibraryMenu.getTopParentId()) {
$('.scopedLibraryViewNav', page).show();
$('.globalNav', page).hide();
$('.scopedContent', page).show();
context = 'tv';
loadResume(page);
} else {
$('.scopedLibraryViewNav', page).hide();
$('.globalNav', page).show();
$('.scopedContent', page).hide();
}
loadNextUp(page, context || 'home-nextup');
}
function loadNextUp(page, context) {
var limit = AppInfo.hasLowImageBandwidth ?
16 :
24;
var query = {
Limit: limit,
Fields: "PrimaryImageAspectRatio,SeriesInfo,DateCreated,SyncInfo",
UserId: Dashboard.getCurrentUserId(),
ExcludeLocationTypes: "Virtual",
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
};
query.ParentId = LibraryMenu.getTopParentId();
ApiClient.getNextUpEpisodes(query).done(function (result) {
if (result.Items.length) {
$('.noNextUpItems', page).hide();
} else {
$('.noNextUpItems', page).show();
}
var view = getView();
var html = '';
if (view == 'ThumbCard') {
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
showTitle: true,
preferThumb: true,
showParentTitle: true,
lazy: true,
cardLayout: true,
context: 'tv',
showDetailsMenu: true
});
} else if (view == 'Thumb') {
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
showTitle: true,
showParentTitle: true,
overlayText: false,
context: context,
lazy: true,
preferThumb: true,
showDetailsMenu: true
});
}
var elem = page.querySelector('#nextUpItems');
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
Dashboard.hideLoadingMsg();
});
}
function enableScrollX() {
return $.browser.mobile && AppInfo.enableAppLayouts;
}
function getThumbShape() {
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
}
function loadResume(page) {
var parentId = LibraryMenu.getTopParentId();
var screenWidth = $(window).width();
var limit = 6;
var options = {
SortBy: "DatePlayed",
SortOrder: "Descending",
IncludeItemTypes: "Episode",
Filters: "IsResumable",
Limit: limit,
Recursive: true,
Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,SyncInfo",
ExcludeLocationTypes: "Virtual",
ParentId: parentId,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
if (result.Items.length) {
$('#resumableSection', page).show();
} else {
$('#resumableSection', page).hide();
}
var view = getResumeView();
var html = '';
if (view == 'PosterCard') {
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: getThumbShape(),
showTitle: true,
showParentTitle: true,
lazy: true,
cardLayout: true,
context: 'tv',
showDetailsMenu: true
});
} else if (view == 'Poster') {
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: getThumbShape(),
showTitle: true,
showParentTitle: true,
overlayText: screenWidth >= 800 && !AppInfo.hasLowImageBandwidth,
lazy: true,
context: 'tv',
showDetailsMenu: true
});
}
var elem = page.querySelector('#resumableItems');
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
});
}
$(document).on('pagebeforeshowready', "#homeNextUpPage", function () {
var page = this;
if (enableScrollX()) {
page.querySelector('#resumableItems').classList.add('hiddenScrollX');
} else {
page.querySelector('#resumableItems').classList.remove('hiddenScrollX');
}
reload(page);
});
})(jQuery, document);

View file

@ -0,0 +1,65 @@
(function ($, document) {
$(document).on('pagebeforeshowready', "#homeUpcomingPage", function () {
Dashboard.showLoadingMsg();
var page = this;
var limit = AppInfo.hasLowImageBandwidth ?
24 :
40;
var query = {
Limit: limit,
Fields: "AirTime,UserData,SeriesStudio,SyncInfo",
UserId: Dashboard.getCurrentUserId(),
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
};
query.ParentId = LibraryMenu.getTopParentId();
var context = '';
if (query.ParentId) {
context = 'tv';
}
ApiClient.getJSON(ApiClient.getUrl("Shows/Upcoming", query)).done(function (result) {
var items = result.Items;
if (items.length) {
page.querySelector('.noItemsMessage').style.display = 'none';
} else {
page.querySelector('.noItemsMessage').style.display = 'block';
}
var elem = page.querySelector('#upcomingItems');
elem.innerHTML = LibraryBrowser.getPosterViewHtml({
items: items,
showLocationTypeIndicator: false,
shape: "backdrop",
showTitle: true,
showPremiereDate: true,
showPremiereDateIndex: true,
preferThumb: true,
context: context || 'home-upcoming',
lazy: true,
showDetailsMenu: true
});
ImageLoader.lazyChildren(elem);
Dashboard.hideLoadingMsg();
});
});
})(jQuery, document);

View file

@ -129,7 +129,7 @@
var elem = $('.itemVideo');
return elem
.one('.loadedmetadata')
.one('.loadedmetadata', onLoadedMetadata)
.one('playing', onOneVideoPlaying)
.on('timeupdate', onTimeUpdate)
.on('ended', onEnded)
@ -220,7 +220,7 @@
}
else {
$(elem).one("loadedmetadata.mediaplayerevent", onLoadedMetadata);
$(elem).one("loadedmetadata", onLoadedMetadata);
}
};
@ -247,7 +247,31 @@
if (elem) {
$(elem).off();
if (elem.tagName == 'AUDIO') {
Events.off(elem, 'timeupdate', onTimeUpdate);
Events.off(elem, 'ended', onEnded);
Events.off(elem, 'volumechange', onVolumeChange);
Events.off(elem, 'playing', onOneAudioPlaying);
Events.off(elem, 'play', onPlay);
Events.off(elem, 'pause', onPause);
Events.off(elem, 'playing', onPlaying);
Events.off(elem, 'error', onError);
} else {
Events.off(elem, 'loadedmetadata', onLoadedMetadata);
Events.off(elem, 'playing', onOneVideoPlaying);
Events.off(elem, 'timeupdate', onTimeUpdate);
Events.off(elem, 'ended', onEnded);
Events.off(elem, 'volumechange', onVolumeChange);
Events.off(elem, 'play', onPlay);
Events.off(elem, 'pause', onPause);
Events.off(elem, 'playing', onPlaying);
Events.off(elem, 'click', onClick);
Events.off(elem, 'dblclick', onDblClick);
Events.off(elem, 'error', onError);
}
if (elem.tagName.toLowerCase() != 'audio') {
$(elem).remove();

View file

@ -117,6 +117,8 @@
$('.welcomeMessage', page).hide();
} else {
Dashboard.hideLoadingMsg();
var elem = $('.welcomeMessage', page).show();
if (displayPreferences.CustomPrefs[homePageTourKey]) {
@ -178,6 +180,8 @@
if (window.ApiClient) {
var userId = Dashboard.getCurrentUserId();
Dashboard.showLoadingMsg();
getDisplayPreferences('home', userId).done(function (result) {
Dashboard.getCurrentUser().done(function (user) {
@ -187,6 +191,7 @@
if (!AppInfo.isNativeApp) {
showWelcomeIfNeeded(page, result);
}
Dashboard.hideLoadingMsg();
});
});

View file

@ -318,7 +318,7 @@
LibraryBrowser.renderOverview(page.querySelector('.itemOverview'), item);
renderUserDataIcons(page, item);
LibraryBrowser.renderLinks($('#itemLinks', page), item);
LibraryBrowser.renderLinks(page.querySelector('#itemLinks'), item);
LibraryBrowser.renderGenres($('.itemGenres', page), item, context);

View file

@ -129,7 +129,7 @@
function onWebSocketMessage(e, data) {
var msg = data;
var page = $.mobile.activePage;
var page = $($.mobile.activePage)[0];
if (msg.MessageType === "UserDataChanged") {
@ -375,7 +375,7 @@
LibraryBrowser.renderGenres($('.itemGenres', page), item, context);
LibraryBrowser.renderStudios($('.itemStudios', page), item, context);
renderUserDataIcons(page, item);
LibraryBrowser.renderLinks($('.itemExternalLinks', page), item);
LibraryBrowser.renderLinks(page.querySelector('.itemExternalLinks'), item);
$('.criticRatingScore', page).html((item.CriticRating || '0') + '%');
@ -1585,6 +1585,12 @@
});
}
function onItemDeleted(e, itemId) {
if (currentItem && currentItem.Id == itemId) {
Dashboard.navigate('index.html');
}
}
$(document).on('pageinitdepends', "#itemDetailPage", function () {
var page = this;
@ -1637,53 +1643,46 @@
});
}).on('pagebeforeshowready', "#itemDetailPage", function () {
var page = this;
$(page).on("click.moreScenes", ".moreScenes", function () {
$(page).on("click", ".moreScenes", function () {
Dashboard.getCurrentUser().done(function (user) {
renderScenes(page, currentItem, user);
});
}).on("click.morePeople", ".morePeople", function () {
}).on("click", ".morePeople", function () {
renderCast(page, currentItem, getContext(currentItem));
}).on("click.moreSpecials", ".moreSpecials", function () {
}).on("click", ".moreSpecials", function () {
Dashboard.getCurrentUser().done(function (user) {
renderSpecials(page, currentItem, user);
});
}).on("click.moreCriticReviews", ".moreCriticReviews", function () {
}).on("click", ".moreCriticReviews", function () {
renderCriticReviews(page, currentItem);
});
}).on('pagebeforeshowready', "#itemDetailPage", function () {
var page = this;
reload(page);
Events.on(ApiClient, 'websocketmessage', onWebSocketMessage);
Events.on(LibraryBrowser, 'itemdeleting.detailpage', function (e, itemId) {
if (currentItem && currentItem.Id == itemId) {
Dashboard.navigate('index.html');
}
});
Events.on(LibraryBrowser, 'itemdeleting', onItemDeleted);
}).on('pagebeforehide', "#itemDetailPage", function () {
Events.off(LibraryBrowser, 'itemdeleting.detailpage');
Events.off(LibraryBrowser, 'itemdeleting', onItemDeleted);
currentItem = null;
var page = this;
$(page).off("click.moreScenes").off("click.morePeople").off("click.moreSpecials").off("click.moreCriticReviews");
Events.off(ApiClient, 'websocketmessage', onWebSocketMessage);
});

View file

@ -545,7 +545,7 @@
var id = item.Id || item.ItemId;
if (item.CollectionType == 'livetv') {
return 'livetvsuggested.html';
return 'livetvsuggested.html#liveTvSuggestedPage';
}
if (item.CollectionType == 'channels') {
@ -2138,7 +2138,9 @@
html = Globalize.translate('ValueLinks', html);
$(linksElem).html(html).trigger('create');
linksElem.innerHTML = html;
$(linksElem).trigger('create');
$(linksElem).show();
} else {
$(linksElem).hide();
@ -2683,23 +2685,23 @@
removeClass(detailContentEffectedByImage, 'detailContentEffectedByPortraitImage');
elem.classList.add('thumbDetailImageContainer');
elem.classList.add('portraitDetailImageContainer');
elem.classList.add('squareDetailImageContainer');
elem.classList.remove('portraitDetailImageContainer');
elem.classList.remove('squareDetailImageContainer');
}
else if (shape == 'square') {
removeClass(detailContentEffectedByImage, 'detailContentEffectedByThumbImage');
removeClass(detailContentEffectedByImage, 'detailContentEffectedByPortraitImage');
addClass(detailContentEffectedByImage, 'detailContentEffectedBySquareImage');
elem.classList.add('thumbDetailImageContainer');
elem.classList.add('portraitDetailImageContainer');
elem.classList.remove('thumbDetailImageContainer');
elem.classList.remove('portraitDetailImageContainer');
elem.classList.add('squareDetailImageContainer');
} else {
removeClass(detailContentEffectedByImage, 'detailContentEffectedByThumbImage');
removeClass(detailContentEffectedByImage, 'detailContentEffectedBySquareImage');
addClass(detailContentEffectedByImage, 'detailContentEffectedByPortraitImage');
elem.classList.add('thumbDetailImageContainer');
elem.classList.remove('thumbDetailImageContainer');
elem.classList.add('portraitDetailImageContainer');
elem.classList.remove('squareDetailImageContainer');
}

View file

@ -350,9 +350,9 @@
var href = card.getAttribute('data-href') || card.href;
if (!href) {
var link = card.getElementsByTagName('a');
if (link) {
href = link.href;
var links = card.getElementsByTagName('a');
if (links.length) {
href = links[0].href;
}
}
@ -518,7 +518,7 @@
$('.detailsMenu').remove();
var html = '<div data-role="popup" class="detailsMenu" data-transition="slidedown" style="border:0;padding:0;" data-ids="' + ids.join(',') + '" data-context="' + (context || '') + '">';
var html = '<div data-role="popup" class="detailsMenu" style="border:0;padding:0;" data-ids="' + ids.join(',') + '" data-context="' + (context || '') + '">';
html += '<div style="padding:1em 1em;background:rgba(20,20,20,1);margin:0;text-align:center;" class="detailsMenuHeader">';
html += '<button type="button" class="imageButton detailsMenuLeftButton" data-role="none"><i class="fa fa-arrow-left"></i></button>';
@ -850,18 +850,28 @@
preventHover = true;
}
this.off('.cardMenu')
.on('contextmenu.cardMenu', '.card', onCardTapHold)
.off('.latestgroupings')
.on('click.latestgroupings', '.groupedCard', onGroupedCardClick)
.off('.dotmenu')
.on('click.dotmenu', '.listviewMenuButton', onListViewMenuButtonClick);
this.off('contextmenu', '.card', onCardTapHold);
this.on('contextmenu', '.card', onCardTapHold);
this.off('click', '.groupedCard', onGroupedCardClick);
this.on('click', '.groupedCard', onGroupedCardClick);
this.off('click', '.listviewMenuButton', onListViewMenuButtonClick);
this.on('click', '.listviewMenuButton', onListViewMenuButtonClick);
if (!AppInfo.isTouchPreferred) {
this.off('.cardHoverMenu').on('mouseenter.cardHoverMenu', '.card:not(.bannerCard)', onHoverIn).on('mouseleave.cardHoverMenu', '.card:not(.bannerCard)', onHoverOut).on("touchstart.cardHoverMenu", '.card:not(.bannerCard)', preventTouchHover);
this.off('mouseenter', '.card:not(.bannerCard)', onHoverIn);
this.on('mouseenter', '.card:not(.bannerCard)', onHoverIn);
this.off('mouseleave', '.card:not(.bannerCard)', onHoverOut);
this.on('mouseleave', '.card:not(.bannerCard)', onHoverOut);
this.off("touchstart", '.card:not(.bannerCard)', preventTouchHover);
this.on("touchstart", '.card:not(.bannerCard)', preventTouchHover);
}
this.off('.mediaDetails').on('click.mediaDetails', '.mediaItem', onCardClick);
this.off('click', '.mediaItem', onCardClick);
this.on('click', '.mediaItem', onCardClick);
return this;
};
@ -927,6 +937,11 @@
}).get();
}
function onSyncJobListSubmit() {
hideSelections($($.mobile.activePage)[0]);
}
function sync(page) {
var selection = getSelectedItems(page);
@ -945,12 +960,8 @@
items: selection
});
Events.off(SyncManager, 'jobsubmit.librarylist');
Events.on(SyncManager, 'jobsubmit.librarylist', function () {
hideSelections(page);
});
Events.off(SyncManager, 'jobsubmit', onSyncJobListSubmit);
Events.on(SyncManager, 'jobsubmit', onSyncJobListSubmit);
}
function combineVersions(page) {
@ -1214,7 +1225,7 @@
}
function initializeApiClient(apiClient) {
$(apiClient).off('websocketmessage.librarylist', onWebSocketMessage).on('websocketmessage.librarylist', onWebSocketMessage);
$(apiClient).off('websocketmessage', onWebSocketMessage).on('websocketmessage', onWebSocketMessage);
}
Dashboard.ready(function () {

View file

@ -125,11 +125,7 @@
if (AppInfo.isTouchPreferred) {
if ('ontouchend' in document) {
$('.mainDrawerButton').on('touchend click', openMainDrawer);
} else {
$('.mainDrawerButton').on('click', openMainDrawer);
}
$('.mainDrawerButton').on('touchend', openMainDrawer).on('click', openMainDrawer);
} else {
$('.mainDrawerButton').createHoverTouch().on('hovertouch', openMainDrawer);
@ -378,6 +374,13 @@
Events.on(drawer.querySelector('.lnkManageServer'), 'click', onManageServerClicked);
}
function onSidebarLinkClick() {
var section = this.getElementsByClassName('sectionName')[0];
var text = section ? section.innerHTML : this.innerHTML;
document.querySelector('.libraryMenuButtonText').innerHTML = text;
}
function updateLibraryMenu(user) {
if (!user) {
@ -462,14 +465,7 @@
libraryMenuOptions.innerHTML = html;
var elem = libraryMenuOptions;
$('.sidebarLink', elem).off('click.updateText').on('click.updateText', function () {
var section = this.getElementsByClassName('sectionName')[0];
var text = section ? section.innerHTML : this.innerHTML;
document.querySelector('.libraryMenuButtonText').innerHTML = text;
});
$('.sidebarLink', elem).off('click', onSidebarLinkClick).on('click', onSidebarLinkClick);
});
if (user.Policy.IsAdministrator) {
@ -811,7 +807,7 @@
Events.off(page, 'swiperight', onPageSwipeLeft);
if (canGoBack) {
Events.on(page, 'swiperight', onPageSwipeLeft);
//Events.on(page, 'swiperight', onPageSwipeLeft);
}
}
@ -862,9 +858,9 @@
function initializeApiClient(apiClient) {
requiresLibraryMenuRefresh = true;
Events.off(apiClient, 'websocketmessage.librarymenu', onWebSocketMessage);
Events.off(apiClient, 'websocketmessage', onWebSocketMessage);
Events.on(apiClient, 'websocketmessage.librarymenu', onWebSocketMessage);
Events.on(apiClient, 'websocketmessage', onWebSocketMessage);
}
Dashboard.ready(function () {
@ -878,7 +874,13 @@
});
Events.on(ConnectionManager, 'localusersignedin localusersignedout', function () {
Events.on(ConnectionManager, 'localusersignedin', function () {
requiresLibraryMenuRefresh = true;
requiresViewMenuRefresh = true;
requiresDrawerRefresh = true;
});
Events.on(ConnectionManager, 'localusersignedout', function () {
requiresLibraryMenuRefresh = true;
requiresViewMenuRefresh = true;
requiresDrawerRefresh = true;

View file

@ -208,7 +208,7 @@
if (currentPosterItem) {
$(currentPosterItem).off('click.overlay');
$(currentPosterItem).off('click');
currentPosterItem = null;
}
}

View file

@ -126,7 +126,7 @@
ApiClient.createLiveTvSeriesTimer(item).done(function () {
Dashboard.hideLoadingMsg();
Dashboard.navigate('livetvseriestimers.html');
Dashboard.navigate('livetvsuggested.html#liveTvSeriesTimersPage');
});
@ -134,7 +134,7 @@
ApiClient.createLiveTvTimer(item).done(function () {
Dashboard.hideLoadingMsg();
Dashboard.navigate('livetvtimers.html');
Dashboard.navigate('livetvsuggested.html#liveTvTimersPage');
});
}

View file

@ -14,7 +14,7 @@
Dashboard.alert(Globalize.translate('MessageRecordingDeleted'));
Dashboard.navigate('livetvrecordings.html');
Dashboard.navigate('livetvsuggested.html#liveTvRecordingsPage');
});
}

View file

@ -14,7 +14,7 @@
Dashboard.alert(Globalize.translate('MessageRecordingCancelled'));
Dashboard.navigate('livetvtimers.html');
Dashboard.navigate('livetvsuggested.html#liveTvTimersPage');
});
}

View file

@ -39,7 +39,7 @@
function monitorPlayer(player) {
Events.on(player, 'playbackstart.mediacontroller', function (e, state) {
Events.on(player, 'playbackstart', function (e, state) {
var info = {
QueueableMediaTypes: state.NowPlayingItem.MediaType,
@ -53,7 +53,7 @@
});
Events.on(player, 'playbackstop.mediacontroller', function (e, state) {
Events.on(player, 'playbackstop', function (e, state) {
var stopInfo = {
itemId: state.NowPlayingItem.Id,
@ -263,7 +263,7 @@
var keys = new bindKeys(self);
$(window).on("keydown", keys.keyBinding).on("keypress keyup", keys.keyPrevent);
$(window).on("keydown", keys.keyBinding).on("keypress", keys.keyPrevent).on("keyup", keys.keyPrevent);
self.registerPlayer = function (player) {
@ -875,12 +875,14 @@
});
});
function onCastButtonClicked() {
showPlayerSelection();
}
$(document).on('headercreated', function () {
$('.btnCast').off('.mediacontroller').on('click.mediacontroller', function () {
showPlayerSelection();
});
$('.btnCast').off('click', onCastButtonClicked).on('click', onCastButtonClicked);
}).on('pagebeforeshow', ".page", function () {

View file

@ -678,10 +678,9 @@
html += '</div>'; // videoBackdrop
html += '</div>'; // mediaPlayer
$(document.body).append(html);
var mediaPlayerElem = $('#mediaPlayer', document.body);
mediaPlayerElem.trigger('create');
var div = document.createElement('div');
div.innerHTML = html;
document.body.appendChild(div);
}
Dashboard.ready(function () {
@ -858,49 +857,73 @@
return html;
}
function bindEventsForPlayback() {
function onPopState() {
// Stop playback on browser back button nav
self.stop();
return;
}
function onBodyMouseMove() {
idleHandler();
}
function onFullScreenChange() {
if (self.isFullScreen()) {
enterFullScreen();
idleState = true;
} else {
exitFullScreenToWindow();
}
}
function bindEventsForPlayback(mediaRenderer) {
var hideElementsOnIdle = true;
if (hideElementsOnIdle) {
$('.itemVideo').off('mousemove.videoplayer keydown.videoplayer scroll.videoplayer mousedown.videoplayer', idleHandler).on('mousemove.videoplayer keydown.videoplayer scroll.videoplayer mousedown.videoplayer', idleHandler).trigger('mousemove');
var itemVideo = document.querySelector('.itemVideo');
if (itemVideo) {
Events.on(itemVideo, 'mousemove', idleHandler);
Events.on(itemVideo, 'keydown', idleHandler);
Events.on(itemVideo, 'scroll', idleHandler);
Events.on(itemVideo, 'mousedown', idleHandler);
idleHandler();
}
}
$(document).on('webkitfullscreenchange.videoplayer mozfullscreenchange.videoplayer msfullscreenchange.videoplayer fullscreenchange.videoplayer', function (e) {
$(document).on('webkitfullscreenchange', onFullScreenChange);
$(document).on('mozfullscreenchange', onFullScreenChange);
$(document).on('msfullscreenchange', onFullScreenChange);
$(document).on('fullscreenchange', onFullScreenChange);
if (self.isFullScreen()) {
enterFullScreen();
idleState = true;
} else {
exitFullScreenToWindow();
}
});
// Stop playback on browser back button nav
$(window).one("popstate.videoplayer", function () {
self.stop();
return;
});
$(window).one("popstate", onPopState);
if (hideElementsOnIdle) {
$(document.body).on("mousemove.videoplayer", function () {
idleHandler(this);
});
$(document.body).on("mousemove", onBodyMouseMove);
}
}
function unbindEventsForPlayback() {
function unbindEventsForPlayback(mediaRenderer) {
$(document).off('.videoplayer');
$(document).off('webkitfullscreenchange', onFullScreenChange);
$(document).off('mozfullscreenchange', onFullScreenChange);
$(document).off('msfullscreenchange', onFullScreenChange);
$(document).off('fullscreenchange', onFullScreenChange);
// Stop playback on browser back button nav
$(window).off("popstate.videoplayer");
$(window).off("popstate", onPopState);
$(document.body).off("mousemove.videoplayer");
$(document.body).off("mousemove", onBodyMouseMove);
$('.itemVideo').off('mousemove.videoplayer keydown.videoplayer scroll.videoplayer mousedown.videoplayer');
var itemVideo = document.querySelector('.itemVideo');
if (itemVideo) {
Events.off(itemVideo, 'mousemove', idleHandler);
Events.off(itemVideo, 'keydown', idleHandler);
Events.off(itemVideo, 'scroll', idleHandler);
Events.off(itemVideo, 'mousedown', idleHandler);
}
}
self.canAutoPlayVideo = function () {
@ -926,7 +949,7 @@
currentTimeElement.html('--:--');
unbindEventsForPlayback();
unbindEventsForPlayback(mediaRenderer);
};
self.playVideo = function (item, mediaSource, startPosition) {
@ -1087,9 +1110,8 @@
}).one("playing.mediaplayerevent", function () {
// For some reason this is firing at the start, so don't bind until playback has begun
$(this).on("ended.playbackstopped", self.onPlaybackStopped).one('ended.playnext', self.playNextAfterEnded);
$(this).on("ended", self.onPlaybackStopped).one('ended', self.playNextAfterEnded);
self.onPlaybackStart(this, item, mediaSource);
@ -1160,7 +1182,7 @@
}
});
bindEventsForPlayback();
bindEventsForPlayback(mediaRenderer);
mediaPlayerContainer.trigger('create');
@ -1185,7 +1207,7 @@
}
var controls = requiresNativeControls ? '.videoAdvancedControls' : '.videoControls';
controls = document.getElementsByClassName(controls)[0];
controls = document.querySelector(controls);
var previousTrackButton = controls.getElementsByClassName('previousTrackButton')[0];
var nextTrackButton = controls.getElementsByClassName('nextTrackButton')[0];

View file

@ -557,16 +557,16 @@
clearProgressInterval();
Events.off(mediaRenderer, 'ended.playbackstopped');
Events.off(mediaRenderer, 'ended.playnext');
Events.off(mediaRenderer, 'ended', self.onPlaybackStopped);
Events.off(mediaRenderer, 'ended', self.playNextAfterEnded);
$(mediaRenderer).one("play", function () {
self.updateCanClientSeek(this);
Events.on(this, 'ended.playbackstopped', self.onPlaybackStopped);
Events.on(this, 'ended', self.onPlaybackStopped);
$(this).one('ended.playnext', self.playNextAfterEnded);
$(this).one('ended', self.playNextAfterEnded);
self.startProgressInterval();
sendProgressUpdate();
@ -1358,11 +1358,11 @@
mediaRenderer.stop();
Events.off(mediaRenderer, "ended.playnext");
Events.off(mediaRenderer, 'ended', self.playNextAfterEnded);
$(mediaRenderer).one("ended", function() {
Events.off(this);
$(this).off('.mediaplayerevent');
this.cleanup(destroyRenderer);
@ -1568,7 +1568,7 @@
Events.off(mediaRenderer, '.mediaplayerevent');
Events.off(mediaRenderer, 'ended.playbackstopped');
Events.off(mediaRenderer, 'ended', self.onPlaybackStopped);
self.cleanup(mediaRenderer);
@ -1697,9 +1697,9 @@
Logger.log('audio element event: playing');
// For some reason this is firing at the start, so don't bind until playback has begun
Events.on(this, "ended.playbackstopped", self.onPlaybackStopped);
$(this).one('ended.playnext', self.playNextAfterEnded);
Events.on(this, 'ended', self.onPlaybackStopped);
$(this).one('ended', self.playNextAfterEnded);
self.onPlaybackStart(this, item, mediaSource);

View file

@ -449,7 +449,12 @@
if (currentPlayer) {
Events.off(currentPlayer, '.nowplayingbar');
$(currentPlayer).off('playbackstart', onPlaybackStart)
.off('playbackstop', onPlaybackStopped)
.off('volumechange', onVolumeChanged)
.off('playstatechange', onStateChanged)
.off('positionchange', onStateChanged);
currentPlayer.endPlayerUpdates();
currentPlayer = null;
@ -486,11 +491,11 @@
onStateChanged.call(player, { type: 'init' }, state);
});
$(player).on('playbackstart.nowplayingbar', onPlaybackStart)
.on('playbackstop.nowplayingbar', onPlaybackStopped)
.on('volumechange.nowplayingbar', onVolumeChanged)
.on('playstatechange.nowplayingbar', onStateChanged)
.on('positionchange.nowplayingbar', onStateChanged);
$(player).on('playbackstart', onPlaybackStart)
.on('playbackstop', onPlaybackStopped)
.on('volumechange', onVolumeChanged)
.on('playstatechange', onStateChanged)
.on('positionchange', onStateChanged);
}
Dashboard.ready(function () {

View file

@ -565,7 +565,12 @@
if (currentPlayer) {
$(currentPlayer).off('.nowplayingpage');
$(currentPlayer).off('playbackstart', onPlaybackStart)
.off('playbackstop', onPlaybackStopped)
.off('volumechange', onStateChanged)
.off('playstatechange', onStateChanged)
.off('positionchange', onStateChanged);
currentPlayer.endPlayerUpdates();
currentPlayer = null;
}
@ -586,11 +591,11 @@
onStateChanged.call(player, { type: 'init' }, state);
});
$(player).on('playbackstart.nowplayingpage', onPlaybackStart)
.on('playbackstop.nowplayingpage', onPlaybackStopped)
.on('volumechange.nowplayingpage', onStateChanged)
.on('playstatechange.nowplayingpage', onStateChanged)
.on('positionchange.nowplayingpage', onStateChanged);
$(player).on('playbackstart', onPlaybackStart)
.on('playbackstop', onPlaybackStopped)
.on('volumechange', onStateChanged)
.on('playstatechange', onStateChanged)
.on('positionchange', onStateChanged);
var playerInfo = MediaController.getPlayerInfo();
@ -708,6 +713,10 @@
return true;
}
function onPlayerChange() {
bindToPlayer($($.mobile.activePage)[0], MediaController.getCurrentPlayer());
}
$(document).on('pageinitdepends', "#nowPlayingPage", function () {
var page = this;
@ -766,10 +775,7 @@
Dashboard.ready(function () {
$(MediaController).on('playerchange.nowplayingpage', function () {
bindToPlayer(page, MediaController.getCurrentPlayer());
});
$(MediaController).on('playerchange', onPlayerChange);
bindToPlayer(page, MediaController.getCurrentPlayer());
@ -787,7 +793,7 @@
releaseCurrentPlayer();
$(MediaController).off('playerchange.nowplayingpage');
$(MediaController).off('playerchange', onPlayerChange);
lastPlayerState = null;
$(document.body).removeClass('hiddenViewMenuBar').removeClass('hiddenNowPlayingBar');

View file

@ -227,14 +227,19 @@
function hideSearchMenu() {
if ($('.viewMenuSearch').is(':visible')) {
var viewMenuSearch = document.querySelector('.viewMenuSearch');
if (!viewMenuSearch) {
return;
}
if (!viewMenuSearch.classList.contains('hide')) {
require(["jquery", "velocity"], function ($, Velocity) {
$('.btnCloseSearch').hide();
var elem = $('.viewMenuSearch')
.css({ left: '0' })[0];
viewMenuSearch.style.left = '0';
Velocity.animate(elem, { "left": "100%" },
Velocity.animate(viewMenuSearch, { "left": "100%" },
{
complete: function () {
$('.viewMenuSearch').visible(false);

View file

@ -440,7 +440,7 @@
html += '<div>';
html += '<h1 style="display:inline-block; vertical-align:middle;" class="' + cssClass + '">' + Globalize.translate('HeaderLatestTvRecordings') + '</h1>';
html += '<a href="livetvrecordings.html?context=livetv" class="clearLink" style="margin-left:2em;"><paper-button raised class="more mini"><span>' + Globalize.translate('ButtonMore') + '</span></paper-button></a>';
html += '<a href="livetvsuggested.html#liveTvRecordingsPage?context=livetv" class="clearLink" style="margin-left:2em;"><paper-button raised class="more mini"><span>' + Globalize.translate('ButtonMore') + '</span></paper-button></a>';
html += '</div>';
}

View file

@ -33,7 +33,7 @@ var Dashboard = {
//$.mobile.listview.prototype.options.dividerTheme = "b";
//$.mobile.popup.prototype.options.theme = "c";
$.mobile.popup.prototype.options.transition = "pop";
$.mobile.popup.prototype.options.transition = "none";
//$.mobile.keepNative = "textarea";
@ -623,7 +623,7 @@ var Dashboard = {
html += '</paper-dialog>';
$(document.body).append(html);
document.body.classList.add('bodyWithPopupOpen');
// This timeout is obviously messy but it's unclear how to determine when the webcomponent is ready for use
@ -1734,9 +1734,9 @@ var AppInfo = {};
apiClient.getDefaultImageQuality = Dashboard.getDefaultImageQuality;
apiClient.normalizeImageOptions = Dashboard.normalizeImageOptions;
$(apiClient).off('.dashboard')
.on("websocketmessage.dashboard", Dashboard.onWebSocketMessageReceived)
.on('requestfail.dashboard', Dashboard.onRequestFail);
$(apiClient).off("websocketmessage", Dashboard.onWebSocketMessageReceived).off('requestfail', Dashboard.onRequestFail);
$(apiClient).on("websocketmessage", Dashboard.onWebSocketMessageReceived).on('requestfail', Dashboard.onRequestFail);
}
//localStorage.clear();
@ -2014,11 +2014,12 @@ var AppInfo = {};
$(document).on('WebComponentsReady', function () {
var drawer = $('.mainDrawerPanel').removeClass('mainDrawerPanelPreInit')[0];
var drawer = document.querySelector('.mainDrawerPanel');
drawer.classList.remove('mainDrawerPanelPreInit');
drawer.forceNarrow = true;
drawer.drawerWidth = screen.availWidth >= 330 ? "310px" : "270px";
if ($.browser.safari) {
if ($.browser.safari && !AppInfo.isNativeApp) {
drawer.disableEdgeSwipe = true;
}

View file

@ -311,7 +311,7 @@
});
startListening(page);
$(ApiClient).on("websocketmessage.syncactivity", onWebSocketMessage);
$(ApiClient).on("websocketmessage", onWebSocketMessage);
}).on('pagebeforehide', ".syncActivityPage", function () {
@ -323,7 +323,7 @@
});
stopListening();
$(ApiClient).off(".syncactivity");
$(ApiClient).off("websocketmessage", onWebSocketMessage);
});
})();

View file

@ -403,14 +403,14 @@
loadJob(page);
startListening(page);
$(ApiClient).on("websocketmessage.syncJobPage", onWebSocketMessage);
$(ApiClient).on("websocketmessage", onWebSocketMessage);
}).on('pagebeforehide', ".syncJobPage", function () {
var page = this;
stopListening();
$(ApiClient).off(".syncJobPage");
$(ApiClient).off("websocketmessage", onWebSocketMessage);
});
})();

View file

@ -72,13 +72,16 @@ $.fn.taskButton = function (options) {
});
}
function onButtonClick(instance, id) {
function onButtonClick() {
var button = this;
var id = button.getAttribute('data-taskid');
var key = 'scheduledTaskButton' + options.taskKey;
var expectedValue = '4';
if (appStorage.getItem(key) == expectedValue) {
onScheduledTaskMessageConfirmed(instance, id);
onScheduledTaskMessageConfirmed(button, id);
} else {
var msg = Globalize.translate('ConfirmMessageScheduledTaskButton');
@ -91,13 +94,28 @@ $.fn.taskButton = function (options) {
if (result) {
appStorage.setItem(key, expectedValue);
onScheduledTaskMessageConfirmed(instance, id);
onScheduledTaskMessageConfirmed(button, id);
}
});
}
}
function onSocketOpen() {
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1000,1000");
}
}
function onSocketMessage(e, msg) {
if (msg.MessageType == "ScheduledTasksInfo") {
var tasks = msg.Data;
updateTasks(self, tasks);
}
}
var self = this;
if (options.panel) {
@ -106,8 +124,8 @@ $.fn.taskButton = function (options) {
if (options.mode == 'off') {
this.off(".taskbutton");
$(ApiClient).off(".taskbutton");
this.off('click', onButtonClick);
$(ApiClient).off("websocketmessage", onSocketMessage).off('websocketopen', onSocketOpen);
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop");
@ -115,13 +133,7 @@ $.fn.taskButton = function (options) {
} else if (this.length) {
this.on('click.taskbutton', function () {
var button = this;
var id = button.getAttribute('data-taskid');
onButtonClick(self, id);
});
this.on('click', onButtonClick);
pollTasks(self);
@ -129,21 +141,7 @@ $.fn.taskButton = function (options) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1000,1000");
}
$(ApiClient).on("websocketmessage.taskbutton", function (e, msg) {
if (msg.MessageType == "ScheduledTasksInfo") {
var tasks = msg.Data;
updateTasks(self, tasks);
}
}).on('websocketopen.taskbutton', function () {
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1000,1000");
}
});
$(ApiClient).on("websocketmessage", onSocketMessage).on('websocketopen', onSocketOpen);
}
return this;

View file

@ -18,16 +18,12 @@
if (LibraryMenu.getTopParentId()) {
$('.scopedLibraryViewNav', page).show();
$('.globalNav', page).hide();
$('.scopedContent', page).show();
context = 'tv';
loadResume(page);
} else {
$('.scopedLibraryViewNav', page).hide();
$('.globalNav', page).show();
$('.scopedContent', page).hide();
}

View file

@ -2,20 +2,6 @@
$(document).on('pagebeforeshowready', "#tvUpcomingPage", function () {
var page = this;
if (LibraryMenu.getTopParentId()) {
$('.scopedLibraryViewNav', page).show();
$('.globalNav', page).hide();
} else {
$('.scopedLibraryViewNav', page).hide();
$('.globalNav', page).show();
}
}).on('pagebeforeshowready', "#tvUpcomingPage", function () {
Dashboard.showLoadingMsg();
var page = this;

View file

@ -107,6 +107,7 @@ See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for
<g id="keyboard-arrow-right"><path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z" /></g>
<g id="keyboard-arrow-up"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z" /></g>
<g id="queue-music"><path d="M15 6H3v2h12V6zm0 4H3v2h12v-2zM3 16h8v-2H3v2zM17 6v8.18c-.31-.11-.65-.18-1-.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5z" /></g>
<g id="games"><path d="M15 7.5V2H9v5.5l3 3 3-3zM7.5 9H2v6h5.5l3-3-3-3zM9 16.5V22h6v-5.5l-3-3-3 3zM16.5 9l-3 3 3 3H22V9h-5.5z" /></g>
</defs>
</svg>
</iron-iconset-svg>

View file

@ -6,13 +6,7 @@
<body>
<div id="tvRecommendedPage" data-role="page" class="page libraryPage backdropPage" data-backdroptype="series" data-require="scripts/tvrecommended,paperbuttonstyle">
<div class="libraryViewNav globalNav" style="display: none;">
<a href="index.html"><i class="material-icons">home</i>${TabHome}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="favorites.html"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="tvupcoming.html"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
<div class="libraryViewNav scopedLibraryViewNav" style="display: none;">
<div class="libraryViewNav scopedLibraryViewNav">
<a href="tvrecommended.html" class="ui-btn-active"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="tvlatest.html"><i class="material-icons">new_releases</i>${TabLatest}</a>
<a href="tvupcoming.html"><i class="material-icons">schedule</i>${TabUpcoming}</a>

View file

@ -5,13 +5,7 @@
</head>
<body>
<div id="tvUpcomingPage" data-role="page" class="page libraryPage backdropPage" data-backdroptype="series" data-require="scripts/tvupcoming">
<div class="libraryViewNav globalNav" style="display: none;">
<a href="index.html"><i class="material-icons">home</i>${TabHome}</a>
<a href="tvrecommended.html"><i class="material-icons">navigate_next</i>${TabNextUp}</a>
<a href="favorites.html"><i class="material-icons">favorite</i>${TabFavorites}</a>
<a href="#" class="ui-btn-active"><i class="material-icons">schedule</i>${TabUpcoming}</a>
</div>
<div class="libraryViewNav scopedLibraryViewNav" style="display: none;">
<div class="libraryViewNav scopedLibraryViewNav">
<a href="tvrecommended.html"><i class="material-icons">info</i>${TabSuggestions}</a>
<a href="tvlatest.html"><i class="material-icons">new_releases</i>${TabLatest}</a>
<a href="tvupcoming.html" class="ui-btn-active"><i class="material-icons">schedule</i>${TabUpcoming}</a>

View file

@ -248,12 +248,12 @@
function showCommand(result) {
if (result.category == 'tvguide') {
Dashboard.navigate('livetvguide.html');
Dashboard.navigate('livetvsuggested.html#liveTvGuidePage');
return;
}
if (result.category == 'recordings') {
Dashboard.navigate('livetvrecordings.html');
Dashboard.navigate('livetvsuggested.html#liveTvRecordingsPage');
return;
}
}

View file

@ -17113,6 +17113,7 @@ paper-ripple {
<g id="keyboard-arrow-right"><path d="M8.59 16.34l4.58-4.59-4.58-4.59L10 5.75l6 6-6 6z"></path></g>
<g id="keyboard-arrow-up"><path d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z"></path></g>
<g id="queue-music"><path d="M15 6H3v2h12V6zm0 4H3v2h12v-2zM3 16h8v-2H3v2zM17 6v8.18c-.31-.11-.65-.18-1-.18-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3V8h3V6h-5z"></path></g>
<g id="games"><path d="M15 7.5V2H9v5.5l3 3 3-3zM7.5 9H2v6h5.5l3-3-3-3zM9 16.5V22h6v-5.5l-3-3-3 3zM16.5 9l-3 3 3 3H22V9h-5.5z"></path></g>
</defs>
</svg>
</iron-iconset-svg>