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"> <form class="advancedServerSettingsForm">
<ul data-role="listview" class="ulForm"> <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> <li>
<label for="txtPortNumber">Http server port number: </label> <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" /> <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> <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" /> <input type="number" id="txtWebSocketPortNumber" name="txtWebSocketPortNumber" pattern="[0-9]*" required="required" min="1" data-mini="true" />
</li> </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> <li>
<label for="chkEnableUpnp">Enable UPnP</label> <label for="chkEnableUpnp">Enable UPnP</label>
<input type="checkbox" id="chkEnableUpnp" data-mini="true" /> <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> <div class="fieldDescription">UPnP allows automated router configuration for remote access. This may not work with some router models.</div>
</li> </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>
<ul data-role="listview" class="ulForm"> <ul data-role="listview" class="ulForm">
<li> <li>

View file

@ -143,6 +143,14 @@
</div> </div>
<br /> <br />
<ul data-role="listview" class="ulForm"> <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> <li>
<input type="checkbox" id="chkOverwriteExistingEpisodes" name="chkOverwriteExistingEpisodes" /> <input type="checkbox" id="chkOverwriteExistingEpisodes" name="chkOverwriteExistingEpisodes" />
<label for="chkOverwriteExistingEpisodes">Overwrite existing episodes</label> <label for="chkOverwriteExistingEpisodes">Overwrite existing episodes</label>
@ -153,7 +161,7 @@
<div class="fieldDescription">Separate with ;. For example: .nfo;.txt</div> <div class="fieldDescription">Separate with ;. For example: .nfo;.txt</div>
</li> </li>
<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> <label for="chkDeleteEmptyFolders">Delete empty folders after organizing</label>
<div class="fieldDescription">Enable this to keep the download directory clean.</div> <div class="fieldDescription">Enable this to keep the download directory clean.</div>
</li> </li>

View file

@ -4,17 +4,7 @@
<title>Media Browser</title> <title>Media Browser</title>
</head> </head>
<body> <body>
<div id="boxsetsPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies"> <div id="boxsetsPage" data-role="page" class="page libraryPage" data-theme="b" data-view="boxsets">
<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 class="alphabetPicker"> <div class="alphabetPicker">
</div> </div>
@ -26,17 +16,41 @@
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<button id="btnNewCollection" data-mini="true" data-icon="plus" data-inline="true" class="hide">New</button>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="sortPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<div id="sortpanel"> <div id="sortpanel">
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">
<legend> <legend>Sort By:
<h3>Sort By:</h3>
</legend> </legend>
<input class="radioSortBy defaultSort" type="radio" name="radioSortBy" id="radioSortName" value="on" checked="checked" data-sortby="SortName" data-mini="true"> <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>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">
<legend> <legend>Sort Order:
<h3>Sort Order:</h3>
</legend> </legend>
<input class="radioSortOrder" type="radio" name="radioSortOrder" id="radioAscending" value="on" checked="checked" data-sortorder="Ascending" data-mini="true"> <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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">
<legend> <legend>Filters:
<h3>Filters:</h3>
</legend> </legend>
<input class="chkStandardFilter" type="checkbox" name="chkIsFavorite" id="chkIsFavorite" data-filter="IsFavorite" data-mini="true"> <input class="chkStandardFilter" type="checkbox" name="chkIsFavorite" id="chkIsFavorite" data-filter="IsFavorite" data-mini="true">
<label for="chkIsFavorite">Favorite</label> <label for="chkIsFavorite">Favorite</label>
@ -80,8 +92,7 @@
</fieldset> </fieldset>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">
<legend> <legend>Features:
<strong>Features:</strong>
</legend> </legend>
<input class="chkFeatureFilter" type="checkbox" name="chkTrailer" id="chkTrailer" data-mini="true"> <input class="chkFeatureFilter" type="checkbox" name="chkTrailer" id="chkTrailer" data-mini="true">
@ -97,6 +108,10 @@
</form> </form>
</div> </div>
<script type="text/javascript">
$('.newCollectionForm').off('submit', BoxSetsPage.onNewCollectionSubmit).on('submit', BoxSetsPage.onNewCollectionSubmit);
</script>
</div> </div>
</body> </body>
</html> </html>

View file

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

View file

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

View file

