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

Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Tim Hobbs 2014-03-13 06:26:20 -07:00
commit c79be9075a
77 changed files with 1575 additions and 1480 deletions

View file

@ -17,6 +17,11 @@
<form class="advancedServerSettingsForm">
<ul data-role="listview" class="ulForm">
<li>
<label for="txtServerName">Friendly server name:</label>
<input id="txtServerName" data-mini="true" />
<div class="fieldDescription">This name will be used to identify this server. If left blank, the computer name will be used.</div>
</li>
<li>
<label for="txtPortNumber">Http server port number: </label>
<input type="number" id="txtPortNumber" name="txtPortNumber" pattern="[0-9]*" required="required" min="1" data-mini="true" />
@ -25,16 +30,16 @@
<label for="txtWebSocketPortNumber">Web socket port number: </label>
<input type="number" id="txtWebSocketPortNumber" name="txtWebSocketPortNumber" pattern="[0-9]*" required="required" min="1" data-mini="true" />
</li>
<li>
<label for="txtDdns">External DDNS:</label>
<input id="txtDdns" data-mini="true" />
<div class="fieldDescription">If you have a dynamic DNS enter it here. Media Browser apps will use it when connecting remotely.</div>
</li>
<li>
<label for="chkEnableUpnp">Enable UPnP</label>
<input type="checkbox" id="chkEnableUpnp" data-mini="true" />
<div class="fieldDescription">UPnP allows automated router configuration for remote access. This may not work with some router models.</div>
</li>
<li>
<label for="txtDdns">External DDNS:</label>
<input id="txtDdns" data-mini="true" />
<div class="fieldDescription">If you have a dynamic DNS enter it here. Media Browser apps will use it when connecting remotely.</div>
</li>
</ul>
<ul data-role="listview" class="ulForm">
<li>

View file

@ -143,6 +143,14 @@
</div>
<br />
<ul data-role="listview" class="ulForm">
<li>
<label for="copyOrMoveFile">Transfer Method</label>
<select id="copyOrMoveFile" data-mini="true">
<option value="true">Copy</option>
<option value="false">Move</option>
</select>
<div class="fieldDescription">Copy or move files from the watch folder</div>
</li>
<li>
<input type="checkbox" id="chkOverwriteExistingEpisodes" name="chkOverwriteExistingEpisodes" />
<label for="chkOverwriteExistingEpisodes">Overwrite existing episodes</label>
@ -153,7 +161,7 @@
<div class="fieldDescription">Separate with ;. For example: .nfo;.txt</div>
</li>
<li>
<input type="checkbox" id="chkDeleteEmptyFolders" name="chkDeleteEmptyFolders" />
<input type="checkbox" id="chkDeleteEmptyFolders" name="chkDeleteEmptyFolders" data-mini="true" />
<label for="chkDeleteEmptyFolders">Delete empty folders after organizing</label>
<div class="fieldDescription">Enable this to keep the download directory clean.</div>
</li>

View file

@ -4,17 +4,7 @@
<title>Media Browser</title>
</head>
<body>
<div id="boxsetsPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html" class="ui-btn-active">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>
<a href="moviestudios.html">Studios</a>
</div>
<div id="boxsetsPage" data-role="page" class="page libraryPage" data-theme="b" data-view="boxsets">
<div class="alphabetPicker">
</div>
@ -26,17 +16,41 @@
</div>
<div class="listTopPaging">
</div>
<button id="btnNewCollection" data-mini="true" data-icon="plus" data-inline="true" class="hide">New</button>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="newCollectionPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form class="newCollectionForm">
<h3>New Collection</h3>
<br />
<div>
<label for="txtNewCollectionName">Name:</label>
<input type="text" id="txtNewCollectionName" required="required" />
<div class="fieldDescription">Example: Star Wars Collection</div>
</div>
<br />
<div>
<label for="chkEnableInternetMetadata">Search the internet for artwork and metadata</label>
<input type="checkbox" id="chkEnableInternetMetadata" data-mini="true" />
</div>
<br />
<p>
<button id="btnSubmitNewCollection" type="submit" data-icon="plus" data-mini="true" data-theme="b">Create</button>
</p>
</form>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<div id="sortpanel">
<fieldset data-role="controlgroup">
<legend>
<h3>Sort By:</h3>
<legend>Sort By:
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
@ -50,8 +64,7 @@
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<h3>Sort Order:</h3>
<legend>Sort Order:
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
@ -66,8 +79,7 @@
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<h3>Filters:</h3>
<legend>Filters:
</legend>
<input class="chkStandardFilter" type="checkbox" name="chkIsFavorite" id="chkIsFavorite" data-filter="IsFavorite" data-mini="true">
<label for="chkIsFavorite">Favorite</label>
@ -80,8 +92,7 @@
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Features:</strong>
<legend>Features:
</legend>
<input class="chkFeatureFilter" type="checkbox" name="chkTrailer" id="chkTrailer" data-mini="true">
@ -97,6 +108,10 @@
</form>
</div>
<script type="text/javascript">
$('.newCollectionForm').off('submit', BoxSetsPage.onNewCollectionSubmit).on('submit', BoxSetsPage.onNewCollectionSubmit);
</script>
</div>
</body>
</html>

View file

@ -7,12 +7,16 @@
padding-top: 48px !important;
}
.libraryPage:not(.metadataEditorPage):not(#indexPage):not(#boxsetsPage) {
padding-top: 91px !important;
}
.ui-panel fieldset + fieldset {
margin-top: 2em;
}
.headerArrowImage {
height: 24px;
height: 20px;
margin-left: .5em;
}
@ -24,6 +28,8 @@
z-index: 1000;
top: 0;
padding-left: 10px;
background: #181818;
border-bottom: 1px solid #080808;
}
.viewMenuLink {
@ -111,29 +117,65 @@
}
.libraryViewNav {
text-align: center;
background-image: linear-gradient(#404040,#222);
border-bottom: 1px solid #111;
border-top: 1px solid #000;
font-family: sans-serif, Arial;
height: 42px;
overflow: hidden;
border-bottom: 1px solid #333;
position: fixed;
left: 0;
right: 0;
top: 48px;
z-index: 1000;
background-color: #252525;
}
.libraryViewNav .ui-btn-active {
border: 0!important;
background-color: #38c;
.libraryViewNavInner {
text-align: center;
font-family: sans-serif, Arial;
font-size: 14px;
white-space: nowrap;
padding: 0 0 0;
overflow-x: auto;
height: 55px;
text-transform: uppercase;
}
.libraryViewNav .ui-btn-active .libraryViewNavLinkContent {
border-bottom-color: #38c;
}
.libraryViewNav a {
display: inline-block;
padding: 12px 0 0;
color: #eee!important;
text-decoration: none;
margin: 0 0;
position: relative;
font-weight: normal;
}
.libraryViewNav a:hover {
color: #bbb!important;
}
.libraryViewNav a {
display: inline-block;
padding: .6em 1em;
color: #eee!important;
text-decoration: none;
margin: 1px 0;
.libraryViewNav a:after {
content: "|";
color: #444;
font-size: 20px;
font-weight: normal !important;
position: absolute;
top: 7px;
}
.libraryViewNav a:hover {
color: #bbb!important;
}
.libraryViewNav a:last-child::after {
content: "";
}
.libraryViewNavLinkContent {
border-bottom: 6px solid transparent;
display: inline-block;
padding: 0 1em 6px;
margin: 0 -2px 0 -1px;
}
.ehsContent {
max-width: 620px;
@ -609,13 +651,6 @@ a.itemTag:hover {
height: 7px;
}
@media all and (max-width: 550px) {
.desktopViewMenuLink {
display: none;
}
}
@media all and (min-width: 600px) {
.inlineDetailSection:not(.hide) {
display: inline-block;
@ -627,22 +662,26 @@ a.itemTag:hover {
}
}
@media all and (max-width: 750px) {
@media all and (min-width: 800px) {
.libraryViewNav {
display: none !important;
}
.desktopHomeLink {
.libraryMenuButton {
display: none;
}
}
@media all and (min-width: 750px) {
@media all and (max-width: 800px) {
.libraryMenuButton {
.desktopHomeLink {
display: none;
}
.desktopViewMenuLink {
display: none;
}
.libraryViewNavInner {
text-align: left;
}
}
@media all and (max-width: 750px) {
@ -776,6 +815,10 @@ a.itemTag:hover {
max-width: 950px;
}
.detailPageContent {
max-width: 930px;
}
.primaryDetailPageContent {
max-width: 850px;
}
@ -788,9 +831,6 @@ a.itemTag:hover {
}
}
@media all and (min-width: 1920px) {
}
.detailPageParentLink {
text-decoration: none;
}
@ -927,7 +967,7 @@ a.itemTag:hover {
border: 0;
margin: 0;
height: 14px;
border: 1px solid #222;
border: 0 solid #222;
border-radius: 0;
width: 50px;
margin-right: 5px;

View file

@ -329,30 +329,43 @@
}
}
.popupIdentifyForm, .identificationSearchResults {
.popupIdentify form, .identificationSearchResults {
overflow-y: auto;
}
.collectionItemSearchResults {
max-height: 65%;
overflow-y: auto;
}
@media all and (min-height: 500px) {
.popupIdentifyForm, .identificationSearchResults {
.popupIdentify form, .identificationSearchResults {
height: 350px;
}
}
@media all and (min-height: 600px) {
.popupIdentifyForm, .identificationSearchResults {
.popupIdentify form, .identificationSearchResults {
height: 450px;
}
.collectionItemSearchResults {
max-height: 70%;
}
}
@media all and (min-height: 700px) {
.popupIdentifyForm, .identificationSearchResults {
.popupIdentify form, .identificationSearchResults {
height: 550px;
}
.collectionItemSearchResults {
max-height: 75%;
}
}
@media all and (min-height: 800px) {
@ -361,9 +374,13 @@
height: 600px;
}
.popupIdentifyForm, .identificationSearchResults {
.popupIdentify form, .identificationSearchResults {
height: 600px;
}
.collectionItemSearchResults {
max-height: 80%;
}
}
@media all and (min-height: 900px) {
@ -372,7 +389,7 @@
height: 700px;
}
.popupIdentifyForm, .identificationSearchResults {
.popupIdentify form, .identificationSearchResults {
height: 700px;
}
}

View file

@ -1,5 +1,5 @@
.posterItem {
margin: 8px;
margin: 4px 5px;
text-shadow: none;
font-weight: normal!important;
display: inline-block;
@ -35,10 +35,6 @@
padding: 11px 12px 10px;
}
.smallBackdropPosterItem, .smallPosterItem {
margin: 5px;
}
.posterItemImage {
background-size: contain;
background-repeat: no-repeat;
@ -107,7 +103,7 @@
.posterItemTextOverlay .posterItemText {
background-color: transparent;
padding-left: 5px;
padding: 0 5px 5px;
padding: 0 5px 3px;
}
.posterItemTextOverlay .posterItemText:first-child {
@ -136,11 +132,11 @@
}
.squarePosterItem {
width: 142px;
width: 148px;
}
.squarePosterItem .posterItemImage {
height: 142px;
height: 148px;
}
.storeReviewCount {
@ -149,11 +145,11 @@
.backdropPosterItem {
width: 142px;
width: 148px;
}
.backdropPosterItem .posterItemImage {
height: 79.875px;
height: 83.25px;
}
.smallBackdropPosterItem {
@ -165,17 +161,17 @@
}
.portraitPosterItem {
width: 90px;
width: 96px;
}
.portraitPosterItem .posterItemImage {
height: 135px;
height: 144px;
}
.posterItemProgress .itemProgressBar {
height: 10px;
width: 100%;
opacity: .6;
opacity: .7;
}
.miniPosterItemProgress {
@ -188,6 +184,21 @@
opacity: 1;
}
.sessionPosterItem .posterItemText:not(.posterItemName) {
color: #000;
text-align: left;
}
.sessionPosterItem .posterItemName {
color: #fff!important;
}
.sessionPosterItem .posterItemDefaultText {
color: #000!important;
font-weight: normal !important;
top: 42%;
}
@media all and (max-width: 600px) {
.packageReviewText {
@ -198,19 +209,19 @@
@media all and (min-width: 540px) {
.backdropPosterItem {
width: 260px;
width: 266px;
}
.backdropPosterItem .posterItemImage {
height: 146.25px;
height: 149.625px;
}
.smallBackdropPosterItem {
width: 184px;
width: 180px;
}
.smallBackdropPosterItem .posterItemImage {
height: 103.5px;
height: 101.25px;
}
}
@ -218,55 +229,32 @@
.squarePosterItem {
width: 164px;
width: 170px;
}
.squarePosterItem .posterItemImage {
height: 164px;
height: 170px;
}
.portraitPosterItem {
width: 122px;
width: 128px;
}
.portraitPosterItem .posterItemImage {
height: 183px;
height: 192px;
}
}
@media all and (min-width: 650px) {
.backdropPosterItem {
width: 276px;
width: 282px;
}
.backdropPosterItem .posterItemImage {
height: 155.25px;
height: 158.625px;
}
.smallBackdropPosterItem {
width: 196px;
}
.smallBackdropPosterItem .posterItemImage {
height: 110.25px;
}
}
@media all and (min-width: 750px) {
.portraitPosterItem {
width: 112px;
}
.portraitPosterItem .posterItemImage {
height: 168px;
}
}
@media all and (min-width: 1000px) {
.smallBackdropPosterItem {
width: 202px;
}
@ -276,22 +264,37 @@
}
}
@media all and (min-width: 1200px) {
.backdropPosterItem {
width: 276px;
}
.backdropPosterItem .posterItemImage {
height: 155.25px;
}
@media all and (min-width: 750px) {
.portraitPosterItem {
width: 138px;
width: 118px;
}
.portraitPosterItem .posterItemImage {
height: 207px;
height: 177px;
}
}
@media all and (min-width: 1000px) {
.smallBackdropPosterItem {
width: 208px;
}
.smallBackdropPosterItem .posterItemImage {
height: 117px;
}
}
@media all and (min-width: 1200px) {
.portraitPosterItem {
width: 144px;
}
.portraitPosterItem .posterItemImage {
height: 216px;
}
.storeReviewCount {
@ -302,38 +305,30 @@
@media all and (min-width: 1440px) {
.squarePosterItem {
width: 174px;
width: 180px;
}
.squarePosterItem .posterItemImage {
height: 174px;
height: 180px;
}
.backdropPosterItem {
width: 292px;
width: 298px;
}
.backdropPosterItem .posterItemImage {
height: 164.25px;
height: 167.625px;
}
}
@media all and (min-width: 1920px) {
.portraitPosterItem {
width: 160px;
}
.portraitPosterItem .posterItemImage {
height: 240px;
}
.squarePosterItem {
width: 184px;
width: 190px;
}
.squarePosterItem .posterItemImage {
height: 184px;
height: 190px;
}
}
/********************/
@ -389,4 +384,4 @@
background-image: -moz-linear-gradient(top, #ff3333, #992233);
background-image: -ms-linear-gradient(top, #ff3333, #992233);
background-image: -o-linear-gradient(top, #ff3333, #992233);
}
}

View file

@ -330,6 +330,10 @@ h1 .imageLink {
height: 30px;
}
.activeDevicesCollapsible .ui-collapsible-content {
padding: .5em .5em !important;
}
@media all and (min-width: 450px) {
.currentUsername {

View file

@ -8,6 +8,7 @@
<div data-role="content">
<div class="content-primary">
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" class="ui-btn-active">Home</a>
<a href="dashboardinfopage.html" data-role="button">Info</a>
@ -59,11 +60,9 @@
</div>
</div>
<div data-role="collapsible" data-collapsed="false" style="margin-top: 2em;">
<h3>Active Connections</h3>
<div>
<table class="tblConnections" style="border-collapse: collapse;">
</table>
<div class="activeDevicesCollapsible" data-role="collapsible" data-collapsed="false" style="margin-top: 2em;">
<h3>Active Devices</h3>
<div class="connections">
</div>
</div>

View file

@ -0,0 +1,44 @@
<!DOCTYPE html>
<html>
<head>
<title>DLNA</title>
</head>
<body>
<div id="dlnaSettingsPage" data-role="page" class="page type-interior adminPage dlnaPage">
<div data-role="content">
<div class="content-primary">
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" class="ui-btn-active">Settings</a>
</div>
<form class="dlnaSettingsForm">
<ul data-role="listview" class="ulForm">
<li>
<label for="chkEnablePlayTo">Enable DLNA Play To</label>
<input type="checkbox" id="chkEnablePlayTo" data-mini="true" />
<div class="fieldDescription">Media Browser can detect devices within your network and offer the ability to remote control them.</div>
</li>
<li>
<button type="submit" data-theme="b" data-icon="check">
Save
</button>
<button type="button" onclick="Dashboard.navigate('dashboard.html');" data-icon="delete">
Cancel
</button>
</li>
</ul>
</form>
</div>
</div>
<script type="text/javascript">
$('.dlnaSettingsForm').off('submit', DlnaSettingsPage.onSubmit).on('submit', DlnaSettingsPage.onSubmit);
</script>
</div>
</body>
</html>

View file

@ -0,0 +1,78 @@
<!DOCTYPE html>
<html>
<head>
<title>Media Browser</title>
</head>
<body>
<div id="editCollectionTitlesPage" data-role="page" data-theme="b" class="page libraryPage metadataEditorPage">
<div data-role="content editPageContent">
<div class="editPageSidebar">
<div class="libraryTree">
<ul>
</ul>
</div>
</div>
<div class="editPageInnerContent">
<h1 class="itemName editPageName">&nbsp;</h1>
<br />
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" id="btnEditMetadata">Metadata</a>
<a id="btnEditPeople" style="display: none;" href="#" data-role="button">People</a>
<a href="#" data-role="button" class="ui-btn-active">Titles</a>
<a id="btnEditImages" href="#" data-role="button">Images</a>
</div>
<p style="margin-top: -20px;">
Add or remove any movies, series, albums, books or games you wish to group within this collection.
</p>
<div>
<button type="button" id="btnAddItem" data-icon="plus" data-inline="true" data-mini="true">Add</button>
<button type="button" id="btnRemoveItems" data-icon="delete" data-inline="true" data-mini="true" disabled="disabled">Remove</button>
</div>
<br />
<div class="collectionItems"></div>
</div>
</div>
<div data-role="popup" data-transition="slidefade" class="popupIdentify popup" data-theme="a">
<div class="ui-bar-a" style="text-align: center; padding: 0 20px;">
<h3>Add Titles
</h3>
</div>
<div data-role="content">
<form class="collectionItemSearchForm" style="max-width: initial;">
<div>
<label for="txtLookupName">Name:</label>
<div style="display: inline-block; width: 75%;">
<input type="text" id="txtLookupName" data-mini="true" required="required" />
</div>
<button type="submit" data-icon="search" data-mini="true" data-inline="true" data-iconpos="notext">
Search
</button>
</div>
<div class="collectionItemSearchResults" style="min-height:100px;">
</div>
<button id="btnAddItems" type="button" data-icon="plus" data-mini="true">
Add
</button>
</form>
</div>
</div>
<script type="text/javascript">
$('.collectionItemSearchForm').off('submit', EditCollectionItemsPage.onSearchFormSubmit).on('submit', EditCollectionItemsPage.onSearchFormSubmit);
</script>
</div>
</body>
</html>

View file

@ -19,6 +19,7 @@
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" id="btnEditMetadata">Metadata</a>
<a href="#" data-role="button" id="btnEditPeople" style="display: none;">People</a>
<a id="btnEditCollectionTitles" style="display: none;" href="#" data-role="button">Titles</a>
<a href="#" data-role="button" class="ui-btn-active">Images</a>
</div>

View file

@ -18,6 +18,7 @@
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" class="ui-btn-active">Metadata</a>
<a id="btnEditPeople" style="display: none;" href="#" data-role="button">People</a>
<a id="btnEditCollectionTitles" style="display: none;" href="editcollectionitems.html" data-role="button">Titles</a>
<a href="#" data-role="button" id="btnEditImages">Images</a>
</div>
@ -395,7 +396,7 @@
<div data-role="content">
<form class="popupIdentifyForm" style="max-width: initial;">
<p>Enter one or more search criteria.</p>
<div>
@ -414,6 +415,9 @@
<button type="submit" data-theme="b" data-icon="search" data-mini="true">
Search
</button>
<button type="button" data-icon="delete" data-mini="true" onclick="$(this).parents('.popup').popup('close');">
Cancel
</button>
</p>
</form>

View file

@ -18,6 +18,7 @@
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" id="btnEditMetadata">Metadata</a>
<a href="#" data-role="button" class="ui-btn-active">People</a>
<a id="btnEditCollectionTitles" style="display: none;" href="#" data-role="button">Titles</a>
<a href="#" data-role="button" id="btnEditImages">Images</a>
</div>
<div id="divAddPerson" style="display: none;">

View file

@ -15,40 +15,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -15,40 +15,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -7,9 +7,9 @@
<div id="itemByNameDetailPage" data-role="page" class="page libraryPage" data-theme="b">
<div id="movieGenreTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Box Sets</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html" class="ui-btn-active">Genres</a>
<a href="moviepeople.html">People</a>
@ -18,9 +18,9 @@
</div>
<div id="moviePeopleTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Box Sets</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html" class="ui-btn-active">People</a>
@ -29,9 +29,9 @@
</div>
<div id="movieStudioTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Box Sets</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>

View file

@ -7,20 +7,9 @@
<div id="itemDetailPage" data-role="page" class="page libraryPage" data-theme="b">
<div id="movieTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html" class="ui-btn-active">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>
<a href="moviestudios.html">Studios</a>
</div>
</div>
<div id="boxsetTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav">
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html" class="ui-btn-active">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>
@ -29,9 +18,9 @@
</div>
<div id="trailerTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html" class="ui-btn-active">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>
@ -173,8 +162,11 @@
<p class="itemTags"></p>
</div>
</div>
<div class="collectionItems"></div>
<div id="childrenCollapsible" class="hide detailSection">
<div class="detailSectionHeader"><span id="childrenTitle"></span></div>
<div class="detailSectionHeader">
<span id="childrenTitle"></span>
</div>
<div id="childrenContent" class="detailSectionContent"></div>
</div>
<div id="trailersCollapsible" class="detailSection hide">

View file

@ -114,7 +114,7 @@
<label for="chkMissingOverview">Missing Overview</label>
<input class="chkMissingRating" type="checkbox" name="chkMissingRating" id="chkMissingRating" data-mini="true">
<label for="chkMissingRating">Missing Rating</label>
<label for="chkMissingRating">Missing Parental Rating</label>
<input class="chkIsUnidentified" type="checkbox" id="chkIsUnidentified" data-mini="true">
<label for="chkIsUnidentified">Unidentified</label>

View file

@ -23,11 +23,12 @@
<ul data-role="listview" class="ulForm">
<li>
<input type="checkbox" id="chkEnableInternetProviders" name="chkEnableInternetProviders" data-mini="true" />
<label for="chkEnableInternetProviders">Download metadata and images from the internet </label>
<label for="chkEnableInternetProviders">Download artwork and metadata from the internet </label>
<div class="fieldDescription">Media Browser can download information about your media to enable rich presentations.</div>
</li>
<li>
<input type="checkbox" id="chkSaveLocal" name="chkSaveLocal" data-mini="true" />
<label for="chkSaveLocal">Save metadata and images within media folders </label>
<label for="chkSaveLocal">Save artwork and metadata within media folders </label>
<div class="fieldDescription">Save downloaded metadata and images into media folders where they can be stored permanently and easily edited.</div>
</li>
<li>

View file

@ -7,9 +7,9 @@
<div id="movieGenresPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html" class="ui-btn-active">Genres</a>
<a href="moviepeople.html">People</a>
@ -19,46 +19,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioMovieCount" value="on" checked="checked" data-sortby="MovieCount,SortName" data-mini="true">
<label for="radioMovieCount">Movie count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioTrailerCount" value="on" checked="checked" data-sortby="TrailerCount,SortName" data-mini="true">
<label for="radioTrailerCount">Trailer count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -7,9 +7,9 @@
<div id="moviePeoplePage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html" class="ui-btn-active">People</a>
@ -21,46 +21,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioMovieCount" value="on" checked="checked" data-sortby="MovieCount,SortName" data-mini="true">
<label for="radioMovieCount">Movie count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioTrailerCount" value="on" checked="checked" data-sortby="TrailerCount,SortName" data-mini="true">
<label for="radioTrailerCount">Trailer count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -7,9 +7,9 @@
<div id="moviesPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html" class="ui-btn-active">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>

View file

@ -0,0 +1,41 @@
<!DOCTYPE html>
<html>
<head>
<title>Media Browser</title>
</head>
<body>
<div id="moviesLatestPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="#" class="ui-btn-active">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>
<a href="moviestudios.html">Studios</a>
</div>
<div data-role="content">
<table class="ehsContent">
<tr>
<td>
<h1 class="listHeader">Latest Movies</h1>
<div id="recentlyAddedItems">
</div>
<div id="trailerSection" style="display: none;">
<h1 class="listHeader">Latest Trailers</h1>
<div id="trailerItems">
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>

View file

@ -7,9 +7,9 @@
<div id="moviesRecommendedPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="moviesrecommended.html" class="ui-btn-active">Suggested</a>
<a href="movieslatest.html">Latest</a>
<a href="#" class="ui-btn-active">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>
@ -28,16 +28,7 @@
</div>
</div>
<h1 class="listHeader">Latest Movies</h1>
<div id="recentlyAddedItems">
</div>
<div id="trailerSection" style="display: none;">
<h1 class="listHeader">Latest Trailers</h1>
<div id="trailerItems">
</div>
<div class="recommendations">
</div>
</td>
</tr>

View file

@ -7,9 +7,9 @@
<div id="movieStudiosPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>
@ -19,46 +19,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioMovieCount" value="on" checked="checked" data-sortby="MovieCount,SortName" data-mini="true">
<label for="radioMovieCount">Movie count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioTrailerCount" value="on" checked="checked" data-sortby="TrailerCount,SortName" data-mini="true">
<label for="radioTrailerCount">Trailer count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -7,9 +7,9 @@
<div id="movieTrailersPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html" class="ui-btn-active">Trailers</a>
<a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a>

View file

@ -20,49 +20,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioAlbumCount" value="on" checked="checked" data-sortby="AlbumCount,SortName" data-mini="true">
<label for="radioAlbumCount">Album count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioMusicVideoCount" value="on" checked="checked" data-sortby="MusicVideoCount,SortName" data-mini="true">
<label for="radioMusicVideoCount">Music video count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioSongCount" value="on" checked="checked" data-sortby="SongCount,SortName" data-mini="true">
<label for="radioSongCount">Song count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -20,49 +20,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioAlbumCount" value="on" checked="checked" data-sortby="AlbumCount,SortName" data-mini="true">
<label for="radioAlbumCount">Album count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioMusicVideoCount" value="on" checked="checked" data-sortby="MusicVideoCount,SortName" data-mini="true">
<label for="radioMusicVideoCount">Music video count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioSongCount" value="on" checked="checked" data-sortby="SongCount,SortName" data-mini="true">
<label for="radioSongCount">Song count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -17,7 +17,6 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
@ -26,40 +25,6 @@
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioAlbumCount" value="on" checked="checked" data-sortby="AlbumCount,SortName" data-mini="true">
<label for="radioAlbumCount">Album count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioMusicVideoCount" value="on" checked="checked" data-sortby="MusicVideoCount,SortName" data-mini="true">
<label for="radioMusicVideoCount">Music video count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioSongCount" value="on" checked="checked" data-sortby="SongCount,SortName" data-mini="true">
<label for="radioSongCount">Song count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -14,6 +14,7 @@
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
$('#txtDdns', page).val(config.WanDdns || '');
$('#txtServerName', page).val(config.ServerName || '');
$('#chkEnableUpnp', page).checked(config.EnableUPnP).checkboxradio('refresh');
@ -52,6 +53,7 @@
config.EnableUPnP = $('#chkEnableUpnp', form).checked();
config.WanDdns = $('#txtDdns', form).val();
config.ServerName = $('#txtServerName', form).val();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});

View file

@ -71,6 +71,9 @@
$('#txtMultiEpisodePattern', page).val(tvOptions.MultiEpisodeNamePattern).trigger('change');
$('#txtDeleteLeftOverFiles', page).val(tvOptions.LeftOverFileExtensionsToDelete.join(';'));
$('#copyOrMoveFile', page).val(tvOptions.CopyOriginalFile.toString()).selectmenu('refresh');
}
$(document).on('pageinit', "#libraryFileOrganizerPage", function () {
@ -150,6 +153,8 @@
var watchLocation = $('#txtWatchFolder', form).val();
tvOptions.WatchLocations = watchLocation ? [watchLocation] : [];
tvOptions.CopyOriginalFile = $('#copyOrMoveFile', form).val();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});

View file

@ -7,7 +7,7 @@
var page = this;
DashboardPage.newsStartIndex = 0;
Dashboard.showLoadingMsg();
DashboardPage.pollForInfo(page);
DashboardPage.startInterval();
@ -58,7 +58,7 @@
pagingHtml += '<div>';
pagingHtml += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false);
pagingHtml += '</div>';
html = html.join('') + pagingHtml;
var elem = $('.latestNewsItems', page).html(html).trigger('create');
@ -135,9 +135,9 @@
var html = '';
var table = $('.tblConnections', page);
var container = $('.connections', page);
$('.trSession', table).addClass('deadSession');
$('.sessionPosterItem', container).addClass('deadSession');
var deviceId = ApiClient.deviceId();
@ -145,98 +145,181 @@
var connection = dashboardInfo.ActiveConnections[i];
var rowId = 'trSession' + connection.Id;
var itemId = 'session' + connection.Id;
var elem = $('#' + rowId, page);
var elem = $('#' + itemId, page);
if (elem.length) {
DashboardPage.updateSession(elem, connection);
continue;
}
html += '<tr class="trSession" id="' + rowId + '">';
html += '<td class="clientType" style="text-align:center;">';
html += DashboardPage.getClientType(connection);
html += '</td>';
html += '<td>';
html += '<div>';
if (deviceId == connection.DeviceId) {
html += connection.Client;
} else {
html += '<a href="#" onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});">' + connection.Client + '</a>';
}
html += '</div>';
html += '<div>' + connection.ApplicationVersion + '</div>';
html += '<div>' + connection.DeviceName + '</div>';
html += '</td>';
html += '<td class="username">';
html += DashboardPage.getUsersHtml(connection);
html += '</td>';
html += '<div class="sessionPosterItem posterItem squarePosterItem" id="' + itemId + '" style="vertical-align:top;margin-bottom:2em;">';
var nowPlayingItem = connection.NowPlayingItem;
var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem);
html += '<td class="nowPlayingImage">';
html += DashboardPage.getNowPlayingImage(nowPlayingItem);
html += '</td>';
var style = "";
html += '<td class="nowPlayingText">';
html += DashboardPage.getNowPlayingText(connection, nowPlayingItem);
html += '</td>';
if (imageUrl) {
style += 'background-image:url(\'' + imageUrl + '\');';
}
html += '</tr>';
var onclick = connection.DeviceId == deviceId ? '' : ' onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});"';
html += '<a' + onclick + ' data-imageurl="' + imageUrl + '" href="#" class="posterItemImage coveredPosterItemImage" style="' + style + 'background-color:#f2f2f2;display:block;">';
var defaultTextStyle = '';
if (nowPlayingItem) {
defaultTextStyle = "display:none;";
}
html += '<div class="posterItemDefaultText" style="' + defaultTextStyle + '">Nothing currently playing</div>';
html += '<div class="posterItemTextOverlay">';
var itemNameStyle='';
if (!nowPlayingItem) {
itemNameStyle = "display:none;";
}
html += '<div class="posterItemText posterItemName" style="' + itemNameStyle + '">' + (nowPlayingItem ? nowPlayingItem.Name : '') + '</div>';
var progressStyle='';
if (!nowPlayingItem) {
progressStyle = "display:none;";
}
html += "<div class='posterItemText posterItemProgress' style='" + progressStyle + "'>";
html += '<progress class="itemProgressBar" min="0" max="100" value="' + DashboardPage.getPlaybackProgress(connection) + '" style="opacity:.9;"></progress>';
html += "</div>";
html += "</div>";
html += '<img src="' + DashboardPage.getClientImage(connection) + '" style="top:10px;left:10px;height:24px;position:absolute;opacity: .95;" />';
html += '</a>';
html += '<div class="sessionItemText">' + DashboardPage.getSessionItemText(connection) + '</div>';
//html += '<td class="clientType" style="text-align:center;">';
//html += DashboardPage.getClientType(connection);
//html += '</td>';
//html += '<td>';
//html += '<div>';
//if (deviceId == connection.DeviceId) {
// html += connection.Client;
//} else {
// html += '<a href="#" onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});">' + connection.Client + '</a>';
//}
//html += '</div>';
//html += '</td>';
//html += '<td class="nowPlayingImage">';
//html += DashboardPage.getNowPlayingImage(nowPlayingItem);
//html += '</td>';
//html += '<td class="nowPlayingText">';
//html += DashboardPage.getNowPlayingText(connection, nowPlayingItem);
//html += '</td>';
html += '</div>';
}
table.append(html).trigger('create');
container.append(html).trigger('create');
$('.deadSession', table).remove();
$('.deadSession', container).remove();
},
getPlaybackProgress: function (session) {
if (session.NowPlayingItem) {
if (session.NowPlayingItem.RunTimeTicks) {
var pct = (session.NowPlayingPositionTicks || 0) / session.NowPlayingItem.RunTimeTicks;
return pct * 100;
}
}
return 0;
},
getUsersHtml: function (session) {
var html = '';
var html = '<div>';
if (session.UserId) {
html += '<div><a href="useredit.html?userid=' + session.UserId + '">' + session.UserName + '</a><div>';
html += session.UserName;
}
html += session.AdditionalUsers.map(function (currentSession) {
return '<div><a href="useredit.html?userid=' + currentSession.UserId + '">' + currentSession.UserName + '</a><div>';
return ', ' + currentSession.UserName;
});
html += '</div>';
return html;
},
updateSession: function (row, session) {
updateSession: function (elem, session) {
row.removeClass('deadSession');
elem.removeClass('deadSession');
$('.username', row).html(DashboardPage.getUsersHtml(session)).trigger('create');
$('.sessionItemText', elem).html(DashboardPage.getSessionItemText(session));
var nowPlayingItem = session.NowPlayingItem;
$('.nowPlayingText', row).html(DashboardPage.getNowPlayingText(session, nowPlayingItem)).trigger('create');
if (nowPlayingItem) {
$('.posterItemDefaultText', elem).hide();
$('.posterItemProgress', elem).show();
$('.posterItemName', elem).show().html(nowPlayingItem.Name);
var imageRow = $('.nowPlayingImage', row);
$('progress', elem).val(DashboardPage.getPlaybackProgress(session));
} else {
$('.posterItemDefaultText', elem).show();
$('.posterItemProgress', elem).hide();
$('.posterItemName', elem).hide().html('');
}
var image = $('img', imageRow)[0];
var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem);
var nowPlayingItemId = nowPlayingItem ? nowPlayingItem.Id : null;
var nowPlayingItemImageTag = nowPlayingItem ? nowPlayingItem.PrimaryImageTag : null;
var image = $('.posterItemImage', elem)[0];
if (!image || image.getAttribute('data-itemid') != nowPlayingItemId || image.getAttribute('data-tag') != nowPlayingItemImageTag) {
imageRow.html(DashboardPage.getNowPlayingImage(nowPlayingItem));
if (imageUrl && imageUrl != image.getAttribute('data-imageurl')) {
image.style.backgroundImage = 'url(\'' + imageUrl + '\')';
image.setAttribute('data-imageurl', imageUrl);
} else if (!imageUrl && image.getAttribute('data-imageurl')) {
image.style.backgroundImage = null;
image.setAttribute('data-imageurl', '');
}
},
getClientType: function (connection) {
getSessionItemText: function (connection) {
var html = '';
html += '<div class="posterItemText">';
html += DashboardPage.getUsersHtml(connection);
html += '</div>';
//html += '<div class="posterItemText">' + connection.Client + '</div>';
//html += '<div class="posterItemText">' + connection.ApplicationVersion + '</div>';
html += '<div class="posterItemText">' + connection.DeviceName + '</div>';
return html;
},
getClientImage: function (connection) {
var clientLowered = connection.Client.toLowerCase();
@ -262,91 +345,81 @@
imgUrl = 'css/images/clients/html5.png';
}
return "<img src='" + imgUrl + "' alt='Dashboard' />";
return imgUrl;
}
if (clientLowered == "mb-classic") {
return "<img src='css/images/clients/mbc.png' alt='Media Browser Classic' />";
return "css/images/clients/mbc.png";
}
if (clientLowered == "media browser theater") {
return "<img src='css/images/clients/mb.png' alt='Media Browser Theater' />";
return "css/images/clients/mb.png";
}
if (clientLowered == "android") {
return "<img src='css/images/clients/android.png' alt='Android' />";
return "css/images/clients/android.png";
}
if (clientLowered == "roku") {
return "<img src='css/images/clients/roku.jpg' alt='Roku' />";
return "css/images/clients/roku.jpg";
}
if (clientLowered == "ios") {
return "<img src='css/images/clients/ios.png' alt='iOS' />";
return "css/images/clients/ios.png";
}
if (clientLowered == "windows rt") {
return "<img src='css/images/clients/windowsrt.png' alt='Windows RT' />";
return "css/images/clients/windowsrt.png";
}
if (clientLowered == "windows phone") {
return "<img src='css/images/clients/windowsphone.png' alt='Windows Phone' />";
return "css/images/clients/windowsphone.png";
}
if (clientLowered == "dlna") {
return "<img src='css/images/clients/dlna.png' alt='Dlna' />";
return "css/images/clients/dlna.png";
}
if (clientLowered == "mbkinect") {
return "<img src='css/images/clients/mbkinect.png' alt='MB Kinect' />";
return "css/images/clients/mbkinect.png";
}
if (clientLowered == "xbmc") {
return "<img src='css/images/clients/xbmc.png' alt='Xbmc' />";
return "css/images/clients/xbmc.png";
}
return connection.Client;
return "css/images/clients/mb.png";
},
getNowPlayingImage: function (item) {
if (item && item.ThumbItemId) {
return ApiClient.getImageUrl(item.ThumbItemId, {
type: "Thumb",
height: 300,
tag: item.ThumbImageTag
});
}
if (item && item.BackdropItemId) {
return ApiClient.getImageUrl(item.BackdropItemId, {
type: "Backdrop",
height: 300,
tag: item.BackdropImageTag
});
}
if (item && item.PrimaryImageTag) {
var url = ApiClient.getImageUrl(item.Id, {
return ApiClient.getImageUrl(item.Id, {
type: "Primary",
height: 100,
height: 300,
tag: item.PrimaryImageTag
});
url += "&xxx=" + new Date().getTime();
return "<img data-itemid='" + item.Id + "' data-tag='" + item.PrimaryImageTag + "' class='clientNowPlayingImage' src='" + url + "' alt='" + item.Name + "' title='" + item.Name + "' />";
}
return "";
},
getNowPlayingText: function (connection, item) {
var html = "";
if (item) {
html += "<div><a href='itemdetails.html?id=" + item.Id + "'>" + item.Name + "</a></div>";
html += "<div>";
if (item.RunTimeTicks) {
html += Dashboard.getDisplayTime(connection.NowPlayingPositionTicks || 0) + " / ";
html += Dashboard.getDisplayTime(item.RunTimeTicks);
}
html += "</div>";
}
return html;
},
renderRunningTasks: function (dashboardInfo) {
var page = $.mobile.activePage;
@ -422,9 +495,9 @@
DashboardPage.renderPluginUpdateInfo(page, dashboardInfo);
DashboardPage.renderPendingInstallations(page, dashboardInfo.SystemInfo);
},
renderUrls: function (page, systemInfo) {
var url = ApiClient.serverAddress() + "/mediabrowser";
$('#bookmarkUrl', page).html(url).attr("href", url);

View file

@ -0,0 +1,45 @@
(function ($, document, window) {
function loadPage(page, config) {
$('#chkEnablePlayTo', page).checked(config.DlnaOptions.EnablePlayTo).checkboxradio("refresh");
Dashboard.hideLoadingMsg();
}
$(document).on('pageshow', "#dlnaSettingsPage", function () {
Dashboard.showLoadingMsg();
var page = this;
ApiClient.getServerConfiguration().done(function (config) {
loadPage(page, config);
});
});
function onSubmit() {
Dashboard.showLoadingMsg();
var form = this;
ApiClient.getServerConfiguration().done(function (config) {
config.DlnaOptions.EnablePlayTo = $('#chkEnablePlayTo', form).checked();
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
});
// Disable default form submission
return false;
}
window.DlnaSettingsPage = {
onSubmit: onSubmit
};
})(jQuery, document, window);

View file

@ -0,0 +1,306 @@
(function ($, document, window, FileReader, escape) {
var currentItem;
function updateTabs(page, item) {
var query = MetadataEditor.getEditQueryString(item);
$('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query);
$('#btnEditImages', page).attr('href', 'edititemimages.html?' + query);
}
function reload(page) {
Dashboard.showLoadingMsg();
$('#btnRemoveItems', page).buttonEnabled(false);
MetadataEditor.getItemPromise().done(function (item) {
currentItem = item;
LibraryBrowser.renderName(item, $('.itemName', page), true);
updateTabs(page, item);
reloadTitles(page, item);
});
}
function getTitleHtml(item) {
var html = '<div style="display:inline-block;margin:5px;vertical-align:top;">';
html += '<div style="width:120px;height:180px;">';
if (item.ImageTags.Primary) {
var imgUrl = ApiClient.getImageUrl(item.Id, {
type: "Primary",
width: 300,
tag: item.ImageTags.Primary
});
html += '<img src="' + imgUrl + '" style="max-width:120px;max-height:180px;" />';
}
html += '</div>';
html += '<div style="text-align:center;margin-top:4px;max-width:100px;overflow:hidden;height: 32px;">' + item.Name + '</div>';
if (item.ParentId != currentItem.Id) {
html += '<label for="chkRemove' + item.Id + '">Remove</label><input id="chkRemove' + item.Id + '" class="chkRemoveItem" type="checkbox" data-itemid="' + item.Id + '" data-mini="true" />';
}
html += '</div>';
return html;
}
function getSearchResultHtml(item) {
var html = '<div style="display:inline-block;margin:3px;vertical-align:top;">';
html += '<div style="width:100px;height:150px;">';
if (item.PrimaryImageTag) {
var imgUrl = ApiClient.getImageUrl(item.ItemId, {
type: "Primary",
width: 200,
tag: item.PrimaryImageTag
});
html += '<img src="' + imgUrl + '" style="max-width:100px;max-height:150px;" />';
}
html += '</div>';
html += '<div style="text-align:center;margin-top:4px;max-width:100px;overflow:hidden;height: 32px;">' + item.Name + '</div>';
html += '<label for="chkAdd' + item.ItemId + '">Add</label><input id="chkAdd' + item.ItemId + '" class="chkAddItem" type="checkbox" data-itemid="' + item.ItemId + '" data-mini="true" />';
html += '</div>';
return html;
}
function reloadTitles(page, item) {
ApiClient.getItems(Dashboard.getCurrentUserId(), {
ParentId: item.Id
}).done(function (result) {
// Scroll back up so they can see the results from the beginning
$(document).scrollTop(0);
var html = result.Items.map(getTitleHtml).join('');
var elem = $('.collectionItems', page).html(html).trigger('create');
$('.chkRemoveItem', elem).on('change', function () {
if ($('.chkRemoveItem:checked', elem).length) {
$('#btnRemoveItems', page).buttonEnabled(true);
} else {
$('#btnRemoveItems', page).buttonEnabled(false);
}
});
Dashboard.hideLoadingMsg();
});
}
function showSearchResults(page, searchTerm) {
ApiClient.getSearchHints({
userId: Dashboard.getCurrentUserId(),
searchTerm: searchTerm,
limit: 30,
includePeople: false,
includeGenres: false,
includeStudios: false,
includeArtists: false,
IncludeItemTypes: "Movie,Series,Game,MusicAlbum,Book"
}).done(function (result) {
renderSearchResults(page, result.SearchHints);
});
}
function renderSearchResults(page, items) {
var existingIds = $('.chkRemoveItem', page).get().map(function (c) {
return c.getAttribute('data-itemid');
});
var html = items.filter(function (i) {
return existingIds.indexOf(i.ItemId) == -1;
}).map(getSearchResultHtml).join('');
var elem = $('.collectionItemSearchResults', page).html(html).trigger('create');
$('.chkAddItem', elem).on('change', function () {
if ($('.chkAddItem:checked', elem).length) {
$('#btnAddItems', page).buttonEnabled(true);
} else {
$('#btnAddItems', page).buttonEnabled(false);
}
});
}
function addItemsToCollection(page) {
var items = $('.chkAddItem:checked', page).get().map(function (c) {
return c.getAttribute('data-itemid');
});
if (!items.length) {
Dashboard.alert('Please select at least one item.');
return;
}
var url = ApiClient.getUrl("Collections/" + currentItem.Id + "/Items", {
Ids: items.join(',')
});
$.ajax({
type: "POST",
url: url
}).done(function () {
Dashboard.hideLoadingMsg();
$('.popupIdentify', page).popup('close');
reload(page);
});
}
function removeItemsFromCollection(page) {
var items = $('.chkRemoveItem:checked', page).get().map(function (c) {
return c.getAttribute('data-itemid');
});
if (!items.length) {
Dashboard.alert('Please select at least one item.');
return;
}
var url = ApiClient.getUrl("Collections/" + currentItem.Id + "/Items", {
Ids: items.join(',')
});
$.ajax({
type: "DELETE",
url: url
}).done(function () {
Dashboard.hideLoadingMsg();
reload(page);
});
}
$(document).on('pageinit', "#editCollectionTitlesPage", function () {
var page = this;
$('.libraryTree', page).on('itemclicked', function (event, data) {
if (data.itemType == "libraryreport") {
Dashboard.navigate('libraryreport.html');
return;
}
if (data.itemType == "livetvservice") {
return;
}
if (data.id != currentItem.Id) {
MetadataEditor.currentItemId = data.id;
MetadataEditor.currentItemName = data.itemName;
MetadataEditor.currentItemType = data.itemType;
//Dashboard.navigate('edititemmetadata.html?id=' + data.id);
//$.mobile.urlHistory.ignoreNextHashChange = true;
window.location.hash = 'editItemImagesPage?id=' + data.id;
reload(page);
}
});
$('#btnAddItem', page).on('click', function () {
var popup = $('.popupIdentify', page).popup('open');
$('#txtLookupName', popup).val('');
$('.collectionItemSearchResults', popup).empty();
$('#btnAddItems', popup).buttonEnabled(false);
});
$('#btnAddItems', page).on('click', function () {
addItemsToCollection(page);
});
$('#btnRemoveItems', page).on('click', function () {
removeItemsFromCollection(page);
});
}).on('pagebeforeshow', "#editCollectionTitlesPage", function () {
var page = this;
reload(page);
}).on('pagehide', "#editCollectionTitlesPage", function () {
var page = this;
currentItem = null;
});
window.EditCollectionItemsPage = {
onSearchFormSubmit: function () {
var page = $(this).parents('.page');
showSearchResults(page, $('#txtLookupName', page).val());
return false;
}
};
})(jQuery, document, window, window.FileReader, escape);

View file

@ -14,6 +14,7 @@
$('#btnEditPeople', page).attr('href', 'edititempeople.html?' + query);
$('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
}
function getBaseRemoteOptions() {
@ -268,12 +269,18 @@
updateTabs(page, item);
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel") {
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel" || item.Type == "BoxSet") {
$('#btnEditPeople', page).hide();
} else {
$('#btnEditPeople', page).show();
}
if (item.Type == "BoxSet") {
$('#btnEditCollectionTitles', page).show();
} else {
$('#btnEditCollectionTitles', page).hide();
}
ApiClient.getRemoteImageProviders(getBaseRemoteOptions()).done(function (providers) {
if (providers.length) {

View file

@ -16,6 +16,7 @@
$('#btnEditPeople', page).attr('href', 'edititempeople.html?' + query);
$('#btnEditImages', page).attr('href', 'edititemimages.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
}
function reload(page) {
@ -82,12 +83,18 @@
setFieldVisibilities(page, item);
fillItemInfo(page, item);
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel") {
if (item.Type == "Person" || item.Type == "Studio" || item.Type == "MusicGenre" || item.Type == "Genre" || item.Type == "MusicArtist" || item.Type == "GameGenre" || item.Type == "Channel" || item.Type == "BoxSet") {
$('#btnEditPeople', page).hide();
} else {
$('#btnEditPeople', page).show();
}
if (item.Type == "BoxSet") {
$('#btnEditCollectionTitles', page).show();
} else {
$('#btnEditCollectionTitles', page).hide();
}
Dashboard.hideLoadingMsg();
});
}
@ -280,7 +287,17 @@
$('#fldYear', page).show();
}
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "AdultVideo" || item.Type == "Series" || item.Type == "Game" || item.Type == "BoxSet" || item.Type == "Person" || item.Type == "Book") {
if (item.Type == "Movie" ||
item.Type == "Trailer" ||
item.Type == "AdultVideo" ||
item.Type == "Series" ||
item.Type == "Game" ||
item.Type == "BoxSet" ||
item.Type == "Person" ||
item.Type == "Book" ||
item.Type == "MusicAlbum" ||
item.Type == "MusicArtist") {
$('#btnIdentify', page).show();
} else {
$('#btnIdentify', page).hide();

View file

@ -8,6 +8,7 @@
$('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query);
$('#btnEditImages', page).attr('href', 'edititemimages.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
}
function reload(page) {

View file

@ -46,7 +46,7 @@
}
if (!item.BackdropImageTags || !item.BackdropImageTags.length) {
if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel") {
if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel" && item.Type !== "MusicAlbum") {
htmlName += '<img src="css/images/editor/missingbackdrop.png" title="Missing backdrop image." />';
}
}
@ -114,6 +114,13 @@
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) {

View file

@ -7,7 +7,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Episode",
Recursive: true,
Fields: "DateCreated,SeriesInfo,PrimaryImageAspectRatio",
Fields: "SeriesInfo,PrimaryImageAspectRatio",
StartIndex: 0,
IsMissing: false,
IsVirtualUnaired: false

View file

@ -25,9 +25,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -65,36 +62,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#gameGenresPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#gameStudiosPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -174,7 +174,7 @@
var views = [];
if (counts.MovieCount || counts.TrailerCount) {
views.push({ id: "moviesView", name: "Movies", url: "moviesrecommended.html", img: "css/images/items/list/chapter.png", background: "#0094FF" });
views.push({ id: "moviesView", name: "Movies", url: "movieslatest.html", img: "css/images/items/list/chapter.png", background: "#0094FF" });
}
if (counts.EpisodeCount || counts.SeriesCount) {

View file

@ -396,7 +396,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "",
Recursive: true,
Fields: "DateCreated,AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio",
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio",
Limit: LibraryBrowser.getDefaultPageSize(),
StartIndex: 0
};
@ -477,10 +477,11 @@
}
else {
html += LibraryBrowser.getPosterDetailViewHtml({
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
preferBackdrop: shape == "backdrop",
shape: shape
shape: "square",
useAverageAspectRatio: true,
showTitle: true
});
}

View file

@ -31,6 +31,7 @@
if (user.Configuration.IsAdministrator) {
$('#editButtonContainer', page).show();
} else {
$('#editButtonContainer', page).hide();
}
@ -122,7 +123,7 @@
if (item.Type == "Episode" || item.Type == "Series" || item.Type == "Season") {
return "tv";
}
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") {
if (item.Type == "Movie" || item.Type == "Trailer") {
return "movies";
}
if (item.Type == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicVideo") {
@ -131,6 +132,9 @@
if (item.MediaType == "Game") {
return "games";
}
if (item.Type == "BoxSet") {
return "boxsets";
}
return "";
}
@ -162,10 +166,6 @@
$('#gameSystemTabs', page).show();
}
if (item.Type == "BoxSet") {
$('#boxsetTabs', page).show();
}
if (item.Type == "Trailer") {
$('#trailerTabs', page).show();
}
@ -177,8 +177,15 @@
function setInitialCollapsibleState(page, item, context, user) {
$('.collectionItems', page).empty();
if (item.IsFolder) {
$('#childrenCollapsible', page).removeClass('hide');
if (item.Type == "BoxSet") {
$('#childrenCollapsible', page).addClass('hide');
} else {
$('#childrenCollapsible', page).removeClass('hide');
}
renderChildren(page, item, user);
}
else {
@ -346,7 +353,7 @@
ApiClient.getItems(Dashboard.getCurrentUserId(), {
Ids: item.SoundtrackIds.join(","),
ItemFields: "PrimaryImageAspectRatio,ItemCounts,DateCreated,AudioInfo",
ItemFields: "PrimaryImageAspectRatio,ItemCounts,AudioInfo",
SortBy: "SortName"
}).done(function (result) {
@ -425,7 +432,7 @@
var options = {
userId: Dashboard.getCurrentUserId(),
limit: item.Type == "MusicAlbum" ? 4 : 5,
fields: "PrimaryImageAspectRatio,DateCreated,UserData"
fields: "PrimaryImageAspectRatio,UserData"
};
if (item.Type == "Movie") {
@ -527,7 +534,7 @@
function renderChildren(page, item, user) {
var fields = "ItemCounts,DateCreated,AudioInfo,PrimaryImageAspectRatio";
var fields = "ItemCounts,AudioInfo,PrimaryImageAspectRatio";
var query = {
ParentId: item.Id,
@ -570,15 +577,9 @@
} else {
var shape = "smallPoster";
var html = '';
if (item.Type == "Season") {
shape = "smallBackdrop";
}
var html;
if (item.Type == "Series" || item.Type == "BoxSet") {
if (item.Type == "Series") {
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
@ -606,18 +607,21 @@
centerText: true
});
}
else {
html = LibraryBrowser.getPosterDetailViewHtml({
items: result.Items,
useAverageAspectRatio: true,
shape: shape,
showParentName: false,
displayAsSpecial: item.Type == "Season" && item.IndexNumber
});
}
$('#childrenContent', page).html(html).createPosterItemHoverMenu();
if (item.Type == "BoxSet") {
var collectionItemTypes = [
{ name: 'Movies', type: 'Movie' },
{ name: 'Series', type: 'Series' },
{ name: 'Albums', type: 'MusicAlbum' },
{ name: 'Games', type: 'Game' },
{ name: 'Books', type: 'Book' }
];
renderCollectionItems(page, collectionItemTypes, result.Items, user);
}
}
});
@ -627,9 +631,6 @@
else if (item.Type == "Series") {
$('#childrenTitle', page).html('Seasons');
}
else if (item.Type == "BoxSet") {
$('#childrenTitle', page).html('Titles');
}
else if (item.Type == "MusicAlbum") {
$('#childrenTitle', page).html('Tracks');
}
@ -640,6 +641,82 @@
$('#childrenTitle', page).html('Items');
}
}
function renderCollectionItems(page, types, items, user) {
for (var i = 0, length = types.length; i < length; i++) {
var type = types[i];
var typeItems = items.filter(function (curr) {
return curr.Type == type.type;
});
if (!typeItems.length) {
continue;
}
renderCollectionItemType(page, type, typeItems, user);
}
var otherType = { name: 'Other Items' };
var otherTypeItems = items.filter(function (curr) {
return !types.filter(function(t) {
return t.type == curr.Type;
}).length;
});
if (otherTypeItems.length) {
renderCollectionItemType(page, otherType, otherTypeItems, user);
}
if (!items.length) {
renderCollectionItemType(page, {name: 'Titles'}, items, user);
}
$('.collectionItems', page).trigger('create').createPosterItemHoverMenu();
}
function renderCollectionItemType(page, type, items, user) {
var html = '';
html += '<div class="detailSection">';
html += '<div class="detailSectionHeader" style="position: relative;">';
html += '<span>' + type.name + '</span>';
if (user.Configuration.IsAdministrator) {
html += '<a href="editcollectionitems.html?id=' + currentItem.Id + '" data-role="button" data-icon="edit" data-iconpos="notext" data-inline="true" style="position: absolute; right: 0; top: 6px; margin-top: 0; margin-bottom: 0;">Edit</a>';
}
html += '</div>';
html += '<div class="detailSectionContent">';
var shape = type.type == 'MusicAlbum' ? 'square' : 'portrait';
html += LibraryBrowser.getPosterViewHtml({
items: items,
shape: shape,
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
html += '</div>';
html += '</div>';
$('.collectionItems', page).append(html);
}
function renderUserDataIcons(page, item) {
$('.userDataIcons', page).html(LibraryBrowser.getUserDataIconsHtml(item));
}

View file

@ -34,14 +34,23 @@
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
if (view == "Backdrop") {
html += LibraryBrowser.getPosterDetailViewHtml({
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "smallBackdrop",
useAverageAspectRatio: true,
showTitle: true,
centerText: true,
preferBackdrop: true
});
}
else if (view == "Poster") {
html += LibraryBrowser.getPosterDetailViewHtml({
items: result.Items
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
}

View file

@ -71,219 +71,6 @@
return "" + d.getFullYear() + formatDigit(d.getMonth() + 1) + formatDigit(d.getDate()) + formatDigit(d.getHours()) + formatDigit(d.getMinutes()) + formatDigit(d.getSeconds());
},
getPosterDetailViewHtml: function (options) {
var items = options.items;
var currentIndexValue;
if (!options.shape) {
options.shape = options.preferBackdrop ? "backdrop" : "poster";
}
var html = '';
for (var i = 0, length = items.length; i < length; i++) {
var item = items[i];
if (options.timeline) {
var year = item.ProductionYear || "Unknown Year";
if (year != currentIndexValue) {
html += '<h2 class="timelineHeader detailSectionHeader">' + year + '</h2>';
currentIndexValue = year;
}
}
var imgUrl = null;
var isDefault = false;
var height = null;
var cssClass = "tileItem";
if (options.shape) {
cssClass += " " + options.shape + "TileItem";
}
html += '<a class="' + cssClass + '" href="' + LibraryBrowser.getHref(item, options.context) + '">';
if (options.preferBackdrop && item.BackdropImageTags && item.BackdropImageTags.length) {
imgUrl = LibraryBrowser.getImageUrl(item, 'Backdrop', 0, {
height: 198,
width: 352
});
}
else if (options.preferBackdrop && item.ImageTags && item.ImageTags.Thumb) {
imgUrl = ApiClient.getImageUrl(item.Id, {
type: "Thumb",
height: 198,
width: 352,
tag: item.ImageTags.Thumb
});
}
else if (item.ImageTags && item.ImageTags.Primary) {
height = 300;
imgUrl = LibraryBrowser.getImageUrl(item, 'Primary', 0, {
maxheight: height
});
}
else if (item.AlbumId && item.AlbumPrimaryImageTag) {
height = 300;
imgUrl = ApiClient.getImageUrl(item.AlbumId, {
type: "Primary",
height: 100,
tag: item.AlbumPrimaryImageTag
});
}
else if (item.BackdropImageTags && item.BackdropImageTags.length) {
imgUrl = LibraryBrowser.getImageUrl(item, 'Backdrop', 0, {
height: 198,
width: 352
});
}
else if (item.MediaType == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist") {
imgUrl = "css/images/items/list/audio.png";
isDefault = true;
}
else if (item.MediaType == "Video" || item.Type == "Season" || item.Type == "Series") {
imgUrl = "css/images/items/list/video.png";
isDefault = true;
}
else if (item.Type == "Person") {
imgUrl = "css/images/items/list/person.png";
isDefault = true;
}
else if (item.Type == "MusicArtist") {
imgUrl = "css/images/items/list/audiocollection.png";
isDefault = true;
}
else if (item.MediaType == "Game") {
imgUrl = "css/images/items/list/game.png";
isDefault = true;
}
else if (item.Type == "Studio" || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "GameGenre") {
if (options.context == "games") {
imgUrl = "css/images/items/list/game.png";
}
else if (options.context == "music") {
imgUrl = "css/images/items/list/audio.png";
}
else if (options.context == "movies") {
imgUrl = "css/images/items/list/chapter.png";
}
else {
imgUrl = "css/images/items/list/collection.png";
}
isDefault = true;
}
else {
imgUrl = "css/images/items/list/collection.png";
isDefault = true;
}
cssClass = isDefault ? "tileImage defaultTileImage" : "tileImage";
html += '<div class="' + cssClass + '" style="background-image: url(\'' + imgUrl + '\');"></div>';
html += '<div class="tileContent">';
if (options.showParentName !== false) {
if (item.SeriesName || item.Album || item.AlbumArtist) {
var seriesName = item.SeriesName || item.Album || item.AlbumArtist;
html += '<div class="tileName">' + seriesName + '</div>';
}
}
var name = LibraryBrowser.getPosterViewDisplayName(item, options.displayAsSpecial);
html += '<div class="tileName">' + name + '</div>';
if (item.CommunityRating || item.CriticRating) {
html += '<p>' + LibraryBrowser.getRatingHtml(item) + '</p>';
}
var childText = null;
if (item.Type == "BoxSet") {
childText = item.ChildCount == 1 ? "1 Movie" : item.ChildCount + " Movies";
html += '<p class="itemMiscInfo">' + childText + '</p>';
}
else if (item.Type == "GameSystem") {
childText = item.ChildCount == 1 ? "1 Game" : item.ChildCount + " Games";
html += '<p class="itemMiscInfo">' + childText + '</p>';
}
else if (item.Type == "MusicAlbum") {
//childText = item.ChildCount == 1 ? "1 Song" : item.ChildCount + " Songs";
//html += '<p class="itemMiscInfo">' + childText + '</p>';
}
else if (item.Type == "Genre" || item.Type == "Studio" || item.Type == "Person" || item.Type == "MusicArtist" || item.Type == "MusicGenre" || item.Type == "GameGenre") {
var itemCountHtml = LibraryBrowser.getItemCountsHtml(options, item);
if (itemCountHtml) {
html += '<p class="itemMiscInfo">' + itemCountHtml + '</p>';
}
}
else if (item.Type == "Game") {
html += '<p class="itemMiscInfo">' + (item.GameSystem) + '</p>';
}
else if (item.Type == "Episode") {
// Skip it. Just clutter
}
else {
html += '<p class="itemMiscInfo">' + LibraryBrowser.getMiscInfoHtml(item) + '</p>';
}
if (item.Type == "MusicAlbum") {
html += '<p class="itemMiscInfo">' + LibraryBrowser.getMiscInfoHtml(item) + '</p>';
}
html += '<p class="userDataIcons">' + LibraryBrowser.getUserDataIconsHtml(item) + '</p>';
html += '</div>';
if (item.LocationType == "Offline" || item.LocationType == "Virtual") {
html += LibraryBrowser.getOfflineIndicatorHtml(item);
} else {
html += LibraryBrowser.getPlayedIndicatorHtml(item);
}
html += "</a>";
}
return html;
},
getItemCountsHtml: function (options, item) {
var counts = [];

View file

@ -73,7 +73,7 @@
if (counts.MovieCount) {
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'movies' ? selectedCssClass : '') + '" href="moviesrecommended.html">' + (view == 'movies' ? selectedHtml : '') + '<span class="viewName">Movies</span></a>';
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'movies' ? selectedCssClass : '') + '" href="movieslatest.html">' + (view == 'movies' ? selectedHtml : '') + '<span class="viewName">Movies</span></a>';
}
if (counts.SeriesCount) {
@ -92,6 +92,10 @@
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'games' ? selectedCssClass : '') + '" href="gamesrecommended.html">' + (view == 'games' ? selectedHtml : '') + '<span class="viewName">Games</span></a>';
}
if (counts.BoxSetCount) {
html += '<a class="viewMenuLink viewMenuTextLink desktopViewMenuLink' + (view == 'boxsets' ? selectedCssClass : '') + '" href="collections.html">' + (view == 'boxsets' ? selectedHtml : '') + '<span class="viewName">Collections</span></a>';
}
$('.viewMenuRemoteControlButton', page).before(html);
}
@ -122,74 +126,33 @@
html += '<p class="libraryPanelHeader"><a href="index.html" class="imageLink"><img src="css/images/mblogoicon.png" /><span>MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a></p>';
html += '<div data-role="collapsible-set" data-inset="false" data-mini="true">';
html += '<ul data-role="listview">';
if (counts.MovieCount) {
html += getCollapsibleHtml('Movies', [
{ text: 'Suggested', href: 'moviesrecommended.html' },
{ text: 'Movies', href: 'movies.html' },
{ text: 'Collections', href: 'boxsets.html' },
{ text: 'Trailers', href: 'movietrailers.html' },
{ text: 'Genres', href: 'moviegenres.html' },
{ text: 'People', href: 'moviepeople.html' },
{ text: 'Studios', href: 'moviestudios.html' }
]);
html += '<li><a class="libraryPanelLink" href="movieslatest.html">Movies</a></li>';
}
if (counts.SeriesCount) {
html += getCollapsibleHtml('TV', [
{ text: 'Suggested', href: 'tvrecommended.html' },
{ text: 'Latest', href: 'tvlatest.html' },
{ text: 'Upcoming', href: 'tvupcoming.html' },
{ text: 'Shows', href: 'tvshows.html' },
{ text: 'Episodes', href: 'episodes.html' },
{ text: 'Genres', href: 'tvgenres.html' },
{ text: 'People', href: 'tvpeople.html' },
{ text: 'Networks', href: 'tvstudios.html' }
]);
html += '<li><a class="libraryPanelLink" href="tvrecommended.html">TV</a></li>';
}
if (liveTvInfo.EnabledUsers.indexOf(Dashboard.getCurrentUserId()) != -1) {
html += getCollapsibleHtml('Live TV', [
{ text: 'Suggested', href: 'livetvsuggested.html' },
{ text: 'Guide', href: 'livetvguide.html' },
{ text: 'Channels', href: 'livetvchannels.html' },
{ text: 'Recordings', href: 'livetvrecordings.html' },
{ text: 'Scheduled', href: 'livetvtimers.html' },
{ text: 'Series', href: 'livetvseriestimers.html' }
]);
html += '<li><a class="libraryPanelLink" href="livetvsuggested.html">Live TV</a></li>';
}
if (counts.SongCount || counts.MusicVideoCount) {
html += getCollapsibleHtml('Music', [
{ text: 'Suggested', href: 'musicrecommended.html' },
{ text: 'Songs', href: 'songs.html' },
{ text: 'Albums', href: 'musicalbums.html' },
{ text: 'Album Artists', href: 'musicalbumartists.html' },
{ text: 'Artists', href: 'musicartists.html' },
{ text: 'Music Videos', href: 'musicvideos.html' },
{ text: 'Genres', href: 'musicgenres.html' }
]);
html += '<li><a class="libraryPanelLink" href="musicrecommended.html">Music</a></li>';
}
if (counts.GameCount) {
html += getCollapsibleHtml('Games', [
{ text: 'Suggested', href: 'gamesrecommended.html' },
{ text: 'Games', href: 'games.html' },
{ text: 'Game Systems', href: 'gamesystems.html' },
{ text: 'Genres', href: 'gamegenres.html' },
{ text: 'Studios', href: 'gamestudios.html' }
]);
html += '<li><a class="libraryPanelLink" href="gamesrecommended.html">Games</a></li>';
}
html += '</div>';
if (counts.BoxSetCount) {
html += '<li><a class="libraryPanelLink" href="collections.html">Collections</a></li>';
}
html += '</ul>';
html += '</div>';
$(page).append(html);
@ -200,50 +163,23 @@
return panel;
}
function getCollapsibleHtml(title, links) {
var i, length;
var selectedIndex = -1;
var collapsed = 'true';
var currentUrl = window.location.toString().toLowerCase();
for (i = 0, length = links.length; i < length; i++) {
if (currentUrl.indexOf(links[i].href.toLowerCase()) != -1) {
collapsed = 'false';
selectedIndex = i;
break;
}
}
var html = '';
html += '<div data-role="collapsible" data-mini="true" data-collapsed="' + collapsed + '">';
html += '<h4 class="libraryPanelCollapsibleHeader">' + title + '</h4>';
html += '<ul data-role="listview" data-inset="false">';
for (i = 0, length = links.length; i < length; i++) {
var link = links[i];
var href = selectedIndex == i ? '#' : link.href;
html += '<li><a class="libraryPanelLink" href="' + href + '">' + link.text + '</a></li>';
}
html += '</ul>';
html += '</div>';
return html;
}
window.LibraryMenu = {
showLibraryMenu: showLibraryMenu
};
$(document).on('pagebeforeshow', ".libraryPage", function () {
$(document).on('pageinit', ".libraryPage", function () {
var page = this;
$('.libraryViewNav', page).wrapInner('<div class="libraryViewNavInner"></div>');
$('.libraryViewNav a', page).each(function () {
this.innerHTML = '<span class="libraryViewNavLinkContent">' + this.innerHTML + '</span>';
});
}).on('pagebeforeshow', ".libraryPage", function () {
var page = this;

View file

@ -1,9 +1,11 @@
(function ($, document, window) {
var defaultSortBy = "SortName";
// The base query options
var query = {
SortBy: "SeriesSortName,SortName",
SortBy: defaultSortBy,
SortOrder: "Ascending",
Recursive: true,
Fields: "MediaStreams,DateCreated,Settings,Studios",
@ -21,21 +23,22 @@
{
return [
{},
{ name: 'Series' },
{ name: 'Season' },
{ name: 'Date Added' }
{ name: 'Series', sortField: 'SeriesSortName,SortName' },
{ name: 'Season', sortField: 'SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' }
];
}
case 'Series':
{
return [
{},
{ name: 'Name' },
{ name: 'Network' },
{ name: 'Date Added' },
{ name: 'Year' },
{ name: 'Rating' },
{ name: 'Runtime' },
{ name: 'Name', sortField: 'SortName' },
{ name: 'Network', sortField: 'Studio,SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Year', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Trailers' },
{ name: 'Specials' }
];
@ -44,12 +47,13 @@
{
return [
{},
{ name: 'Name' },
{ name: 'Game System' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Players' },
{ name: 'Name', sortField: 'SortName' },
{ name: 'Game System', sortField: 'GameSystem,SortName' },
{ name: 'Date Added', sortField: 'DateCreated,GameSystem,SortName' },
{ name: 'Release Date', sortField: 'ProductionYear,PremiereDate,GameSystem,SortName' },
{ name: 'Parental Rating', sortField: 'OfficialRating,GameSystem,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,GameSystem,SortName' },
{ name: 'Players', sortField: 'Players,GameSystem,SortName' },
{ name: 'Trailers' }
];
}
@ -57,13 +61,14 @@
{
return [
{},
{ name: 'Album Artist' },
{ name: 'Album' },
{ name: 'Album Artist', sortField: 'AlbumArtist,Album,SortName' },
{ name: 'Album', sortField: 'Album,SortName' },
{ name: 'Disc' },
{ name: 'Track' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Runtime' },
{ name: 'Name', sortField: 'Name' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Audio' },
{ name: 'Embedded Image' }
];
@ -72,13 +77,15 @@
{
return [
{},
{ name: 'Series' },
{ name: 'Series', sortField: 'SeriesSortName,SortName' },
{ name: 'Season' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Runtime' },
{ name: 'Name', sortField: 'SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Video' },
{ name: 'Resolution' },
{ name: 'Audio' },
{ name: 'Subtitles' }
];
@ -87,10 +94,11 @@
{
return [
{},
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Name', sortField: 'SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Trailers' }
];
}
@ -99,42 +107,46 @@
return [
{},
{ name: 'Series' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' }
{ name: 'Name', sortField: 'SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' }
];
}
case 'MusicArtist':
{
return [
{},
{ name: 'Name' },
{ name: 'Date Added' }
{ name: 'Name', sortField: 'SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' }
];
}
case 'MusicAlbum':
{
return [
{},
{ name: 'Album Artist' },
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Runtime' }
{ name: 'Album Artist', sortField: 'AlbumArtist,SortName' },
{ name: 'Name', sortField: 'SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' }
];
}
default:
{
return [
{},
{ name: 'Name' },
{ name: 'Date Added' },
{ name: 'Release Date' },
{ name: 'Rating' },
{ name: 'Runtime' },
{ name: 'Name', sortField: 'SortName' },
{ name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Video' },
{ name: 'Resolution' },
{ name: 'Audio' },
{ name: 'Subtitles' },
{ name: 'Trailers' },
@ -144,6 +156,53 @@
}
}
function getDefaultSortOrder(reportType) {
switch (reportType) {
case 'Season':
{
return "SeriesSortName,SortName";
}
case 'Series':
{
return "SortName";
}
case 'Game':
{
return "GameSystem,SortName";
}
case 'Audio':
{
return "AlbumArtist,Album,SortName";
}
case 'Episode':
{
return "SeriesSortName,SortName";
}
case 'BoxSet':
{
return "SortName";
}
case 'Book':
{
return "SortName";
}
case 'MusicArtist':
{
return "SortName";
}
case 'MusicAlbum':
{
return "AlbumArtist,SortName";
}
default:
{
return "SortName";
}
}
}
function getItemCellsHtml(item, headercells) {
return headercells.map(function (cell) {
@ -151,6 +210,8 @@
var html = '';
html += '<td>';
var stream;
switch (cell.type || cell.name) {
case 'Album Artist':
@ -178,6 +239,11 @@
html += item.Studios.length ? item.Studios[0].Name : '&nbsp;';
break;
}
case 'Disc':
{
html += item.ParentIndexNumber == null ? '' : item.ParentIndexNumber;
break;
}
case 'Track':
{
html += item.IndexNumber == null ? '' : item.IndexNumber;
@ -190,7 +256,7 @@
}
case 'Audio':
{
var stream = (item.MediaStreams || []).filter(function (s) {
stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Audio';
@ -205,7 +271,7 @@
}
case 'Video':
{
var stream = (item.MediaStreams || []).filter(function (s) {
stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Video';
@ -216,6 +282,19 @@
}
break;
}
case 'Resolution':
{
stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Video';
})[0];
if (stream && stream.Width) {
html += stream.Width + "*" + (stream.Height || "-");
}
break;
}
case 'Embedded Image':
{
if ((item.MediaStreams || []).filter(function (s) {
@ -265,7 +344,7 @@
}
break;
}
case 'Season':
{
if (item.Type == "Episode") {
@ -281,12 +360,17 @@
html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>';
break;
}
case 'Rating':
case 'Community Rating':
{
html += item.CommunityRating || '&nbsp;';
break;
}
case 'Parental Rating':
{
html += item.OfficialRating || '&nbsp;';
break;
}
case 'Year':
case 'Release Date':
{
@ -357,7 +441,7 @@
}
if (!item.BackdropImageTags || !item.BackdropImageTags.length) {
if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel") {
if (item.Type !== "Episode" && item.Type !== "Season" && item.MediaType !== "Audio" && item.Type !== "Channel" && item.Type !== "MusicAlbum") {
html += '<a href="edititemimages.html?id=' + item.Id + '"><img src="css/images/editor/missingbackdrop.png" title="Missing backdrop image." /></a>';
}
}
@ -378,11 +462,11 @@
}).join('');
}
function getReportHtml(items, reportType) {
function getReportHtml(items, reportType, currentSortField, currentSortDirection) {
var html = '';
html += '<table data-role="table" data-mode="reflow" class="tblLibraryReport detailTable stripedTable ui-responsive table-stroke" style="display: table;">';
html += '<table id="tblReport" data-role="table" data-mode="reflow" class="tblLibraryReport stripedTable ui-responsive table-stroke detailTable" style="display:table;">';
html += '<thead>';
html += '<tr>';
@ -391,7 +475,31 @@
html += cells.map(function (c) {
return '<th>' + (c.name || '&nbsp;') + '</th>';
var cellHtml = '<th data-priority="' + (c.priority || 'persist') + '">';
if (c.sortField) {
cellHtml += '<a class="lnkColumnSort" href="#" data-sortfield="' + c.sortField + '" style="text-decoration:underline;">';
}
cellHtml += (c.name || '&nbsp;');
if (c.sortField) {
cellHtml += '</a>';
if (c.sortField == currentSortField) {
if (currentSortDirection == "Descending") {
cellHtml += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">&darr;</span>';
} else {
cellHtml += '<span style="font-weight:bold;margin-left:5px;vertical-align:top;font-size:12px;">&uarr;</span>';
}
}
}
cellHtml += '</th>';
return cellHtml;
}).join('');
@ -427,7 +535,7 @@
$('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount)).trigger('create');
$('.reportContainer', page).html(getReportHtml(result.Items, reportType)).trigger('create');
$('.reportContainer', page).html(getReportHtml(result.Items, reportType, query.SortBy, query.SortOrder)).trigger('create');
$('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit;
@ -444,6 +552,34 @@
query.StartIndex = 0;
reloadItems(page);
});
$('.lnkColumnSort', page).on('click', function () {
var order = this.getAttribute('data-sortfield');
if (query.SortBy == order) {
if (query.SortOrder == "Descending") {
query.SortOrder = "Ascending";
query.SortBy = defaultSortBy;
} else {
query.SortOrder = "Descending";
query.SortBy = order;
}
} else {
query.SortOrder = "Ascending";
query.SortBy = order;
}
query.StartIndex = 0;
reloadItems(page);
});
}
function reloadItems(page) {
@ -536,6 +672,9 @@
query.StartIndex = 0;
query.IncludeItemTypes = this.value;
query.SortBy = getDefaultSortOrder(this.value);
query.SortOrder = "Ascending";
reloadItems(page);
});
@ -710,6 +849,9 @@
query.StartIndex = 0;
}
query.SortBy = getDefaultSortOrder($('#selectView', page).val());
query.SortOrder = "Ascending";
reloadItems(page);
}).on('pageshow', "#libraryReportPage", function () {

View file

@ -153,14 +153,15 @@
html += '<li><a href="livetvtimer.html?id=' + timer.Id + '">';
var program = timer.ProgramInfo;
var program = timer.ProgramInfo || {};
var imgUrl;
if (program.ImageTags && program.ImageTags.Primary) {
var programImages = program.ImageTags || {};
if (programImages.Primary) {
imgUrl = ApiClient.getImageUrl(program.Id, {
height: 160,
tag: program.ImageTags.Primary,
tag: programImages.Primary,
type: "Primary"
});
} else {
@ -234,9 +235,9 @@
userId: Dashboard.getCurrentUserId(),
seriesTimerId: id
}).done(function (result) {
}).done(function (recordingResult) {
renderRecordings(page, result);
renderRecordings(page, recordingResult);
});
@ -244,9 +245,9 @@
seriesTimerId: id
}).done(function (result) {
}).done(function (timerResult) {
renderSchedule(page, result);
renderSchedule(page, timerResult);
});
}

View file

@ -8,14 +8,14 @@
userId: Dashboard.getCurrentUserId(),
IsAiring: true,
limit: 10
limit: 12
}).done(function (result) {
var html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
shape: "square",
showTitle: true,
showParentTitle: true,
overlayText: true,
@ -31,14 +31,14 @@
userId: Dashboard.getCurrentUserId(),
IsAiring: false,
HasAired: false,
limit: 10
limit: 12
}).done(function (result) {
var html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
shape: "square",
showTitle: true,
showParentTitle: true,
overlayText: true,

View file

@ -7,7 +7,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "BoxSet",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};
@ -26,19 +26,26 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
if (result.TotalRecordCount) {
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
context: 'movies',
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
context: 'movies',
useAverageAspectRatio: true,
showTitle: true,
centerText: true
});
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
} else {
html += '<p>Collections allow you to enjoy personalized groupings of Movies, Series, Albums, Books and Games. Click the New button to start creating Collections.</p>';
}
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu();
@ -60,6 +67,16 @@
LibraryBrowser.saveQueryValues('boxsets', query);
Dashboard.getCurrentUser().done(function(user) {
if (user.Configuration.IsAdministrator) {
$('#btnNewCollection', page).removeClass('hide');
} else {
$('#btnNewCollection', page).addClass('hide');
}
});
Dashboard.hideLoadingMsg();
});
}
@ -95,6 +112,13 @@
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
}
function showNewCollectionPanel(page) {
$('#newCollectionPanel', page).panel('toggle');
$('#txtNewCollectionName', page).val('').focus();
}
$(document).on('pageinit', "#boxsetsPage", function () {
var page = this;
@ -164,6 +188,11 @@
reloadItems(page);
});
$('#btnNewCollection', page).on('click', function () {
showNewCollectionPanel(page);
});
}).on('pagebeforeshow', "#boxsetsPage", function () {
var limit = LibraryBrowser.getDefaultPageSize();
@ -183,4 +212,37 @@
updateFilterControls(this);
});
window.BoxSetsPage = {
onNewCollectionSubmit: function () {
Dashboard.showLoadingMsg();
var page = $(this).parents('.page');
var url = ApiClient.getUrl("Collections", {
Name: $('#txtNewCollectionName', page).val(),
IsLocked: !$('#chkEnableInternetMetadata', page).checked()
});
$.ajax({
type: "POST",
url: url
}).done(function () {
Dashboard.hideLoadingMsg();
$('#newCollectionPanel', page).panel('toggle');
reloadItems(page);
});
return false;
}
};
})(jQuery, document);

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#movieGenresPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -27,9 +27,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
@ -68,19 +65,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkPersonTypeFilter', page).each(function () {
var filters = "," + (query.PersonTypes || "");
@ -97,18 +81,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Movie",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -0,0 +1,60 @@
(function ($, document) {
$(document).on('pagebeforeshow', "#moviesLatestPage", function () {
var screenWidth = $(window).width();
var page = this;
var options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Movie",
Limit: screenWidth >= 1920 ? 32 : (screenWidth >= 1440 ? 24 : (screenWidth >= 800 ? 18 : 12)),
Recursive: true,
Fields: "PrimaryImageAspectRatio",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
$('#recentlyAddedItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
});
options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Trailer",
Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 6),
Recursive: true,
Fields: "PrimaryImageAspectRatio",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
if (result.Items.length) {
$('#trailerSection', page).show();
} else {
$('#trailerSection', page).hide();
}
$('#trailerItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
});
});
})(jQuery, document);

View file

@ -1,5 +1,41 @@
(function ($, document) {
function getRecommendationHtml(recommendation) {
var html = '';
var title = '';
switch (recommendation.RecommendationType) {
case 'SimilarToRecentlyPlayed':
title = 'Because you watched ' + recommendation.BaselineItemName;
break;
case 'SimilarToLikedItem':
title = 'Because you like ' + recommendation.BaselineItemName;
break;
case 'HasDirectorFromRecentlyPlayed':
case 'HasLikedDirector':
title = 'Directed by ' + recommendation.BaselineItemName;
break;
case 'HasActorFromRecentlyPlayed':
case 'HasLikedActor':
title = 'Starring ' + recommendation.BaselineItemName;
break;
}
html += '<h1 class="listHeader">' + title + '</h1>';
html += '<div>';
html += LibraryBrowser.getPosterViewHtml({
items: recommendation.Items,
useAverageAspectRatio: true
});
html += '</div>';
return html;
}
$(document).on('pagebeforeshow', "#moviesRecommendedPage", function () {
var screenWidth = $(window).width();
@ -8,34 +44,13 @@
var options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Movie",
Limit: screenWidth >= 1920 ? 21 : (screenWidth >= 1440 ? 16 : 12),
Recursive: true,
Fields: "PrimaryImageAspectRatio,DateCreated,UserData",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
$('#recentlyAddedItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
});
options = {
SortBy: "DatePlayed",
SortOrder: "Descending",
IncludeItemTypes: "Movie",
Filters: "IsResumable",
Limit: screenWidth >= 1920 ? 4 : (screenWidth >= 1440 ? 4 : 3),
Recursive: true,
Fields: "DateCreated,UserData"
Fields: "PrimaryImageAspectRatio"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
@ -57,33 +72,26 @@
});
options = {
SortBy: "DateCreated",
SortOrder: "Descending",
IncludeItemTypes: "Trailer",
Limit: screenWidth >= 1920 ? 7 : (screenWidth >= 1440 ? 8 : 6),
Recursive: true,
Fields: "PrimaryImageAspectRatio,DateCreated,UserData",
Filters: "IsUnplayed"
};
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
if (result.Items.length) {
$('#trailerSection', page).show();
} else {
$('#trailerSection', page).hide();
}
$('#trailerItems', page).html(LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true
})).createPosterItemHoverMenu();
var url = ApiClient.getUrl("Movies/Recommendations", {
userId: Dashboard.getCurrentUserId(),
categoryLimit: screenWidth >= 1200 ? 6 : 3,
itemLimit: screenWidth >= 1920 ? 8 : (screenWidth >= 1440 ? 8 : 6),
Fields: "PrimaryImageAspectRatio"
});
$.getJSON(url).done(function(recommendations) {
if (!recommendations.length) {
$('.recommendations', page).html('<br/><p>No movie suggestions are currently available. Start watching and rating your movies, and then come back to view your recommendations.</p>');
return;
}
var html = recommendations.map(getRecommendationHtml).join('');
$('.recommendations', page).html(html).createPosterItemHoverMenu();
});
});

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -65,37 +62,12 @@
}
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#movieStudiosPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -7,7 +7,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Trailer",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "square",
@ -66,19 +63,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
}
@ -86,18 +70,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "MusicAlbum",
Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio",
Fields: "PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -25,9 +25,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "square",
@ -65,19 +62,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
}
@ -85,18 +69,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
}
$(document).on('pageinit', "#musicGenresPage", function () {
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -94,7 +94,7 @@
}
html += "</div>";
html += "<div class='posterItemText' style='color:#000;font-weight:400;font-size:16px;'>";
html += "<div class='posterItemText' style='color:#000;font-weight:400;font-size:14px;'>";
var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) {
return ip.Name == plugin.name;
@ -108,7 +108,7 @@
html += "</div>";
html += "<div class='posterItemText packageReviewText' style='color:#000;font-weight:400;font-size:15px;'>";
html += "<div class='posterItemText packageReviewText' style='color:#000;font-weight:400;font-size:14px;'>";
html += plugin.price > 0 ? "$" + plugin.price.toFixed(2) : "Free";
html += Dashboard.getStoreRatingHtml(plugin.avgRating, plugin.id, plugin.name);

View file

@ -721,14 +721,18 @@ var Dashboard = {
name: "Metadata",
href: "metadata.html",
selected: pageElem.id == "metadataConfigurationPage" || pageElem.id == "advancedMetadataConfigurationPage" || pageElem.id == "metadataImagesConfigurationPage"
}, {
name: "Plugins",
href: "plugins.html",
selected: page.hasClass("pluginConfigurationPage")
}, {
name: "Auto-Organize",
href: "autoorganizelog.html",
selected: page.hasClass("organizePage")
}, {
name: "Plugins",
href: "plugins.html",
selected: page.hasClass("pluginConfigurationPage")
name: "DLNA",
href: "dlnasettings.html",
selected: page.hasClass("dlnaPage")
}, {
name: "Live TV",
href: "livetvstatus.html",
@ -1141,9 +1145,7 @@ var Dashboard = {
return;
}
var pageElem = page[0];
if (pageElem.hasPageTitle) {
if ($('.pageTitle', page).length) {
return;
}
@ -1154,8 +1156,6 @@ var Dashboard = {
}
$(parent).prepend("<h2 class='pageTitle'>" + (document.title || "&nbsp;") + "</h2>");
pageElem.hasPageTitle = true;
},
setPageTitle: function (title) {

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Audio",
Recursive: true,
Fields: "DateCreated,AudioInfo,ParentId",
Fields: "AudioInfo,ParentId",
Limit: 200,
StartIndex: 0
};

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true,
@ -69,19 +66,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -96,18 +80,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -27,9 +27,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
@ -68,19 +65,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -106,18 +90,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending",
IncludeItemTypes: "Series",
Recursive: true,
Fields: "SeriesInfo,DateCreated,PrimaryImageAspectRatio",
Fields: "SeriesInfo,PrimaryImageAspectRatio",
StartIndex: 0
};

View file

@ -26,9 +26,6 @@
updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
useAverageAspectRatio: true,
@ -69,19 +66,6 @@
function updateFilterControls(page) {
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
this.checked = (query.SortBy || '').toLowerCase() == this.getAttribute('data-sortby').toLowerCase();
}).checkboxradio('refresh');
$('.radioSortOrder', page).each(function () {
this.checked = (query.SortOrder || '').toLowerCase() == this.getAttribute('data-sortorder').toLowerCase();
}).checkboxradio('refresh');
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -96,18 +80,6 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
query.SortBy = this.getAttribute('data-sortby');
query.StartIndex = 0;
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
query.SortOrder = this.getAttribute('data-sortorder');
query.StartIndex = 0;
reloadItems(page);
});
$('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter');

View file

@ -6,58 +6,29 @@
var query = {
SortBy: "PremiereDate,AirTime,SortName",
SortOrder: "Ascending",
IncludeItemTypes: "Episode",
Limit: 30,
Recursive: true,
Fields: "SeriesInfo,UserData"
Limit: 32,
Fields: "SeriesInfo,UserData",
UserId: Dashboard.getCurrentUserId()
};
var missedItemsQuery = $.extend({
$.getJSON(ApiClient.getUrl("Shows/Upcoming", query)).done(function (result) {
IsUnaired: false
var items = result.Items;
}, query);
var yesterday = new Date();
yesterday.setDate(yesterday.getDate() - 1);
yesterday.setHours(0, 0, 0, 0);
missedItemsQuery.MinPremiereDate = yesterday.toISOString();
var unairedQuery = $.extend({
IsUnaired: true
}, query);
var promise1 = ApiClient.getItems(Dashboard.getCurrentUserId(), missedItemsQuery);
var promise2 = ApiClient.getItems(Dashboard.getCurrentUserId(), unairedQuery);
$.when(promise1, promise2).done(function (response1, response2) {
var missedItems = response1[0].Items;
var unairedItems = response2[0].Items;
for (var i = 0, length = unairedItems.length; i < length; i++) {
missedItems.push(unairedItems[i]);
}
if (!missedItems.length) {
if (!items.length) {
$('#upcomingItems', page).html("<p>Nothing here. Please ensure <a href='metadata.html'>downloading of internet metadata</a> is enabled.</p>").trigger('create');
return;
}
$('#upcomingItems', page).html(LibraryBrowser.getPosterViewHtml({
items: missedItems,
items: items,
showLocationTypeIndicator: false,
shape: "backdrop",
showTitle: true,
showPremiereDate: true,
showPremiereDateIndex: true,
preferThumb: true
})).createPosterItemHoverMenu();
});
});

View file

@ -14,9 +14,10 @@
// After saving chapter task, now save server config
ApiClient.getServerConfiguration().done(function (config) {
config.ImageSavingConvention = $('#selectImageSavingConvention', page).val();
config.EnableMovieChapterImageExtraction = $('#chkMovies', page).checked();
config.EnableUPnP = $('#chkEnableUpnp', page).checked();
ApiClient.updateServerConfiguration(config).done(function (result) {
navigateToNextPage();

View file

@ -11,6 +11,8 @@
config.MetadataCountryCode = $('#selectCountry', page).val();
config.SaveLocalMeta = $('#chkSaveLocalMetadata', page).checked();
config.EnableInternetProviders = $('#chkEnableInternetProviders', page).checked();
ApiClient.updateServerConfiguration(config).done(function (result) {
navigateToNextPage();

View file

@ -18,46 +18,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioSeriesCount" value="on" checked="checked" data-sortby="SeriesCount,SortName" data-mini="true">
<label for="radioSeriesCount">Series count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioEpisodeCount" value="on" checked="checked" data-sortby="EpisodeCount,SortName" data-mini="true">
<label for="radioEpisodeCount">Episode count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -21,46 +21,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioSeriesCount" value="on" checked="checked" data-sortby="SeriesCount,SortName" data-mini="true">
<label for="radioSeriesCount">Series count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioEpisodeCount" value="on" checked="checked" data-sortby="EpisodeCount,SortName" data-mini="true">
<label for="radioEpisodeCount">Episode count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -18,46 +18,13 @@
<div data-role="content">
<div class="viewSettings">
<div class="viewControls">
<button data-mini="true" data-icon="sort" data-inline="true" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div>
</div>
<div id="items" class="itemsContainer"></div>
</div>
<div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort By:</strong>
</legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true">
<label for="radioSortName">Name</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioSeriesCount" value="on" checked="checked" data-sortby="SeriesCount,SortName" data-mini="true">
<label for="radioSeriesCount">Series count</label>
<input class="radioSortBy" type="radio" name="radioSortBy" id="radioEpisodeCount" value="on" checked="checked" data-sortby="EpisodeCount,SortName" data-mini="true">
<label for="radioEpisodeCount">Episode count</label>
</fieldset>
<fieldset data-role="controlgroup">
<legend>
<strong>Sort Order:</strong>
</legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true">
<label for="radioAscending">Ascending</label>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioDescending" value="off" data-sortorder="Descending" data-mini="true">
<label for="radioDescending">Descending</label>
</fieldset>
</form>
</div>
<div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form>
<fieldset data-role="controlgroup">

View file

@ -13,16 +13,7 @@
<img src="css/images/mblogoicon.png" />Configure settings</h2>
<br />
<div style="margin: 1em 0;">
<label for="selectImageSavingConvention"><b>Image saving convention:</b></label>
<select name="selectImageSavingConvention" id="selectImageSavingConvention">
<option value="Compatible" selected="selected">Compatible - MB3/Plex/Xbmc</option>
<option value="Legacy">Standard - MB3/MB2</option>
</select>
<div class="fieldDescription">Media Browser recognizes images from most major media applications. Choosing your downloading convention is useful if you also use other products.</div>
</div>
<div style="margin: 2em 0;">
<div style="margin: 1em 0 2em;">
<label for="chkVideoImages">Enable video image extraction</label>
<input id="chkVideoImages" name="chkVideoImages" type="checkbox" checked="checked" />
<div class="fieldDescription">For videos that don't already have images, and that we're unable to find internet images for. This will add some additional time to the initial library scan but will result in a more pleasing presentation.</div>
@ -34,6 +25,12 @@
<div class="fieldDescription">Extracting chapter images will allow clients to display graphical scene selection menus. The process can be slow, cpu-intensive and may require several gigabytes of space. It runs as a nightly scheduled task at 4am, although this is configurable in the scheduled tasks area. It is not recommended to run this task during peak usage hours.</div>
</div>
<div style="margin: 2em 0;">
<label for="chkEnableUpnp">Enable automatic port mapping</label>
<input type="checkbox" id="chkEnableUpnp" checked="checked" />
<div class="fieldDescription">UPnP allows automated router configuration for easy remote access. This may not work with some router models.</div>
</div>
<div class="wizardNavigation">
<button type="button" data-iconpos="left" data-icon="arrow-l" data-inline="true" onclick="history.back();">Previous</button>
<button id="btnNextPage" type="button" data-iconpos="right" data-icon="arrow-r" data-inline="true">Next</button>

View file

@ -15,7 +15,12 @@
<br />
<div style="margin: 1em 0;">
<label for="chkSaveLocalMetadata">Save metadata into media folders</label>
<input type="checkbox" id="chkEnableInternetProviders" name="chkEnableInternetProviders" checked="checked" />
<label for="chkEnableInternetProviders">Download artwork and metadata from the internet </label>
<div class="fieldDescription">Media Browser can download information about your media to enable rich presentations.</div>
</div>
<div style="margin: 2em 0;">
<label for="chkSaveLocalMetadata">Save artwork and metadata into media folders</label>
<input id="chkSaveLocalMetadata" name="chkSaveLocalMetadata" type="checkbox" checked="checked" />
<div class="fieldDescription">Saving artwork and metadata directly into media folders will put them in a place where they can be easily edited.</div>
</div>