@ -1,5 +1,5 @@
.posterItem { .posterItem {
margin: 8px; margin: 4px 5px;
text-shadow: none; text-shadow: none;
font-weight: normal!important; font-weight: normal!important;
display: inline-block; display: inline-block;
@ -35,10 +35,6 @@
padding: 11px 12px 10px; padding: 11px 12px 10px;
} }
.smallBackdropPosterItem, .smallPosterItem {
margin: 5px;
}
.posterItemImage { .posterItemImage {
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
@ -107,7 +103,7 @@
.posterItemTextOverlay .posterItemText { .posterItemTextOverlay .posterItemText {
background-color: transparent; background-color: transparent;
padding-left: 5px; padding-left: 5px;
padding: 0 5px 5px; padding: 0 5px 3px;
} }
.posterItemTextOverlay .posterItemText:first-child { .posterItemTextOverlay .posterItemText:first-child {
@ -136,11 +132,11 @@
} }
.squarePosterItem { .squarePosterItem {
width: 142px; width: 148px;
} }
.squarePosterItem .posterItemImage { .squarePosterItem .posterItemImage {
height: 142px; height: 148px;
} }
.storeReviewCount { .storeReviewCount {
@ -149,11 +145,11 @@
.backdropPosterItem { .backdropPosterItem {
width: 142px; width: 148px;
} }
.backdropPosterItem .posterItemImage { .backdropPosterItem .posterItemImage {
height: 79.875px; height: 83.25px;
} }
.smallBackdropPosterItem { .smallBackdropPosterItem {
@ -165,17 +161,17 @@
} }
.portraitPosterItem { .portraitPosterItem {
width: 90px; width: 96px;
} }
.portraitPosterItem .posterItemImage { .portraitPosterItem .posterItemImage {
height: 135px; height: 144px;
} }
.posterItemProgress .itemProgressBar { .posterItemProgress .itemProgressBar {
height: 10px; height: 10px;
width: 100%; width: 100%;
opacity: .6; opacity: .7;
} }
.miniPosterItemProgress { .miniPosterItemProgress {
@ -188,6 +184,21 @@
opacity: 1; 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) { @media all and (max-width: 600px) {
.packageReviewText { .packageReviewText {
@ -198,19 +209,19 @@
@media all and (min-width: 540px) { @media all and (min-width: 540px) {
.backdropPosterItem { .backdropPosterItem {
width: 260px; width: 266px;
} }
.backdropPosterItem .posterItemImage { .backdropPosterItem .posterItemImage {
height: 146.25px; height: 149.625px;
} }
.smallBackdropPosterItem { .smallBackdropPosterItem {
width: 184px; width: 180px;
} }
.smallBackdropPosterItem .posterItemImage { .smallBackdropPosterItem .posterItemImage {
height: 103.5px; height: 101.25px;
} }
} }
@ -218,55 +229,32 @@
.squarePosterItem { .squarePosterItem {
width: 164px; width: 170px;
} }
.squarePosterItem .posterItemImage { .squarePosterItem .posterItemImage {
height: 164px; height: 170px;
} }
.portraitPosterItem { .portraitPosterItem {
width: 122px; width: 128px;
} }
.portraitPosterItem .posterItemImage { .portraitPosterItem .posterItemImage {
height: 183px; height: 192px;
} }
} }
@media all and (min-width: 650px) { @media all and (min-width: 650px) {
.backdropPosterItem { .backdropPosterItem {
width: 276px; width: 282px;
} }
.backdropPosterItem .posterItemImage { .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 { .smallBackdropPosterItem {
width: 202px; width: 202px;
} }
@ -276,22 +264,37 @@
} }
} }
@media all and (min-width: 1200px) { @media all and (min-width: 750px) {
.backdropPosterItem {
width: 276px;
}
.backdropPosterItem .posterItemImage {
height: 155.25px;
}
.portraitPosterItem { .portraitPosterItem {
width: 138px; width: 118px;
} }
.portraitPosterItem .posterItemImage { .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 { .storeReviewCount {
@ -302,38 +305,30 @@
@media all and (min-width: 1440px) { @media all and (min-width: 1440px) {
.squarePosterItem { .squarePosterItem {
width: 174px; width: 180px;
} }
.squarePosterItem .posterItemImage { .squarePosterItem .posterItemImage {
height: 174px; height: 180px;
} }
.backdropPosterItem { .backdropPosterItem {
width: 292px; width: 298px;
} }
.backdropPosterItem .posterItemImage { .backdropPosterItem .posterItemImage {
height: 164.25px; height: 167.625px;
} }
} }
@media all and (min-width: 1920px) { @media all and (min-width: 1920px) {
.portraitPosterItem {
width: 160px;
}
.portraitPosterItem .posterItemImage {
height: 240px;
}
.squarePosterItem { .squarePosterItem {
width: 184px; width: 190px;
} }
.squarePosterItem .posterItemImage { .squarePosterItem .posterItemImage {
height: 184px; height: 190px;
} }
} }
/********************/ /********************/

View file

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

View file

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

View file

@ -18,6 +18,7 @@
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true"> <div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
<a href="#" data-role="button" class="ui-btn-active">Metadata</a> <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="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> <a href="#" data-role="button" id="btnEditImages">Images</a>
</div> </div>
@ -414,6 +415,9 @@
<button type="submit" data-theme="b" data-icon="search" data-mini="true"> <button type="submit" data-theme="b" data-icon="search" data-mini="true">
Search Search
</button> </button>
<button type="button" data-icon="delete" data-mini="true" onclick="$(this).parents('.popup').popup('close');">
Cancel
</button>
</p> </p>
</form> </form>

View file

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

View file

@ -15,40 +15,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

@ -15,40 +15,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

@ -7,9 +7,9 @@
<div id="itemByNameDetailPage" data-role="page" class="page libraryPage" data-theme="b"> <div id="itemByNameDetailPage" data-role="page" class="page libraryPage" data-theme="b">
<div id="movieGenreTabs" class="itemTabs" style="display: none;"> <div id="movieGenreTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a> <a href="movies.html">Movies</a>
<a href="boxsets.html">Box Sets</a>
<a href="movietrailers.html">Trailers</a> <a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html" class="ui-btn-active">Genres</a> <a href="moviegenres.html" class="ui-btn-active">Genres</a>
<a href="moviepeople.html">People</a> <a href="moviepeople.html">People</a>
@ -18,9 +18,9 @@
</div> </div>
<div id="moviePeopleTabs" class="itemTabs" style="display: none;"> <div id="moviePeopleTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a> <a href="movies.html">Movies</a>
<a href="boxsets.html">Box Sets</a>
<a href="movietrailers.html">Trailers</a> <a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html" class="ui-btn-active">People</a> <a href="moviepeople.html" class="ui-btn-active">People</a>
@ -29,9 +29,9 @@
</div> </div>
<div id="movieStudioTabs" class="itemTabs" style="display: none;"> <div id="movieStudioTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a> <a href="movies.html">Movies</a>
<a href="boxsets.html">Box Sets</a>
<a href="movietrailers.html">Trailers</a> <a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</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="itemDetailPage" data-role="page" class="page libraryPage" data-theme="b">
<div id="movieTabs" class="itemTabs" style="display: none;"> <div id="movieTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html" class="ui-btn-active">Movies</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="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a> <a href="moviepeople.html">People</a>
@ -29,9 +18,9 @@
</div> </div>
<div id="trailerTabs" class="itemTabs" style="display: none;"> <div id="trailerTabs" class="itemTabs" style="display: none;">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</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="movietrailers.html" class="ui-btn-active">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a> <a href="moviepeople.html">People</a>
@ -173,8 +162,11 @@
<p class="itemTags"></p> <p class="itemTags"></p>
</div> </div>
</div> </div>
<div class="collectionItems"></div>
<div id="childrenCollapsible" class="hide detailSection"> <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 id="childrenContent" class="detailSectionContent"></div>
</div> </div>
<div id="trailersCollapsible" class="detailSection hide"> <div id="trailersCollapsible" class="detailSection hide">

View file

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

View file

@ -23,11 +23,12 @@
<ul data-role="listview" class="ulForm"> <ul data-role="listview" class="ulForm">
<li> <li>
<input type="checkbox" id="chkEnableInternetProviders" name="chkEnableInternetProviders" data-mini="true" /> <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>
<li> <li>
<input type="checkbox" id="chkSaveLocal" name="chkSaveLocal" data-mini="true" /> <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> <div class="fieldDescription">Save downloaded metadata and images into media folders where they can be stored permanently and easily edited.</div>
</li> </li>
<li> <li>

View file

@ -7,9 +7,9 @@
<div id="movieGenresPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies"> <div id="movieGenresPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a> <a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a> <a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html" class="ui-btn-active">Genres</a> <a href="moviegenres.html" class="ui-btn-active">Genres</a>
<a href="moviepeople.html">People</a> <a href="moviepeople.html">People</a>
@ -19,46 +19,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <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 id="moviePeoplePage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a> <a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a> <a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html" class="ui-btn-active">People</a> <a href="moviepeople.html" class="ui-btn-active">People</a>
@ -21,46 +21,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <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 id="moviesPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html" class="ui-btn-active">Movies</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="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</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 id="moviesRecommendedPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav"> <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="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a> <a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a> <a href="moviepeople.html">People</a>
@ -28,16 +28,7 @@
</div> </div>
</div> </div>
<h1 class="listHeader">Latest Movies</h1> <div class="recommendations">
<div id="recentlyAddedItems">
</div>
<div id="trailerSection" style="display: none;">
<h1 class="listHeader">Latest Trailers</h1>
<div id="trailerItems">
</div>
</div> </div>
</td> </td>
</tr> </tr>

View file

@ -7,9 +7,9 @@
<div id="movieStudiosPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies"> <div id="movieStudiosPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</a> <a href="movies.html">Movies</a>
<a href="boxsets.html">Collections</a>
<a href="movietrailers.html">Trailers</a> <a href="movietrailers.html">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a> <a href="moviepeople.html">People</a>
@ -19,46 +19,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <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 id="movieTrailersPage" data-role="page" class="page libraryPage" data-theme="b" data-view="movies">
<div class="libraryViewNav"> <div class="libraryViewNav">
<a href="movieslatest.html">Latest</a>
<a href="moviesrecommended.html">Suggested</a> <a href="moviesrecommended.html">Suggested</a>
<a href="movies.html">Movies</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="movietrailers.html" class="ui-btn-active">Trailers</a>
<a href="moviegenres.html">Genres</a> <a href="moviegenres.html">Genres</a>
<a href="moviepeople.html">People</a> <a href="moviepeople.html">People</a>

View file

@ -20,49 +20,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

@ -20,49 +20,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

@ -17,7 +17,6 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
@ -26,40 +25,6 @@
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

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

View file

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

View file

@ -135,9 +135,9 @@
var html = ''; var html = '';
var table = $('.tblConnections', page); var container = $('.connections', page);
$('.trSession', table).addClass('deadSession'); $('.sessionPosterItem', container).addClass('deadSession');
var deviceId = ApiClient.deviceId(); var deviceId = ApiClient.deviceId();
@ -145,98 +145,181 @@
var connection = dashboardInfo.ActiveConnections[i]; 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) { if (elem.length) {
DashboardPage.updateSession(elem, connection); DashboardPage.updateSession(elem, connection);
continue; continue;
} }
html += '<tr class="trSession" id="' + rowId + '">'; html += '<div class="sessionPosterItem posterItem squarePosterItem" id="' + itemId + '" style="vertical-align:top;margin-bottom:2em;">';
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>';
var nowPlayingItem = connection.NowPlayingItem; var nowPlayingItem = connection.NowPlayingItem;
var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem);
html += '<td class="nowPlayingImage">'; var style = "";
html += DashboardPage.getNowPlayingImage(nowPlayingItem);
html += '</td>';
html += '<td class="nowPlayingText">';
html += DashboardPage.getNowPlayingText(connection, nowPlayingItem);
html += '</td>';
html += '</tr>';
if (imageUrl) {
style += 'background-image:url(\'' + imageUrl + '\');';
} }
table.append(html).trigger('create'); var onclick = connection.DeviceId == deviceId ? '' : ' onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});"';
$('.deadSession', table).remove(); 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>';
}
container.append(html).trigger('create');
$('.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) { getUsersHtml: function (session) {
var html = ''; var html = '<div>';
if (session.UserId) { 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) { 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; 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; 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 image = $('.posterItemImage', elem)[0];
var nowPlayingItemImageTag = nowPlayingItem ? nowPlayingItem.PrimaryImageTag : null;
if (!image || image.getAttribute('data-itemid') != nowPlayingItemId || image.getAttribute('data-tag') != nowPlayingItemImageTag) { if (imageUrl && imageUrl != image.getAttribute('data-imageurl')) {
imageRow.html(DashboardPage.getNowPlayingImage(nowPlayingItem));
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(); var clientLowered = connection.Client.toLowerCase();
@ -262,91 +345,81 @@
imgUrl = 'css/images/clients/html5.png'; imgUrl = 'css/images/clients/html5.png';
} }
return "<img src='" + imgUrl + "' alt='Dashboard' />"; return imgUrl;
} }
if (clientLowered == "mb-classic") { 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") { 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") { if (clientLowered == "android") {
return "<img src='css/images/clients/android.png' alt='Android' />"; return "css/images/clients/android.png";
} }
if (clientLowered == "roku") { if (clientLowered == "roku") {
return "<img src='css/images/clients/roku.jpg' alt='Roku' />"; return "css/images/clients/roku.jpg";
} }
if (clientLowered == "ios") { if (clientLowered == "ios") {
return "<img src='css/images/clients/ios.png' alt='iOS' />"; return "css/images/clients/ios.png";
} }
if (clientLowered == "windows rt") { 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") { if (clientLowered == "windows phone") {
return "<img src='css/images/clients/windowsphone.png' alt='Windows Phone' />"; return "css/images/clients/windowsphone.png";
} }
if (clientLowered == "dlna") { if (clientLowered == "dlna") {
return "<img src='css/images/clients/dlna.png' alt='Dlna' />"; return "css/images/clients/dlna.png";
} }
if (clientLowered == "mbkinect") { if (clientLowered == "mbkinect") {
return "<img src='css/images/clients/mbkinect.png' alt='MB Kinect' />"; return "css/images/clients/mbkinect.png";
} }
if (clientLowered == "xbmc") { 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) { 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) { if (item && item.PrimaryImageTag) {
var url = ApiClient.getImageUrl(item.Id, { return ApiClient.getImageUrl(item.Id, {
type: "Primary", type: "Primary",
height: 100, height: 300,
tag: item.PrimaryImageTag 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 ""; 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) { renderRunningTasks: function (dashboardInfo) {
var page = $.mobile.activePage; var page = $.mobile.activePage;

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); $('#btnEditPeople', page).attr('href', 'edititempeople.html?' + query);
$('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query); $('#btnEditMetadata', page).attr('href', 'edititemmetadata.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
} }
function getBaseRemoteOptions() { function getBaseRemoteOptions() {
@ -268,12 +269,18 @@
updateTabs(page, item); 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(); $('#btnEditPeople', page).hide();
} else { } else {
$('#btnEditPeople', page).show(); $('#btnEditPeople', page).show();
} }
if (item.Type == "BoxSet") {
$('#btnEditCollectionTitles', page).show();
} else {
$('#btnEditCollectionTitles', page).hide();
}
ApiClient.getRemoteImageProviders(getBaseRemoteOptions()).done(function (providers) { ApiClient.getRemoteImageProviders(getBaseRemoteOptions()).done(function (providers) {
if (providers.length) { if (providers.length) {

View file

@ -16,6 +16,7 @@
$('#btnEditPeople', page).attr('href', 'edititempeople.html?' + query); $('#btnEditPeople', page).attr('href', 'edititempeople.html?' + query);
$('#btnEditImages', page).attr('href', 'edititemimages.html?' + query); $('#btnEditImages', page).attr('href', 'edititemimages.html?' + query);
$('#btnEditCollectionTitles', page).attr('href', 'editcollectionitems.html?' + query);
} }
function reload(page) { function reload(page) {
@ -82,12 +83,18 @@
setFieldVisibilities(page, item); setFieldVisibilities(page, item);
fillItemInfo(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(); $('#btnEditPeople', page).hide();
} else { } else {
$('#btnEditPeople', page).show(); $('#btnEditPeople', page).show();
} }
if (item.Type == "BoxSet") {
$('#btnEditCollectionTitles', page).show();
} else {
$('#btnEditCollectionTitles', page).hide();
}
Dashboard.hideLoadingMsg(); Dashboard.hideLoadingMsg();
}); });
} }
@ -280,7 +287,17 @@
$('#fldYear', page).show(); $('#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(); $('#btnIdentify', page).show();
} else { } else {
$('#btnIdentify', page).hide(); $('#btnIdentify', page).hide();

View file

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

View file

@ -46,7 +46,7 @@
} }
if (!item.BackdropImageTags || !item.BackdropImageTags.length) { 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." />'; htmlName += '<img src="css/images/editor/missingbackdrop.png" title="Missing backdrop image." />';
} }
} }
@ -115,6 +115,13 @@
callback(nodes); callback(nodes);
if (!selectedId) {
if (window.location.toString().toLowerCase().indexOf('report.html') != -1) {
selectedId = 'libraryreport';
}
}
if (selectedId && nodes.filter(function (f) { if (selectedId && nodes.filter(function (f) {
return f.attr.id == selectedId; return f.attr.id == selectedId;

View file

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

View file

@ -25,9 +25,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "backdrop", shape: "backdrop",
@ -65,36 +62,12 @@
function updateFilterControls(page) { 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 () { $(document).on('pageinit', "#gameGenresPage", function () {
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -26,9 +26,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "backdrop", shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) { 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 () { $(document).on('pageinit', "#gameStudiosPage", function () {
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -174,7 +174,7 @@
var views = []; var views = [];
if (counts.MovieCount || counts.TrailerCount) { 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) { if (counts.EpisodeCount || counts.SeriesCount) {

View file

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

View file

@ -31,6 +31,7 @@
if (user.Configuration.IsAdministrator) { if (user.Configuration.IsAdministrator) {
$('#editButtonContainer', page).show(); $('#editButtonContainer', page).show();
} else { } else {
$('#editButtonContainer', page).hide(); $('#editButtonContainer', page).hide();
} }
@ -122,7 +123,7 @@
if (item.Type == "Episode" || item.Type == "Series" || item.Type == "Season") { if (item.Type == "Episode" || item.Type == "Series" || item.Type == "Season") {
return "tv"; return "tv";
} }
if (item.Type == "Movie" || item.Type == "Trailer" || item.Type == "BoxSet") { if (item.Type == "Movie" || item.Type == "Trailer") {
return "movies"; return "movies";
} }
if (item.Type == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicVideo") { if (item.Type == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicVideo") {
@ -131,6 +132,9 @@
if (item.MediaType == "Game") { if (item.MediaType == "Game") {
return "games"; return "games";
} }
if (item.Type == "BoxSet") {
return "boxsets";
}
return ""; return "";
} }
@ -162,10 +166,6 @@
$('#gameSystemTabs', page).show(); $('#gameSystemTabs', page).show();
} }
if (item.Type == "BoxSet") {
$('#boxsetTabs', page).show();
}
if (item.Type == "Trailer") { if (item.Type == "Trailer") {
$('#trailerTabs', page).show(); $('#trailerTabs', page).show();
} }
@ -177,8 +177,15 @@
function setInitialCollapsibleState(page, item, context, user) { function setInitialCollapsibleState(page, item, context, user) {
$('.collectionItems', page).empty();
if (item.IsFolder) { if (item.IsFolder) {
if (item.Type == "BoxSet") {
$('#childrenCollapsible', page).addClass('hide');
} else {
$('#childrenCollapsible', page).removeClass('hide'); $('#childrenCollapsible', page).removeClass('hide');
}
renderChildren(page, item, user); renderChildren(page, item, user);
} }
else { else {
@ -346,7 +353,7 @@
ApiClient.getItems(Dashboard.getCurrentUserId(), { ApiClient.getItems(Dashboard.getCurrentUserId(), {
Ids: item.SoundtrackIds.join(","), Ids: item.SoundtrackIds.join(","),
ItemFields: "PrimaryImageAspectRatio,ItemCounts,DateCreated,AudioInfo", ItemFields: "PrimaryImageAspectRatio,ItemCounts,AudioInfo",
SortBy: "SortName" SortBy: "SortName"
}).done(function (result) { }).done(function (result) {
@ -425,7 +432,7 @@
var options = { var options = {
userId: Dashboard.getCurrentUserId(), userId: Dashboard.getCurrentUserId(),
limit: item.Type == "MusicAlbum" ? 4 : 5, limit: item.Type == "MusicAlbum" ? 4 : 5,
fields: "PrimaryImageAspectRatio,DateCreated,UserData" fields: "PrimaryImageAspectRatio,UserData"
}; };
if (item.Type == "Movie") { if (item.Type == "Movie") {
@ -527,7 +534,7 @@
function renderChildren(page, item, user) { function renderChildren(page, item, user) {
var fields = "ItemCounts,DateCreated,AudioInfo,PrimaryImageAspectRatio"; var fields = "ItemCounts,AudioInfo,PrimaryImageAspectRatio";
var query = { var query = {
ParentId: item.Id, ParentId: item.Id,
@ -570,15 +577,9 @@
} else { } else {
var shape = "smallPoster"; var html = '';
if (item.Type == "Season") { if (item.Type == "Series") {
shape = "smallBackdrop";
}
var html;
if (item.Type == "Series" || item.Type == "BoxSet") {
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "portrait", shape: "portrait",
@ -606,18 +607,21 @@
centerText: true 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(); $('#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") { else if (item.Type == "Series") {
$('#childrenTitle', page).html('Seasons'); $('#childrenTitle', page).html('Seasons');
} }
else if (item.Type == "BoxSet") {
$('#childrenTitle', page).html('Titles');
}
else if (item.Type == "MusicAlbum") { else if (item.Type == "MusicAlbum") {
$('#childrenTitle', page).html('Tracks'); $('#childrenTitle', page).html('Tracks');
} }
@ -640,6 +641,82 @@
$('#childrenTitle', page).html('Items'); $('#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) { function renderUserDataIcons(page, item) {
$('.userDataIcons', page).html(LibraryBrowser.getUserDataIconsHtml(item)); $('.userDataIcons', page).html(LibraryBrowser.getUserDataIconsHtml(item));
} }

View file

@ -34,14 +34,23 @@
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create'); $('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
if (view == "Backdrop") { if (view == "Backdrop") {
html += LibraryBrowser.getPosterDetailViewHtml({
html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "smallBackdrop",
useAverageAspectRatio: true,
showTitle: true,
centerText: true,
preferBackdrop: true preferBackdrop: true
}); });
} }
else if (view == "Poster") { else if (view == "Poster") {
html += LibraryBrowser.getPosterDetailViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items 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()); 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) { getItemCountsHtml: function (options, item) {
var counts = []; var counts = [];

View file

@ -73,7 +73,7 @@
if (counts.MovieCount) { 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) { 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>'; 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); $('.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 += '<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) { if (counts.MovieCount) {
html += '<li><a class="libraryPanelLink" href="movieslatest.html">Movies</a></li>';
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' }
]);
} }
if (counts.SeriesCount) { if (counts.SeriesCount) {
html += getCollapsibleHtml('TV', [ html += '<li><a class="libraryPanelLink" href="tvrecommended.html">TV</a></li>';
{ 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' }
]);
} }
if (liveTvInfo.EnabledUsers.indexOf(Dashboard.getCurrentUserId()) != -1) { if (liveTvInfo.EnabledUsers.indexOf(Dashboard.getCurrentUserId()) != -1) {
html += getCollapsibleHtml('Live TV', [ html += '<li><a class="libraryPanelLink" href="livetvsuggested.html">Live TV</a></li>';
{ 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' }
]);
} }
if (counts.SongCount || counts.MusicVideoCount) { if (counts.SongCount || counts.MusicVideoCount) {
html += getCollapsibleHtml('Music', [ html += '<li><a class="libraryPanelLink" href="musicrecommended.html">Music</a></li>';
{ 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' }
]);
} }
if (counts.GameCount) { if (counts.GameCount) {
html += getCollapsibleHtml('Games', [ html += '<li><a class="libraryPanelLink" href="gamesrecommended.html">Games</a></li>';
{ 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 += '</div>'; if (counts.BoxSetCount) {
html += '<li><a class="libraryPanelLink" href="collections.html">Collections</a></li>';
}
html += '</ul>';
html += '</div>'; html += '</div>';
$(page).append(html); $(page).append(html);
@ -200,50 +163,23 @@
return panel; 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 = { window.LibraryMenu = {
showLibraryMenu: showLibraryMenu 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; var page = this;

View file

@ -1,9 +1,11 @@
(function ($, document, window) { (function ($, document, window) {
var defaultSortBy = "SortName";
// The base query options // The base query options
var query = { var query = {
SortBy: "SeriesSortName,SortName", SortBy: defaultSortBy,
SortOrder: "Ascending", SortOrder: "Ascending",
Recursive: true, Recursive: true,
Fields: "MediaStreams,DateCreated,Settings,Studios", Fields: "MediaStreams,DateCreated,Settings,Studios",
@ -21,21 +23,22 @@
{ {
return [ return [
{}, {},
{ name: 'Series' }, { name: 'Series', sortField: 'SeriesSortName,SortName' },
{ name: 'Season' }, { name: 'Season', sortField: 'SortName' },
{ name: 'Date Added' } { name: 'Date Added', sortField: 'DateCreated,SortName' }
]; ];
} }
case 'Series': case 'Series':
{ {
return [ return [
{}, {},
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Network' }, { name: 'Network', sortField: 'Studio,SortName' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Year' }, { name: 'Year', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Rating' }, { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Runtime' }, { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Trailers' }, { name: 'Trailers' },
{ name: 'Specials' } { name: 'Specials' }
]; ];
@ -44,12 +47,13 @@
{ {
return [ return [
{}, {},
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Game System' }, { name: 'Game System', sortField: 'GameSystem,SortName' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,GameSystem,SortName' },
{ name: 'Release Date' }, { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,GameSystem,SortName' },
{ name: 'Rating' }, { name: 'Parental Rating', sortField: 'OfficialRating,GameSystem,SortName' },
{ name: 'Players' }, { name: 'Community Rating', sortField: 'CommunityRating,GameSystem,SortName' },
{ name: 'Players', sortField: 'Players,GameSystem,SortName' },
{ name: 'Trailers' } { name: 'Trailers' }
]; ];
} }
@ -57,13 +61,14 @@
{ {
return [ return [
{}, {},
{ name: 'Album Artist' }, { name: 'Album Artist', sortField: 'AlbumArtist,Album,SortName' },
{ name: 'Album' }, { name: 'Album', sortField: 'Album,SortName' },
{ name: 'Disc' },
{ name: 'Track' }, { name: 'Track' },
{ name: 'Name' }, { name: 'Name', sortField: 'Name' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date' }, { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Runtime' }, { name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Audio' }, { name: 'Audio' },
{ name: 'Embedded Image' } { name: 'Embedded Image' }
]; ];
@ -72,13 +77,15 @@
{ {
return [ return [
{}, {},
{ name: 'Series' }, { name: 'Series', sortField: 'SeriesSortName,SortName' },
{ name: 'Season' }, { name: 'Season' },
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date' }, { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Runtime' }, { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Video' }, { name: 'Video' },
{ name: 'Resolution' },
{ name: 'Audio' }, { name: 'Audio' },
{ name: 'Subtitles' } { name: 'Subtitles' }
]; ];
@ -87,10 +94,11 @@
{ {
return [ return [
{}, {},
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date' }, { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Rating' }, { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Trailers' } { name: 'Trailers' }
]; ];
} }
@ -99,42 +107,46 @@
return [ return [
{}, {},
{ name: 'Series' }, { name: 'Series' },
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date' }, { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Rating' } { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Community Rating', sortField: 'CommunityRating,SortName' }
]; ];
} }
case 'MusicArtist': case 'MusicArtist':
{ {
return [ return [
{}, {},
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Date Added' } { name: 'Date Added', sortField: 'DateCreated,SortName' }
]; ];
} }
case 'MusicAlbum': case 'MusicAlbum':
{ {
return [ return [
{}, {},
{ name: 'Album Artist' }, { name: 'Album Artist', sortField: 'AlbumArtist,SortName' },
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date' }, { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Rating' }, { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Runtime' } { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' }
]; ];
} }
default: default:
{ {
return [ return [
{}, {},
{ name: 'Name' }, { name: 'Name', sortField: 'SortName' },
{ name: 'Date Added' }, { name: 'Date Added', sortField: 'DateCreated,SortName' },
{ name: 'Release Date' }, { name: 'Release Date', sortField: 'ProductionYear,PremiereDate,SortName' },
{ name: 'Rating' }, { name: 'Parental Rating', sortField: 'OfficialRating,SortName' },
{ name: 'Runtime' }, { name: 'Community Rating', sortField: 'CommunityRating,SortName' },
{ name: 'Runtime', sortField: 'Runtime,SortName' },
{ name: 'Video' }, { name: 'Video' },
{ name: 'Resolution' },
{ name: 'Audio' }, { name: 'Audio' },
{ name: 'Subtitles' }, { name: 'Subtitles' },
{ name: 'Trailers' }, { 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) { function getItemCellsHtml(item, headercells) {
return headercells.map(function (cell) { return headercells.map(function (cell) {
@ -151,6 +210,8 @@
var html = ''; var html = '';
html += '<td>'; html += '<td>';
var stream;
switch (cell.type || cell.name) { switch (cell.type || cell.name) {
case 'Album Artist': case 'Album Artist':
@ -178,6 +239,11 @@
html += item.Studios.length ? item.Studios[0].Name : '&nbsp;'; html += item.Studios.length ? item.Studios[0].Name : '&nbsp;';
break; break;
} }
case 'Disc':
{
html += item.ParentIndexNumber == null ? '' : item.ParentIndexNumber;
break;
}
case 'Track': case 'Track':
{ {
html += item.IndexNumber == null ? '' : item.IndexNumber; html += item.IndexNumber == null ? '' : item.IndexNumber;
@ -190,7 +256,7 @@
} }
case 'Audio': case 'Audio':
{ {
var stream = (item.MediaStreams || []).filter(function (s) { stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Audio'; return s.Type == 'Audio';
@ -205,7 +271,7 @@
} }
case 'Video': case 'Video':
{ {
var stream = (item.MediaStreams || []).filter(function (s) { stream = (item.MediaStreams || []).filter(function (s) {
return s.Type == 'Video'; return s.Type == 'Video';
@ -216,6 +282,19 @@
} }
break; 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': case 'Embedded Image':
{ {
if ((item.MediaStreams || []).filter(function (s) { if ((item.MediaStreams || []).filter(function (s) {
@ -281,7 +360,12 @@
html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>'; html += '<a href="edititemmetadata.html?id=' + item.Id + '">' + LibraryBrowser.getPosterViewDisplayName(item, false, false) + '</a>';
break; break;
} }
case 'Rating': case 'Community Rating':
{
html += item.CommunityRating || '&nbsp;';
break;
}
case 'Parental Rating':
{ {
html += item.OfficialRating || '&nbsp;'; html += item.OfficialRating || '&nbsp;';
break; break;
@ -357,7 +441,7 @@
} }
if (!item.BackdropImageTags || !item.BackdropImageTags.length) { 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>'; 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(''); }).join('');
} }
function getReportHtml(items, reportType) { function getReportHtml(items, reportType, currentSortField, currentSortDirection) {
var html = ''; 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 += '<thead>';
html += '<tr>'; html += '<tr>';
@ -391,7 +475,31 @@
html += cells.map(function (c) { 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(''); }).join('');
@ -427,7 +535,7 @@
$('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount)).trigger('create'); $('.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 () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;
@ -444,6 +552,34 @@
query.StartIndex = 0; query.StartIndex = 0;
reloadItems(page); 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) { function reloadItems(page) {
@ -536,6 +672,9 @@
query.StartIndex = 0; query.StartIndex = 0;
query.IncludeItemTypes = this.value; query.IncludeItemTypes = this.value;
query.SortBy = getDefaultSortOrder(this.value);
query.SortOrder = "Ascending";
reloadItems(page); reloadItems(page);
}); });
@ -710,6 +849,9 @@
query.StartIndex = 0; query.StartIndex = 0;
} }
query.SortBy = getDefaultSortOrder($('#selectView', page).val());
query.SortOrder = "Ascending";
reloadItems(page); reloadItems(page);
}).on('pageshow', "#libraryReportPage", function () { }).on('pageshow', "#libraryReportPage", function () {

View file

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

View file

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

View file

@ -7,7 +7,7 @@
SortOrder: "Ascending", SortOrder: "Ascending",
IncludeItemTypes: "BoxSet", IncludeItemTypes: "BoxSet",
Recursive: true, Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio", Fields: "PrimaryImageAspectRatio",
StartIndex: 0 StartIndex: 0
}; };
@ -26,6 +26,8 @@
updateFilterControls(page); updateFilterControls(page);
if (result.TotalRecordCount) {
var checkSortOption = $('.radioSortBy:checked', page); var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create'); $('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
@ -40,6 +42,11 @@
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(); $('#items', page).html(html).trigger('create').createPosterItemHoverMenu();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
@ -60,6 +67,16 @@
LibraryBrowser.saveQueryValues('boxsets', query); LibraryBrowser.saveQueryValues('boxsets', query);
Dashboard.getCurrentUser().done(function(user) {
if (user.Configuration.IsAdministrator) {
$('#btnNewCollection', page).removeClass('hide');
} else {
$('#btnNewCollection', page).addClass('hide');
}
});
Dashboard.hideLoadingMsg(); Dashboard.hideLoadingMsg();
}); });
} }
@ -95,6 +112,13 @@
$('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater); $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
} }
function showNewCollectionPanel(page) {
$('#newCollectionPanel', page).panel('toggle');
$('#txtNewCollectionName', page).val('').focus();
}
$(document).on('pageinit', "#boxsetsPage", function () { $(document).on('pageinit', "#boxsetsPage", function () {
var page = this; var page = this;
@ -164,6 +188,11 @@
reloadItems(page); reloadItems(page);
}); });
$('#btnNewCollection', page).on('click', function () {
showNewCollectionPanel(page);
});
}).on('pagebeforeshow', "#boxsetsPage", function () { }).on('pagebeforeshow', "#boxsetsPage", function () {
var limit = LibraryBrowser.getDefaultPageSize(); var limit = LibraryBrowser.getDefaultPageSize();
@ -183,4 +212,37 @@
updateFilterControls(this); 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); })(jQuery, document);

View file

@ -26,9 +26,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "backdrop", shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) { 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 () { $(document).on('pageinit', "#movieGenresPage", function () {
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -27,9 +27,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "portrait", shape: "portrait",
@ -68,19 +65,6 @@
function updateFilterControls(page) { 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 () { $('.chkPersonTypeFilter', page).each(function () {
var filters = "," + (query.PersonTypes || ""); var filters = "," + (query.PersonTypes || "");
@ -97,18 +81,6 @@
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -9,7 +9,7 @@
SortOrder: "Ascending", SortOrder: "Ascending",
IncludeItemTypes: "Movie", IncludeItemTypes: "Movie",
Recursive: true, Recursive: true,
Fields: "DateCreated,PrimaryImageAspectRatio", Fields: "PrimaryImageAspectRatio",
StartIndex: 0 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 ($, 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 () { $(document).on('pagebeforeshow', "#moviesRecommendedPage", function () {
var screenWidth = $(window).width(); var screenWidth = $(window).width();
@ -8,34 +44,13 @@
var options = { 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", SortBy: "DatePlayed",
SortOrder: "Descending", SortOrder: "Descending",
IncludeItemTypes: "Movie", IncludeItemTypes: "Movie",
Filters: "IsResumable", Filters: "IsResumable",
Limit: screenWidth >= 1920 ? 4 : (screenWidth >= 1440 ? 4 : 3), Limit: screenWidth >= 1920 ? 4 : (screenWidth >= 1440 ? 4 : 3),
Recursive: true, Recursive: true,
Fields: "DateCreated,UserData" Fields: "PrimaryImageAspectRatio"
}; };
ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) { ApiClient.getItems(Dashboard.getCurrentUserId(), options).done(function (result) {
@ -57,33 +72,26 @@
}); });
options = { var url = ApiClient.getUrl("Movies/Recommendations", {
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();
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); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "backdrop", shape: "backdrop",
@ -65,37 +62,12 @@
} }
function updateFilterControls(page) { 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 () { $(document).on('pageinit', "#movieStudiosPage", function () {
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

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

View file

@ -26,9 +26,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "square", shape: "square",
@ -66,19 +63,6 @@
function updateFilterControls(page) { 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); $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
} }
@ -86,18 +70,6 @@
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

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

View file

@ -25,9 +25,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "square", shape: "square",
@ -65,19 +62,6 @@
function updateFilterControls(page) { 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); $('.alphabetPicker', page).alphaValue(query.NameStartsWithOrGreater);
} }
@ -85,18 +69,6 @@
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -26,9 +26,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "backdrop", shape: "backdrop",
@ -66,36 +63,12 @@
function updateFilterControls(page) { 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 () { $(document).on('pageinit', "#musicGenresPage", function () {
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -94,7 +94,7 @@
} }
html += "</div>"; 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) { var installedPlugin = plugin.isApp ? null : installedPlugins.filter(function (ip) {
return ip.Name == plugin.name; return ip.Name == plugin.name;
@ -108,7 +108,7 @@
html += "</div>"; 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 += plugin.price > 0 ? "$" + plugin.price.toFixed(2) : "Free";
html += Dashboard.getStoreRatingHtml(plugin.avgRating, plugin.id, plugin.name); html += Dashboard.getStoreRatingHtml(plugin.avgRating, plugin.id, plugin.name);

View file

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

View file

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

View file

@ -26,9 +26,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html += LibraryBrowser.getPosterViewHtml({ html += LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
useAverageAspectRatio: true, useAverageAspectRatio: true,
@ -69,19 +66,6 @@
function updateFilterControls(page) { 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 () { $('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || ""); var filters = "," + (query.Filters || "");
@ -96,18 +80,6 @@
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -27,9 +27,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html = LibraryBrowser.getPosterViewHtml({ html = LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
shape: "portrait", shape: "portrait",
@ -68,19 +65,6 @@
function updateFilterControls(page) { 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 () { $('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || ""); var filters = "," + (query.Filters || "");
@ -106,18 +90,6 @@
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

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

View file

@ -26,9 +26,6 @@
updateFilterControls(page); updateFilterControls(page);
var checkSortOption = $('.radioSortBy:checked', page);
$('.viewSummary', page).html(LibraryBrowser.getViewSummaryHtml(query, checkSortOption)).trigger('create');
html += LibraryBrowser.getPosterViewHtml({ html += LibraryBrowser.getPosterViewHtml({
items: result.Items, items: result.Items,
useAverageAspectRatio: true, useAverageAspectRatio: true,
@ -69,19 +66,6 @@
function updateFilterControls(page) { 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 () { $('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || ""); var filters = "," + (query.Filters || "");
@ -96,18 +80,6 @@
var page = this; 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 () { $('.chkStandardFilter', this).on('change', function () {
var filterName = this.getAttribute('data-filter'); var filterName = this.getAttribute('data-filter');

View file

@ -6,58 +6,29 @@
var query = { var query = {
SortBy: "PremiereDate,AirTime,SortName", Limit: 32,
SortOrder: "Ascending", Fields: "SeriesInfo,UserData",
IncludeItemTypes: "Episode", UserId: Dashboard.getCurrentUserId()
Limit: 30,
Recursive: true,
Fields: "SeriesInfo,UserData"
}; };
var missedItemsQuery = $.extend({ $.getJSON(ApiClient.getUrl("Shows/Upcoming", query)).done(function (result) {
IsUnaired: false var items = result.Items;
}, query); if (!items.length) {
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) {
$('#upcomingItems', page).html("<p>Nothing here. Please ensure <a href='metadata.html'>downloading of internet metadata</a> is enabled.</p>").trigger('create'); $('#upcomingItems', page).html("<p>Nothing here. Please ensure <a href='metadata.html'>downloading of internet metadata</a> is enabled.</p>").trigger('create');
return; return;
} }
$('#upcomingItems', page).html(LibraryBrowser.getPosterViewHtml({ $('#upcomingItems', page).html(LibraryBrowser.getPosterViewHtml({
items: missedItems, items: items,
showLocationTypeIndicator: false, showLocationTypeIndicator: false,
shape: "backdrop", shape: "backdrop",
showTitle: true, showTitle: true,
showPremiereDate: true, showPremiereDate: true,
showPremiereDateIndex: true, showPremiereDateIndex: true,
preferThumb: true preferThumb: true
})).createPosterItemHoverMenu(); })).createPosterItemHoverMenu();
}); });
}); });

View file

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

View file

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

View file

@ -18,46 +18,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

@ -21,46 +21,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

@ -18,46 +18,13 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="viewControls"> <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> <button data-mini="true" data-icon="filter" data-inline="true" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging"> <div class="listTopPaging">
</div> </div>
<div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</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"> <div data-role="panel" id="filterPanel" data-position="right" data-display="overlay" data-theme="a" data-position-fixed="true">
<form> <form>
<fieldset data-role="controlgroup"> <fieldset data-role="controlgroup">

View file

@ -13,16 +13,7 @@
<img src="css/images/mblogoicon.png" />Configure settings</h2> <img src="css/images/mblogoicon.png" />Configure settings</h2>
<br /> <br />
<div style="margin: 1em 0;"> <div style="margin: 1em 0 2em;">
<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;">
<label for="chkVideoImages">Enable video image extraction</label> <label for="chkVideoImages">Enable video image extraction</label>
<input id="chkVideoImages" name="chkVideoImages" type="checkbox" checked="checked" /> <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> <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 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>
<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"> <div class="wizardNavigation">
<button type="button" data-iconpos="left" data-icon="arrow-l" data-inline="true" onclick="history.back();">Previous</button> <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> <button id="btnNextPage" type="button" data-iconpos="right" data-icon="arrow-r" data-inline="true">Next</button>

View file

@ -15,7 +15,12 @@
<br /> <br />
<div style="margin: 1em 0;"> <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" /> <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 class="fieldDescription">Saving artwork and metadata directly into media folders will put them in a place where they can be easily edited.</div>
</div> </div>