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-17 15:47:22 -07:00
commit 37fb510a2d
71 changed files with 1041 additions and 619 deletions

View file

@ -10,12 +10,12 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<button id="btnNewCollection" data-mini="true" data-icon="plus" data-inline="true" class="hide">New</button> <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>

View file

@ -0,0 +1,105 @@
.itemContextMenu {
position: absolute;
background: #fff;
border: 1px solid #ddd;
color: #000;
font-size: 14px;
z-index: 10000;
background-color: #ffffff;
border: 1px solid #ccc;
border: 1px solid rgba(0, 0, 0, 0.2);
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 14px;
*border-right-width: 2px;
*border-bottom-width: 2px;
-webkit-border-radius: 6px;
-moz-border-radius: 6px;
border-radius: 6px;
-webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
-webkit-background-clip: padding-box;
-moz-background-clip: padding;
background-clip: padding-box;
text-align: left;
}
.contextMenuInner {
padding: .5em 0;
width: 160px;
}
.contextMenuOption {
display: block;
color: #000;
text-decoration: none;
font-weight: normal;
padding: .35em 1em;
}
.contextMenuOption:hover {
color: #ffffff;
text-decoration: none;
background-color: #0088cc;
background-color: #0081c2;
background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
background-image: -o-linear-gradient(top, #0088cc, #0077b3);
background-image: linear-gradient(to bottom, #0088cc, #0077b3);
background-repeat: repeat-x;
}
.contextMenuHeader {
font-weight: bold;
margin: .5em 0;
padding: 0 1em;
color: #999;
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
text-transform: uppercase;
}
.contextMenuDivider {
margin: .75em 0;
height: 1px;
background: #e5e5e5;
}
.itemContextMenu:before, .dropdown-context-up:before {
position: absolute;
top: -7px;
left: 9px;
display: inline-block;
border-right: 7px solid transparent;
border-bottom: 7px solid #ccc;
border-left: 7px solid transparent;
border-bottom-color: rgba(0, 0, 0, 0.2);
content: '';
}
.dropdown-context:after, .dropdown-context-up:after {
position: absolute;
top: -6px;
left: 10px;
display: inline-block;
border-right: 6px solid transparent;
border-bottom: 6px solid #ffffff;
border-left: 6px solid transparent;
content: '';
}
.dropdown-context-up:before, .dropdown-context-up:after {
top: auto;
bottom: -7px;
z-index: 9999;
}
.dropdown-context-up:before {
border-right: 7px solid transparent;
border-top: 7px solid #ccc;
border-bottom: none;
border-left: 7px solid transparent;
}
.dropdown-context-up:after {
border-right: 6px solid transparent;
border-top: 6px solid #ffffff;
border-left: 6px solid transparent;
border-bottom: none;
}

View file

@ -212,6 +212,10 @@
margin: .5em 0 .25em; margin: .5em 0 .25em;
} }
.viewControls + .listTopPaging {
margin-left: .5em!important;
}
.labelPageSize { .labelPageSize {
margin-left: 1em!important; margin-left: 1em!important;
display: inline !important; display: inline !important;
@ -912,6 +916,22 @@ a.itemTag:hover {
background-color: transparent !important; background-color: transparent !important;
} }
.alternateVersionIndicator {
display: block;
position: absolute;
top: 5px;
left: 5px;
text-align: center;
vertical-align: middle;
width: 22px;
height: 19px;
padding-top: 3px;
border-radius: 50%;
color: #fff;
background: rgb(51, 136, 204);
background: rgba(51, 136, 204, .9);
}
.unidentifiedIndicator { .unidentifiedIndicator {
display: block; display: block;
position: absolute; position: absolute;
@ -1049,7 +1069,7 @@ a.itemTag:hover {
.alphabetPicker { .alphabetPicker {
position: fixed; position: fixed;
right: 2px; right: 2px;
bottom: 30px; bottom: 10px;
width: 27px; width: 27px;
z-index: 1000; z-index: 1000;
text-align: center; text-align: center;

View file

@ -171,12 +171,12 @@
margin: 5px; margin: 5px;
padding: 8px; padding: 8px;
border: 1px solid #444; border: 1px solid #444;
background-image: -webkit-gradient(linear,left top,left bottom,from(#444),to(#2d2d2d)); background-image: -webkit-gradient(linear,left top,left bottom,from(#333),to(#2d2d2d));
background-image: -webkit-linear-gradient(#444,#2d2d2d); background-image: -webkit-linear-gradient(#333,#2d2d2d);
background-image: -moz-linear-gradient(#444,#2d2d2d); background-image: -moz-linear-gradient(#333,#2d2d2d);
background-image: -ms-linear-gradient(#444,#2d2d2d); background-image: -ms-linear-gradient(#333,#2d2d2d);
background-image: -o-linear-gradient(#444,#2d2d2d); background-image: -o-linear-gradient(#333,#2d2d2d);
background-image: linear-gradient(#444,#2d2d2d); background-image: linear-gradient(#333,#2d2d2d);
} }
.imageEditorTile { .imageEditorTile {

View file

@ -304,14 +304,6 @@
@media all and (min-width: 1440px) { @media all and (min-width: 1440px) {
.squarePosterItem {
width: 180px;
}
.squarePosterItem .posterItemImage {
height: 180px;
}
.backdropPosterItem { .backdropPosterItem {
width: 298px; width: 298px;
} }
@ -320,17 +312,6 @@
height: 167.625px; height: 167.625px;
} }
} }
@media all and (min-width: 1920px) {
.squarePosterItem {
width: 190px;
}
.squarePosterItem .posterItemImage {
height: 190px;
}
}
/********************/ /********************/
.ribbon-wrapper { .ribbon-wrapper {
width: 50px; width: 50px;
@ -341,6 +322,7 @@
left: 0px; left: 0px;
z-index: 999; z-index: 999;
} }
.ribbon { .ribbon {
font: bold 11px Sans-Serif; font: bold 11px Sans-Serif;
color: #333; color: #333;
@ -360,6 +342,7 @@
-moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); -moz-box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3); box-shadow: 0px 0px 3px rgba(0, 0, 0, 0.3);
} }
.ribbon-3d { .ribbon-3d {
background-color: #3344ff; background-color: #3344ff;
background-image: -webkit-gradient(linear, left top, left bottom, from(#BFDC7A), to(#ff0033)); background-image: -webkit-gradient(linear, left top, left bottom, from(#BFDC7A), to(#ff0033));
@ -368,6 +351,7 @@
background-image: -ms-linear-gradient(top, #3344ff, #ff0033); background-image: -ms-linear-gradient(top, #3344ff, #ff0033);
background-image: -o-linear-gradient(top, #3344ff, #ff0033); background-image: -o-linear-gradient(top, #3344ff, #ff0033);
} }
.ribbon-blue { .ribbon-blue {
background-color: #1199ff; background-color: #1199ff;
background-image: -webkit-gradient(linear, left top, left bottom, from(#1199ff), to(#3333ff)); background-image: -webkit-gradient(linear, left top, left bottom, from(#1199ff), to(#3333ff));
@ -376,6 +360,7 @@
background-image: -ms-linear-gradient(top, #1199ff, #3333ff); background-image: -ms-linear-gradient(top, #1199ff, #3333ff);
background-image: -o-linear-gradient(top, #1199ff, #3333ff); background-image: -o-linear-gradient(top, #1199ff, #3333ff);
} }
.ribbon-red { .ribbon-red {
background-color: #ff3333; background-color: #ff3333;
background-image: -webkit-gradient(linear, left top, left bottom, from(#ff3333), to(#992233)); background-image: -webkit-gradient(linear, left top, left bottom, from(#ff3333), to(#992233));

View file

@ -658,7 +658,7 @@ h1 .imageLink {
/* Dashboard home */ /* Dashboard home */
.tblConnections td { .tblConnections td {
padding: 1em 0 1em 1.25em; padding: 1em 0 1em .75em;
vertical-align: top; vertical-align: top;
} }
@ -666,12 +666,8 @@ h1 .imageLink {
padding-left: 0; padding-left: 0;
} }
.tblConnections img { .tblConnections img:not(.clientNowPlayingImage) {
height: 48px; height: 28px;
}
.nowPlayingText {
padding-left: .5em!important;
} }
.clientNowPlayingImage { .clientNowPlayingImage {

View file

@ -60,9 +60,11 @@
</div> </div>
</div> </div>
<div class="activeDevicesCollapsible" data-role="collapsible" data-collapsed="false" style="margin-top: 2em;"> <div data-role="collapsible" data-collapsed="false" style="margin-top: 2em;">
<h3>Active Devices</h3> <h3>Active Connections</h3>
<div class="connections"> <div>
<table class="tblConnections" style="border-collapse: collapse;">
</table>
</div> </div>
</div> </div>

View file

@ -59,7 +59,7 @@
</button> </button>
</div> </div>
<div class="collectionItemSearchResults" style="min-height:100px;"> <div class="collectionItemSearchResults">
</div> </div>
<button id="btnAddItems" type="button" data-icon="plus" data-mini="true"> <button id="btnAddItems" type="button" data-icon="plus" data-mini="true">

View file

@ -384,6 +384,7 @@
</div> </div>
<div data-role="popup" data-transition="slidefade" class="popupIdentify popup" data-theme="a"> <div data-role="popup" data-transition="slidefade" class="popupIdentify popup" data-theme="a">
<a href="#" data-rel="back" class="ui-btn ui-corner-all ui-shadow ui-btn-b ui-icon-delete ui-btn-icon-notext ui-btn-right">Close</a>
<div class="ui-bar-a" style="text-align: center; padding: 0 20px; position: relative;"> <div class="ui-bar-a" style="text-align: center; padding: 0 20px; position: relative;">
@ -397,7 +398,7 @@
<form class="popupIdentifyForm" style="max-width: initial;"> <form class="popupIdentifyForm" style="max-width: initial;">
<p>Enter one or more search criteria.</p> <p>Enter one or more search criteria. Remove criteria to increase search results.</p>
<div> <div>
<label for="txtLookupName">Name:</label> <label for="txtLookupName">Name:</label>

View file

@ -21,12 +21,12 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -14,11 +14,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -16,12 +16,12 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>

View file

@ -14,11 +14,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -18,8 +18,6 @@
<h1 class="listHeader"><a href="itemlist.html">Media Folders<img src="css/images/rightarrow.png" class="headerArrowImage" /></a></h1> <h1 class="listHeader"><a href="itemlist.html">Media Folders<img src="css/images/rightarrow.png" class="headerArrowImage" /></a></h1>
<div id="divCollections"></div> <div id="divCollections"></div>
<div id="tip" class="ui-bar-a" style="padding: .75em; font-weight: normal; margin: 2em 0; display: none;"></div>
</td> </td>
</tr> </tr>
</table> </table>

View file

@ -175,6 +175,12 @@
</div> </div>
<div id="trailersContent" class="detailSectionContent"></div> <div id="trailersContent" class="detailSectionContent"></div>
</div> </div>
<div id="alternateVersionsCollapsible" class="detailSection hide">
<div class="detailSectionHeader">
Alternate Versions
</div>
<div id="alternateVersionsContent" class="detailSectionContent"></div>
</div>
<div id="additionalPartsCollapsible" class="detailSection hide"> <div id="additionalPartsCollapsible" class="detailSection hide">
<div class="detailSectionHeader"> <div class="detailSectionHeader">
Additional Parts Additional Parts

View file

@ -23,12 +23,12 @@
</select> </select>
</div> </div>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -21,6 +21,14 @@
</p> </p>
<div id="divVirtualFolders"></div> <div id="divVirtualFolders"></div>
</div> </div>
<br />
<div class="readOnlyContent refreshLibraryPanel hide">
<button type="button" class="btnRefresh" data-icon="refresh" data-mini="true">Scan Library</button>
<progress max="100" min="0" style="width: 100%;" class="refreshProgress"></progress>
<div style="margin-top: 5px;">Last Result: <span class="lastRefreshResult"></span></div>
</div>
</div> </div>
</div> </div>
</div> </div>

View file

@ -57,7 +57,7 @@
</div> </div>
<div class="detailSectionContent" style="padding: 0 1em;"> <div class="detailSectionContent" style="padding: 0 1em;">
<p class="status"></p> <p class="recordingStatus"></p>
<p class="airDate"></p> <p class="airDate"></p>
</div> </div>
</div> </div>

View file

@ -23,6 +23,14 @@
<p>Status: <span id="activeServiceStatus"></span></p> <p>Status: <span id="activeServiceStatus"></span></p>
<p>Version: <span id="activeServiceVersion"></span></p> <p>Version: <span id="activeServiceVersion"></span></p>
</div> </div>
<br />
<div class="readOnlyContent refreshGuidePanel hide">
<button type="button" class="btnRefreshGuide" data-icon="refresh" data-mini="true">Refresh Guide Data</button>
<progress max="100" min="0" style="width: 100%;" class="refreshGuideProgress"></progress>
<div style="margin-top: 5px;">Last Result: <span class="lastRefreshGuideResult"></span></div>
</div>
<br /> <br />
<h2>Tuners</h2> <h2>Tuners</h2>

View file

@ -32,7 +32,7 @@
<p class="itemOverview"></p> <p class="itemOverview"></p>
<p style="margin-top: 2em;"> <p style="margin-top: 2em;">
<span class="status"></span> <span class="timerStatus"></span>
</p> </p>
</div> </div>

View file

@ -18,11 +18,11 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -20,11 +20,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -29,12 +29,12 @@
</select> </select>
</div> </div>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -18,11 +18,11 @@
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -20,12 +20,12 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -19,11 +19,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -26,12 +26,12 @@
</select> </select>
</div> </div>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -19,11 +19,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -16,11 +16,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -20,12 +20,12 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -0,0 +1,116 @@
(function () {
function onDocumentMouseDown(e) {
var $e = $(e.target);
var isContextMenuOption = $e.is('.contextMenuOption');
if (!isContextMenuOption || $e.is('.contextMenuCommandOption')) {
if ($e.is('.itemContextMenu') || $e.parents('.itemContextMenu').length) {
return;
}
}
if (isContextMenuOption) {
setTimeout(closeContextMenus, 150);
} else {
closeContextMenus();
}
}
function closeContextMenus() {
$('.itemContextMenu').hide().remove();
$('.hasContextMenu').removeClass('hasContextMenu');
}
function getMenuOptionHtml(item) {
var html = '';
if (item.type == 'divider') {
html += '<p class="contextMenuDivider"></p>';
}
if (item.type == 'header') {
html += '<p class="contextMenuHeader">' + item.text + '</p>';
}
if (item.type == 'link') {
html += '<a class="contextMenuOption" href="' + item.url + '">' + item.text + '</a>';
}
if (item.type == 'command') {
html += '<a class="contextMenuOption contextMenuCommandOption" data-command="' + item.name + '" href="#">' + item.text + '</a>';
}
return html;
}
function getMenu(items) {
var html = '';
html += '<div class="itemContextMenu">';
html += '<div class="contextMenuInner">' + items.map(getMenuOptionHtml).join('') + '</div>';
html += '</div>';
return $(html).appendTo(document.body);
}
$.fn.createContextMenu = function (options) {
return this.on('contextmenu', options.selector, function (e) {
var elem = this;
var items = options.getOptions(elem);
if (!items.length) {
return;
}
var menu = getMenu(items);
var autoH = menu.height() + 12;
if ((e.pageY + autoH) > $('html').height()) {
menu.addClass('dropdown-context-up').css({
top: e.pageY - 20 - autoH,
left: e.pageX - 13
}).fadeIn();
} else {
menu.css({
top: e.pageY + 10,
left: e.pageX - 13
}).fadeIn();
}
$(this).addClass('hasContextMenu');
$(document).off('mousedown.closecontextmenu').on('mousedown.closecontextmenu', onDocumentMouseDown);
menu.on('click', '.contextMenuCommandOption', function() {
closeContextMenus();
options.command(this.getAttribute('data-command'), elem);
return false;
});
return false;
});
};
})();

View file

@ -135,9 +135,9 @@
var html = ''; var html = '';
var container = $('.connections', page); var table = $('.tblConnections', page);
$('.sessionPosterItem', container).addClass('deadSession'); $('.trSession', table).addClass('deadSession');
var deviceId = ApiClient.deviceId(); var deviceId = ApiClient.deviceId();
@ -145,181 +145,103 @@
var connection = dashboardInfo.ActiveConnections[i]; var connection = dashboardInfo.ActiveConnections[i];
var itemId = 'session' + connection.Id; var rowId = 'trSession' + connection.Id;
var elem = $('#' + itemId, page); var elem = $('#' + rowId, page);
if (elem.length) { if (elem.length) {
DashboardPage.updateSession(elem, connection); DashboardPage.updateSession(elem, connection);
continue; continue;
} }
html += '<div class="sessionPosterItem posterItem squarePosterItem" id="' + itemId + '" style="vertical-align:top;margin-bottom:2em;">'; html += '<tr class="trSession" id="' + rowId + '">';
html += '<td class="clientType" style="text-align:center;">';
html += DashboardPage.getClientType(connection);
html += '</td>';
html += '<td>';
html += '<div>';
if (deviceId == connection.DeviceId) {
html += connection.Client;
} else {
html += '<a href="#" onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});">' + connection.Client + '</a>';
}
html += '</div>';
html += '<div>' + connection.ApplicationVersion + '</div>';
html += '<div>' + connection.DeviceName + '</div>';
html += '<div class="username">';
html += DashboardPage.getUsersHtml(connection);
html += '</div>';
html += '</td>';
var nowPlayingItem = connection.NowPlayingItem; var nowPlayingItem = connection.NowPlayingItem;
var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem);
var style = ""; html += '<td>';
if (imageUrl) {
style += 'background-image:url(\'' + imageUrl + '\');';
}
var onclick = connection.DeviceId == deviceId ? '' : ' onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});"';
html += '<a' + onclick + ' data-imageurl="' + imageUrl + '" href="#" class="posterItemImage coveredPosterItemImage" style="' + style + 'background-color:#f2f2f2;display:block;">';
var defaultTextStyle = '';
if (nowPlayingItem) {
defaultTextStyle = "display:none;";
}
html += '<div class="posterItemDefaultText" style="' + defaultTextStyle + '">Nothing currently playing</div>';
html += '<div class="posterItemTextOverlay">';
var itemNameStyle='';
if (!nowPlayingItem) {
itemNameStyle = "display:none;";
}
html += '<div class="posterItemText posterItemName" style="' + itemNameStyle + '">' + (nowPlayingItem ? nowPlayingItem.Name : '') + '</div>';
var progressStyle='';
if (!nowPlayingItem) {
progressStyle = "display:none;";
}
html += "<div class='posterItemText posterItemProgress' style='" + progressStyle + "'>";
html += '<progress class="itemProgressBar" min="0" max="100" value="' + DashboardPage.getPlaybackProgress(connection) + '" style="opacity:.9;"></progress>';
html += "</div>";
html += "</div>";
html += '<img src="' + DashboardPage.getClientImage(connection) + '" style="top:10px;left:10px;height:24px;position:absolute;opacity: .95;" />';
html += '</a>';
html += '<div class="sessionItemText">' + DashboardPage.getSessionItemText(connection) + '</div>';
//html += '<td class="clientType" style="text-align:center;">';
//html += DashboardPage.getClientType(connection);
//html += '</td>';
//html += '<td>';
//html += '<div>';
//if (deviceId == connection.DeviceId) {
// html += connection.Client;
//} else {
// html += '<a href="#" onclick="RemoteControl.showMenu({sessionId:\'' + connection.Id + '\'});">' + connection.Client + '</a>';
//}
//html += '</div>';
//html += '</td>';
//html += '<td class="nowPlayingImage">';
//html += DashboardPage.getNowPlayingImage(nowPlayingItem);
//html += '</td>';
//html += '<td class="nowPlayingText">';
//html += DashboardPage.getNowPlayingText(connection, nowPlayingItem);
//html += '</td>';
html += '<div class="nowPlayingImage">';
html += DashboardPage.getNowPlayingImage(nowPlayingItem);
html += '</div>'; html += '</div>';
html += '<div class="clientNowPlayingText">';
html += DashboardPage.getNowPlayingText(connection, nowPlayingItem);
html += '</div>';
html += '</td>';
html += '</tr>';
} }
container.append(html).trigger('create'); table.append(html).trigger('create');
$('.deadSession', container).remove(); $('.deadSession', table).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 = '<div>'; var html = '';
if (session.UserId) { if (session.UserId) {
html += session.UserName; html += '<div>' + session.UserName + '</div>';
} }
html += session.AdditionalUsers.map(function (currentSession) { html += session.AdditionalUsers.map(function (currentSession) {
return ', ' + currentSession.UserName; return '<div>' + currentSession.UserName + '</div>';
}); });
html += '</div>';
return html; return html;
}, },
updateSession: function (elem, session) { updateSession: function (row, session) {
elem.removeClass('deadSession'); row.removeClass('deadSession');
$('.sessionItemText', elem).html(DashboardPage.getSessionItemText(session)); $('.username', row).html(DashboardPage.getUsersHtml(session));
var nowPlayingItem = session.NowPlayingItem; var nowPlayingItem = session.NowPlayingItem;
if (nowPlayingItem) { $('.clientNowPlayingText', row).html(DashboardPage.getNowPlayingText(session, nowPlayingItem)).trigger('create');
$('.posterItemDefaultText', elem).hide();
$('.posterItemProgress', elem).show();
$('.posterItemName', elem).show().html(nowPlayingItem.Name);
$('progress', elem).val(DashboardPage.getPlaybackProgress(session)); var imageRow = $('.nowPlayingImage', row);
} else {
$('.posterItemDefaultText', elem).show();
$('.posterItemProgress', elem).hide();
$('.posterItemName', elem).hide().html('');
}
var imageUrl = DashboardPage.getNowPlayingImage(nowPlayingItem); var image = $('img', imageRow)[0];
var image = $('.posterItemImage', elem)[0]; var nowPlayingItemId = nowPlayingItem ? nowPlayingItem.Id : null;
var nowPlayingItemImageTag = nowPlayingItem ? nowPlayingItem.PrimaryImageTag : null;
if (imageUrl && imageUrl != image.getAttribute('data-imageurl')) { if (!image || image.getAttribute('data-itemid') != nowPlayingItemId || image.getAttribute('data-tag') != nowPlayingItemImageTag) {
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', '');
} }
}, },
getSessionItemText: function (connection) { getClientType: 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();
@ -345,81 +267,91 @@
imgUrl = 'css/images/clients/html5.png'; imgUrl = 'css/images/clients/html5.png';
} }
return imgUrl; return "<img src='" + imgUrl + "' alt='Dashboard' />";
} }
if (clientLowered == "mb-classic") { if (clientLowered == "mb-classic") {
return "css/images/clients/mbc.png"; return "<img src='css/images/clients/mbc.png' alt='Media Browser Classic' />";
} }
if (clientLowered == "media browser theater") { if (clientLowered == "media browser theater") {
return "css/images/clients/mb.png"; return "<img src='css/images/clients/mb.png' alt='Media Browser Theater' />";
} }
if (clientLowered == "android") { if (clientLowered == "android") {
return "css/images/clients/android.png"; return "<img src='css/images/clients/android.png' alt='Android' />";
} }
if (clientLowered == "roku") { if (clientLowered == "roku") {
return "css/images/clients/roku.jpg"; return "<img src='css/images/clients/roku.jpg' alt='Roku' />";
} }
if (clientLowered == "ios") { if (clientLowered == "ios") {
return "css/images/clients/ios.png"; return "<img src='css/images/clients/ios.png' alt='iOS' />";
} }
if (clientLowered == "windows rt") { if (clientLowered == "windows rt") {
return "css/images/clients/windowsrt.png"; return "<img src='css/images/clients/windowsrt.png' alt='Windows RT' />";
} }
if (clientLowered == "windows phone") { if (clientLowered == "windows phone") {
return "css/images/clients/windowsphone.png"; return "<img src='css/images/clients/windowsphone.png' alt='Windows Phone' />";
} }
if (clientLowered == "dlna") { if (clientLowered == "dlna") {
return "css/images/clients/dlna.png"; return "<img src='css/images/clients/dlna.png' alt='Dlna' />";
} }
if (clientLowered == "mbkinect") { if (clientLowered == "mbkinect") {
return "css/images/clients/mbkinect.png"; return "<img src='css/images/clients/mbkinect.png' alt='MB Kinect' />";
} }
if (clientLowered == "xbmc") { if (clientLowered == "xbmc") {
return "css/images/clients/xbmc.png"; return "<img src='css/images/clients/xbmc.png' alt='Xbmc' />";
} }
return "css/images/clients/mb.png"; return connection.Client;
}, },
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) {
return ApiClient.getImageUrl(item.Id, { var url = ApiClient.getImageUrl(item.Id, {
type: "Primary", type: "Primary",
height: 300, height: 100,
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;
@ -440,16 +372,21 @@
html += '<p>'; html += '<p>';
html += task.Name; html += task.Name+"<br/>";
if (task.State == "Running") { if (task.State == "Running") {
var progress = (task.CurrentProgressPercentage || 0).toFixed(1); var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
html += '<span style="color:#267F00;margin-right:5px;font-weight:bold;"> - ' + progress + '%</span>';
html += '<progress max="100" value="' + progress + '" title="' + progress + '%">';
html += '' + progress + '%';
html += '</progress>';
html += "<span style='color:#009F00;margin-left:5px;margin-right:5px;'>" + progress + "%</span>";
html += '<button type="button" data-icon="stop" data-iconpos="notext" data-inline="true" data-mini="true" onclick="DashboardPage.stopTask(\'' + task.Id + '\');">Stop</button>'; html += '<button type="button" data-icon="stop" data-iconpos="notext" data-inline="true" data-mini="true" onclick="DashboardPage.stopTask(\'' + task.Id + '\');">Stop</button>';
} }
else if (task.State == "Cancelling") { else if (task.State == "Cancelling") {
html += '<span style="color:#cc0000;"> - Stopping</span>'; html += '<span style="color:#cc0000;">Stopping</span>';
} }
html += '</p>'; html += '</p>';

View file

@ -44,7 +44,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -42,7 +42,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -1,27 +1,5 @@
(function ($, document, apiClient) { (function ($, document, apiClient) {
function reloadTips(page) {
var tips = [
'Did you know that editing the artist or album of a music video will allow it to appear on the artist and album pages?',
'Did you know that editing the tmdb id, tvdb id, and/or games db id of an album will allow media browser to link it to a movie, series or game as a soundtrack?',
'Did you know that you can re-order your media folders by editing their sort names?',
'Did you know that series, seasons, games and boxsets can have local trailers?',
'Did you know that movies can have special features by placing them in a "specials" sub-folder underneath the movie folder?',
'Did you know that the trailer plugin can automatically download trailers for existing movies in your collection?'
];
var random = Math.floor((Math.random() * tips.length * 1.5));
var tip = tips[random];
if (tip) {
$('#tip', page).html(tip).show();
} else {
$('#tip', page).hide();
}
}
function getViewHtml(view) { function getViewHtml(view) {
var html = ''; var html = '';
@ -242,8 +220,6 @@
}); });
reloadTips(page);
}); });
})(jQuery, document, ApiClient); })(jQuery, document, ApiClient);

View file

@ -487,7 +487,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {

View file

@ -227,6 +227,13 @@
renderAdditionalParts(page, item, user); renderAdditionalParts(page, item, user);
} }
if (!item.AlternateVersionCount) {
$('#alternateVersionsCollapsible', page).addClass('hide');
} else {
$('#alternateVersionsCollapsible', page).removeClass('hide');
renderAlternateVersions(page, item, user);
}
$('#themeSongsCollapsible', page).hide(); $('#themeSongsCollapsible', page).hide();
$('#themeVideosCollapsible', page).hide(); $('#themeVideosCollapsible', page).hide();
@ -476,7 +483,7 @@
borderless: item.Type == "Game" borderless: item.Type == "Game"
}); });
$('#similarContent', page).html(html).createPosterItemHoverMenu(); $('#similarContent', page).html(html).createPosterItemMenus();
}); });
} }
@ -608,7 +615,7 @@
}); });
} }
$('#childrenContent', page).html(html).createPosterItemHoverMenu(); $('#childrenContent', page).html(html).createPosterItemMenus();
if (item.Type == "BoxSet") { if (item.Type == "BoxSet") {
@ -681,7 +688,7 @@
renderCollectionItemType(page, { name: 'Titles' }, items, user); renderCollectionItemType(page, { name: 'Titles' }, items, user);
} }
$('.collectionItems', page).trigger('create').createPosterItemHoverMenu(); $('.collectionItems', page).trigger('create').createPosterItemMenus();
} }
function renderCollectionItemType(page, type, items, user) { function renderCollectionItemType(page, type, items, user) {
@ -886,6 +893,35 @@
}); });
} }
function renderAlternateVersions(page, item, user) {
var url = ApiClient.getUrl("Videos/" + item.Id + "/AlternateVersions", {
userId: user.Id
});
$.getJSON(url).done(function (result) {
if (result.Items.length) {
$('#alternateVersionsCollapsible', page).show();
var html = LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: "portrait",
context: 'movies',
useAverageAspectRatio: true,
showTitle: true,
centerText: true,
formatIndicators: true
});
$('#alternateVersionsContent', page).html(html).trigger('create').createPosterItemMenus();
} else {
$('#alternateVersionsCollapsible', page).hide();
}
});
}
function renderScenes(page, item, user, limit) { function renderScenes(page, item, user, limit) {
var html = ''; var html = '';

View file

@ -662,10 +662,10 @@
cssClass += ' ' + options.shape + 'PosterItem'; cssClass += ' ' + options.shape + 'PosterItem';
html += '<a data-itemid="' + item.Id + '" class="' + cssClass + '" href="' + LibraryBrowser.getHref(item, options.context) + '">'; html += '<a data-itemid="' + item.Id + '" class="' + cssClass + '" data-primaryversionid="' + (item.PrimaryVersionId || '') + '" data-locationtype="' + item.LocationType + '" data-mediatype="' + (item.MediaType || '') + '" href="' + LibraryBrowser.getHref(item, options.context) + '">';
// Ribbon // Ribbon
if (item.MediaType == "Video" && item.Video3DFormat) { if (item.MediaType == "Video" && options.formatIndicators) {
// This would be much better if specified in the json payload // This would be much better if specified in the json payload
// Another nice thing to have in the payload would be 720 vs 1080 // Another nice thing to have in the payload would be 720 vs 1080
// Then, rather than "HD" it could display the specific HD format // Then, rather than "HD" it could display the specific HD format
@ -717,6 +717,9 @@
html += LibraryBrowser.getPlayedIndicatorHtml(item); html += LibraryBrowser.getPlayedIndicatorHtml(item);
} }
if (item.AlternateVersionCount) {
html += '<div class="alternateVersionIndicator">' + (item.AlternateVersionCount + 1) + '</div>';
}
if (item.IsUnidentified) { if (item.IsUnidentified) {
html += '<div class="unidentifiedIndicator"><div class="ui-icon-alert ui-btn-icon-notext"></div></div>'; html += '<div class="unidentifiedIndicator"><div class="ui-icon-alert ui-btn-icon-notext"></div></div>';
} }
@ -1934,225 +1937,3 @@
}; };
})(window, document, jQuery, screen, localStorage); })(window, document, jQuery, screen, localStorage);
(function ($, document, window) {
var showOverlayTimeout;
function onHoverOut() {
if (showOverlayTimeout) {
clearTimeout(showOverlayTimeout);
showOverlayTimeout = null;
}
$('.posterItemOverlayTarget:visible', this).each(function () {
var elem = this;
$(this).animate({ "height": "0" }, "fast", function () {
$(elem).hide();
});
});
$('.posterItemOverlayTarget:visible', this).stop().animate({ "height": "0" }, function () {
$(this).hide();
});
}
function getOverlayHtml(item, currentUser, posterItem) {
var html = '';
html += '<div class="posterItemOverlayInner">';
var isSmallItem = $(posterItem).hasClass('smallBackdropPosterItem');
var isPortrait = $(posterItem).hasClass('portraitPosterItem');
var isSquare = $(posterItem).hasClass('squarePosterItem');
var parentName = isSmallItem || isPortrait ? null : item.SeriesName;
var name = LibraryBrowser.getPosterViewDisplayName(item, true);
html += '<div style="font-weight:bold;margin-bottom:1em;">';
var logoHeight = isSmallItem ? 20 : 26;
var maxLogoWidth = isPortrait ? 100 : 200;
var imgUrl;
if (parentName && item.ParentLogoItemId) {
imgUrl = ApiClient.getImageUrl(item.ParentLogoItemId, {
height: logoHeight * 2,
type: 'logo',
tag: item.ParentLogoImageTag
});
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:' + maxLogoWidth + 'px;" />';
}
else if (item.ImageTags.Logo) {
imgUrl = LibraryBrowser.getImageUrl(item, 'Logo', 0, {
height: logoHeight * 2,
});
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:' + maxLogoWidth + 'px;" />';
}
else {
html += parentName || name;
}
html += '</div>';
if (parentName) {
html += '<p>';
html += name;
html += '</p>';
} else if (!isSmallItem) {
html += '<p class="itemMiscInfo" style="white-space:nowrap;">';
html += LibraryBrowser.getMiscInfoHtml(item);
html += '</p>';
}
html += '<div style="margin:1.25em 0;">';
html += '<span class="itemCommunityRating">';
html += LibraryBrowser.getRatingHtml(item, false);
html += '</span>';
if (isPortrait) {
html += '<span class="userDataIcons" style="display:block;margin:1.25em 0;">';
html += LibraryBrowser.getUserDataIconsHtml(item);
html += '</span>';
} else {
html += '<span class="userDataIcons">';
html += LibraryBrowser.getUserDataIconsHtml(item);
html += '</span>';
}
html += '</div>';
html += '<div>';
var buttonMargin = isPortrait || isSquare ? "margin:0 4px 0 0;" : "margin:0 10px 0 0;";
var buttonCount = 0;
if (MediaPlayer.canPlay(item, currentUser)) {
var resumePosition = (item.UserData || {}).PlaybackPositionTicks || 0;
var onPlayClick = 'LibraryBrowser.showPlayMenu(this, \'' + item.Id + '\', \'' + item.Type + '\', \'' + item.MediaType + '\', ' + resumePosition + ');return false;';
html += '<button type="button" data-mini="true" data-inline="true" data-icon="play" data-iconpos="notext" title="Play" onclick="' + onPlayClick + '" style="' + buttonMargin + '">Play</button>';
buttonCount++;
if (item.MediaType == "Audio" || item.Type == "MusicAlbum") {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="plus" data-iconpos="notext" title="Queue" onclick="MediaPlayer.queue(\'' + item.Id + '\');return false;" style="' + buttonMargin + '">Queue</button>';
buttonCount++;
}
}
if (item.LocalTrailerCount && item.PlayAccess == 'Full') {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="video" data-iconpos="notext" class="btnPlayTrailer" data-itemid="' + item.Id + '" title="Play Trailer" style="' + buttonMargin + '">Play Trailer</button>';
buttonCount++;
}
if (currentUser.Configuration.IsAdministrator && item.Type != "Recording" && item.Type != "Program") {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="edit" data-iconpos="notext" title="Edit" onclick="Dashboard.navigate(\'edititemmetadata.html?id=' + item.Id + '\');return false;" style="' + buttonMargin + '">Edit</button>';
buttonCount++;
}
if (!isPortrait || buttonCount < 3) {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="wireless" data-iconpos="notext" title="Remote" class="btnRemoteControl" data-itemid="' + item.Id + '" style="' + buttonMargin + '">Remote</button>';
}
html += '</div>';
html += '</div>';
return html;
}
function onTrailerButtonClick() {
var id = this.getAttribute('data-itemid');
ApiClient.getLocalTrailers(Dashboard.getCurrentUserId(), id).done(function (trailers) {
MediaPlayer.play(trailers);
});
return false;
}
function onRemoteControlButtonClick() {
var id = this.getAttribute('data-itemid');
ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) {
RemoteControl.showMenuForItem({
item: item
});
});
return false;
}
$.fn.createPosterItemHoverMenu = function () {
function onShowTimerExpired(elem) {
var innerElem = $('.posterItemOverlayTarget', elem);
var id = elem.getAttribute('data-itemid');
var promise1 = ApiClient.getItem(Dashboard.getCurrentUserId(), id);
var promise2 = Dashboard.getCurrentUser();
$.when(promise1, promise2).done(function (response1, response2) {
var item = response1[0];
var user = response2[0];
innerElem.html(getOverlayHtml(item, user, elem)).trigger('create');
$('.btnPlayTrailer', innerElem).on('click', onTrailerButtonClick);
$('.btnRemoteControl', innerElem).on('click', onRemoteControlButtonClick);
});
innerElem.show().each(function () {
this.style.height = 0;
}).animate({ "height": "100%" }, "fast");
}
function onHoverIn() {
if (showOverlayTimeout) {
clearTimeout(showOverlayTimeout);
showOverlayTimeout = null;
}
var elem = this;
showOverlayTimeout = setTimeout(function () {
onShowTimerExpired(elem);
}, 1000);
}
// https://hacks.mozilla.org/2013/04/detecting-touch-its-the-why-not-the-how/
if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) {
/* browser with either Touch Events of Pointer Events
running on touch-capable device */
return this;
}
return this.on('mouseenter', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverIn).on('mouseleave', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverOut);
};
})(jQuery, document, window);

View file

@ -0,0 +1,273 @@
(function ($, document, window) {
var showOverlayTimeout;
function onHoverOut() {
if (showOverlayTimeout) {
clearTimeout(showOverlayTimeout);
showOverlayTimeout = null;
}
$('.posterItemOverlayTarget:visible', this).each(function () {
var elem = this;
$(this).animate({ "height": "0" }, "fast", function () {
$(elem).hide();
});
});
$('.posterItemOverlayTarget:visible', this).stop().animate({ "height": "0" }, function () {
$(this).hide();
});
}
function getOverlayHtml(item, currentUser, posterItem) {
var html = '';
html += '<div class="posterItemOverlayInner">';
var isSmallItem = $(posterItem).hasClass('smallBackdropPosterItem');
var isPortrait = $(posterItem).hasClass('portraitPosterItem');
var isSquare = $(posterItem).hasClass('squarePosterItem');
var parentName = isSmallItem || isPortrait ? null : item.SeriesName;
var name = LibraryBrowser.getPosterViewDisplayName(item, true);
html += '<div style="font-weight:bold;margin-bottom:1em;">';
var logoHeight = isSmallItem ? 20 : 26;
var maxLogoWidth = isPortrait ? 100 : 200;
var imgUrl;
if (parentName && item.ParentLogoItemId) {
imgUrl = ApiClient.getImageUrl(item.ParentLogoItemId, {
height: logoHeight * 2,
type: 'logo',
tag: item.ParentLogoImageTag
});
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:' + maxLogoWidth + 'px;" />';
}
else if (item.ImageTags.Logo) {
imgUrl = LibraryBrowser.getImageUrl(item, 'Logo', 0, {
height: logoHeight * 2,
});
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:' + maxLogoWidth + 'px;" />';
}
else {
html += parentName || name;
}
html += '</div>';
if (parentName) {
html += '<p>';
html += name;
html += '</p>';
} else if (!isSmallItem) {
html += '<p class="itemMiscInfo" style="white-space:nowrap;">';
html += LibraryBrowser.getMiscInfoHtml(item);
html += '</p>';
}
html += '<div style="margin:1.25em 0;">';
html += '<span class="itemCommunityRating">';
html += LibraryBrowser.getRatingHtml(item, false);
html += '</span>';
if (isPortrait) {
html += '<span class="userDataIcons" style="display:block;margin:1.25em 0;">';
html += LibraryBrowser.getUserDataIconsHtml(item);
html += '</span>';
} else {
html += '<span class="userDataIcons">';
html += LibraryBrowser.getUserDataIconsHtml(item);
html += '</span>';
}
html += '</div>';
html += '<div>';
var buttonMargin = isPortrait || isSquare ? "margin:0 4px 0 0;" : "margin:0 10px 0 0;";
var buttonCount = 0;
if (MediaPlayer.canPlay(item, currentUser)) {
var resumePosition = (item.UserData || {}).PlaybackPositionTicks || 0;
var onPlayClick = 'LibraryBrowser.showPlayMenu(this, \'' + item.Id + '\', \'' + item.Type + '\', \'' + item.MediaType + '\', ' + resumePosition + ');return false;';
html += '<button type="button" data-mini="true" data-inline="true" data-icon="play" data-iconpos="notext" title="Play" onclick="' + onPlayClick + '" style="' + buttonMargin + '">Play</button>';
buttonCount++;
if (item.MediaType == "Audio" || item.Type == "MusicAlbum") {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="plus" data-iconpos="notext" title="Queue" onclick="MediaPlayer.queue(\'' + item.Id + '\');return false;" style="' + buttonMargin + '">Queue</button>';
buttonCount++;
}
}
if (item.LocalTrailerCount && item.PlayAccess == 'Full') {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="video" data-iconpos="notext" class="btnPlayTrailer" data-itemid="' + item.Id + '" title="Play Trailer" style="' + buttonMargin + '">Play Trailer</button>';
buttonCount++;
}
if (currentUser.Configuration.IsAdministrator && item.Type != "Recording" && item.Type != "Program") {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="edit" data-iconpos="notext" title="Edit" onclick="Dashboard.navigate(\'edititemmetadata.html?id=' + item.Id + '\');return false;" style="' + buttonMargin + '">Edit</button>';
buttonCount++;
}
if (!isPortrait || buttonCount < 3) {
html += '<button type="button" data-mini="true" data-inline="true" data-icon="wireless" data-iconpos="notext" title="Remote" class="btnRemoteControl" data-itemid="' + item.Id + '" style="' + buttonMargin + '">Remote</button>';
}
html += '</div>';
html += '</div>';
return html;
}
function onTrailerButtonClick() {
var id = this.getAttribute('data-itemid');
ApiClient.getLocalTrailers(Dashboard.getCurrentUserId(), id).done(function (trailers) {
MediaPlayer.play(trailers);
});
return false;
}
function onRemoteControlButtonClick() {
var id = this.getAttribute('data-itemid');
ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(function (item) {
RemoteControl.showMenuForItem({
item: item
});
});
return false;
}
function onMenuCommand(command, elem) {
var id = elem.getAttribute('data-itemid');
}
function getMenuOptions(elem) {
var items = [];
var id = elem.getAttribute('data-itemid');
var mediatype = elem.getAttribute('data-mediatype');
items.push({ type: 'header', text: 'Edit' });
items.push({ type: 'link', text: 'Details', url: 'edititemmetadata.html?id=' + id });
items.push({ type: 'link', text: 'Images', url: 'edititemimages.html?id=' + id });
//if (mediatype == 'Video' && elem.getAttribute('data-locationtype') == 'FileSystem' && !elem.getAttribute('data-primaryversionid')) {
// items.push({ type: 'divider' });
// items.push({ type: 'header', text: 'Manage' });
// items.push({ type: 'command', text: 'Alternate Versions', name: 'AlternateVersions' });
//}
return items;
}
$.fn.createPosterItemMenus = function (options) {
options = options || {};
function onShowTimerExpired(elem) {
if ($(elem).hasClass('hasContextMenu')) {
return;
}
var innerElem = $('.posterItemOverlayTarget', elem);
var id = elem.getAttribute('data-itemid');
var promise1 = ApiClient.getItem(Dashboard.getCurrentUserId(), id);
var promise2 = Dashboard.getCurrentUser();
$.when(promise1, promise2).done(function (response1, response2) {
var item = response1[0];
var user = response2[0];
innerElem.html(getOverlayHtml(item, user, elem)).trigger('create');
$('.btnPlayTrailer', innerElem).on('click', onTrailerButtonClick);
$('.btnRemoteControl', innerElem).on('click', onRemoteControlButtonClick);
});
innerElem.show().each(function () {
this.style.height = 0;
}).animate({ "height": "100%" }, "fast");
}
function onHoverIn() {
if (showOverlayTimeout) {
clearTimeout(showOverlayTimeout);
showOverlayTimeout = null;
}
var elem = this;
showOverlayTimeout = setTimeout(function () {
onShowTimerExpired(elem);
}, 1000);
}
// https://hacks.mozilla.org/2013/04/detecting-touch-its-the-why-not-the-how/
if (('ontouchstart' in window) || (navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints > 0)) {
/* browser with either Touch Events of Pointer Events
running on touch-capable device */
return this;
}
var sequence = this;
if (options.contextMenu !== false) {
Dashboard.getCurrentUser().done(function (user) {
if (user.Configuration.IsAdministrator) {
sequence.createContextMenu({
getOptions: getMenuOptions,
command: onMenuCommand,
selector: '.posterItem'
});
}
});
}
return this.on('mouseenter', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverIn)
.on('mouseleave', '.backdropPosterItem,.smallBackdropPosterItem,.portraitPosterItem,.squarePosterItem', onHoverOut);
};
})(jQuery, document, window);

View file

@ -202,6 +202,18 @@
}); });
}); });
} }
}).on('pageshow', ".libraryPage", function () {
var page = this;
var elem = $('.libraryViewNavInner .ui-btn-active:visible', page);
if (elem.length) {
elem[0].scrollIntoView();
// Scroll back up so in case vertical scroll was messed with
$(document).scrollTop(0);
}
}); });
})(window, document, jQuery); })(window, document, jQuery);

View file

@ -12,7 +12,8 @@
StartIndex: 0, StartIndex: 0,
IncludeItemTypes: "Movie", IncludeItemTypes: "Movie",
IsMissing: false, IsMissing: false,
IsVirtualUnaired: false IsVirtualUnaired: false,
Limit: 300
}; };
function getHeaderCells(reportType) { function getHeaderCells(reportType) {
@ -529,11 +530,11 @@
// Scroll back up so they can see the results from the beginning // Scroll back up so they can see the results from the beginning
$(document).scrollTop(0); $(document).scrollTop(0);
$('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create'); $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create');
updateFilterControls(page); updateFilterControls(page);
$('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount)).trigger('create'); $('.listBottomPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create');
$('.reportContainer', page).html(getReportHtml(result.Items, reportType, query.SortBy, query.SortOrder)).trigger('create'); $('.reportContainer', page).html(getReportHtml(result.Items, reportType, query.SortBy, query.SortOrder)).trigger('create');
@ -547,12 +548,6 @@
reloadItems(page); reloadItems(page);
}); });
$('.selectPageSize', page).on('change', function () {
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
});
$('.lnkColumnSort', page).on('click', function () { $('.lnkColumnSort', page).on('click', function () {
var order = this.getAttribute('data-sortfield'); var order = this.getAttribute('data-sortfield');
@ -841,13 +836,6 @@
}).on('pagebeforeshow', "#libraryReportPage", function () { }).on('pagebeforeshow', "#libraryReportPage", function () {
var page = this; var page = this;
var limit = LibraryBrowser.getDefaultPageSize();
// If the default page size has changed, the start index will have to be reset
if (limit != query.Limit) {
query.Limit = limit;
query.StartIndex = 0;
}
query.SortBy = getDefaultSortOrder($('#selectView', page).val()); query.SortBy = getDefaultSortOrder($('#selectView', page).val());
query.SortOrder = "Ascending"; query.SortOrder = "Ascending";

View file

@ -64,7 +64,7 @@
ApiClient.sendWebSocketMessage("Context", vals.join('|')); ApiClient.sendWebSocketMessage("Context", vals.join('|'));
} }
$('.status', page).html('Status:&nbsp;&nbsp;&nbsp;' + item.Status); $('.recordingStatus', page).html('Status:&nbsp;&nbsp;&nbsp;' + item.Status);
Dashboard.getCurrentUser().done(function (user) { Dashboard.getCurrentUser().done(function (user) {

View file

@ -35,7 +35,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -58,7 +58,7 @@
overlayText: true, overlayText: true,
coverImage: true coverImage: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
} }
function reload(page) { function reload(page) {

View file

@ -127,7 +127,7 @@
overlayText: true, overlayText: true,
coverImage: true coverImage: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
} }
function renderSchedule(page, result) { function renderSchedule(page, result) {

View file

@ -157,12 +157,109 @@
}); });
} }
$(document).on('pageshow', "#liveTvStatusPage", function () { function pollTasks(page) {
ApiClient.getScheduledTasks().done(function (tasks) {
updateTasks(page, tasks);
});
}
function updateTasks(page, tasks) {
$('.refreshGuidePanel', page).removeClass('hide');
var task = tasks.filter(function (t) {
return t.Name == 'Refresh Guide';
})[0];
$('.btnRefreshGuide', page).buttonEnabled(task.State == 'Idle').attr('data-taskid', task.Id);
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
var progressElem = $('.refreshGuideProgress', page).val(progress);
if (task.State == 'Running') {
progressElem.show();
} else {
progressElem.hide();
}
var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : '';
if (lastResult == "Failed") {
$('.lastRefreshGuideResult', page).html('<span style="color:#FF0000;">(failed)</span>');
}
else if (lastResult == "Cancelled") {
$('.lastRefreshGuideResult', page).html('<span style="color:#0026FF;">(cancelled)</span>');
}
else if (lastResult == "Aborted") {
$('.lastRefreshGuideResult', page).html('<span style="color:#FF0000;">(Aborted by server shutdown)</span>');
} else {
$('.lastRefreshGuideResult', page).html(lastResult);
}
}
function onWebSocketMessage(e, msg) {
if (msg.MessageType == "ScheduledTasksInfo") {
var tasks = msg.Data;
var page = $.mobile.activePage;
updateTasks(page, tasks);
}
}
$(document).on('pageinit', "#liveTvStatusPage", function () {
var page = this; var page = this;
reload(page); $('.btnRefreshGuide', page).on('click', function () {
var button = this;
var id = button.getAttribute('data-taskid');
ApiClient.startScheduledTask(id).done(function () {
pollTasks(page);
});
}); });
}).on('pageshow', "#liveTvStatusPage", function () {
var page = this;
$('.refreshGuidePanel', page).addClass('hide');
reload(page);
pollTasks(page);
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500");
}
$(ApiClient).on("websocketmessage", onWebSocketMessage).on('websocketopen', function () {
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500");
}
});
}).on('pagehide', "#liveTvStatusPage", function () {
var page = this;
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop");
}
$(ApiClient).off("websocketmessage", onWebSocketMessage);
});
})(jQuery, document, window); })(jQuery, document, window);

View file

@ -23,7 +23,7 @@
}); });
$('.activeProgramItems', page).html(html).createPosterItemHoverMenu(); $('.activeProgramItems', page).html(html).createPosterItemMenus();
}); });
apiClient.getLiveTvRecommendedPrograms({ apiClient.getLiveTvRecommendedPrograms({
@ -46,7 +46,7 @@
}); });
$('.upcomingProgramItems', page).html(html).createPosterItemHoverMenu(); $('.upcomingProgramItems', page).html(html).createPosterItemMenus();
}); });
} }

View file

@ -62,7 +62,7 @@
$('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh'); $('#chkPrePaddingRequired', page).checked(item.IsPrePaddingRequired).checkboxradio('refresh');
$('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh'); $('#chkPostPaddingRequired', page).checked(item.IsPostPaddingRequired).checkboxradio('refresh');
$('.status', page).html('Status:&nbsp;&nbsp;&nbsp;' + item.Status); $('.timerStatus', page).html('Status:&nbsp;&nbsp;&nbsp;' + item.Status);
Dashboard.hideLoadingMsg(); Dashboard.hideLoadingMsg();
} }

View file

@ -327,3 +327,110 @@
}; };
$(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow); $(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow);
(function ($, document, window) {
function pollTasks(page) {
ApiClient.getScheduledTasks().done(function (tasks) {
updateTasks(page, tasks);
});
}
function updateTasks(page, tasks) {
$('.refreshLibraryPanel', page).removeClass('hide');
var task = tasks.filter(function (t) {
return t.Name == 'Scan media library';
})[0];
$('.btnRefresh', page).buttonEnabled(task.State == 'Idle').attr('data-taskid', task.Id);
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
var progressElem = $('.refreshProgress', page).val(progress);
if (task.State == 'Running') {
progressElem.show();
} else {
progressElem.hide();
}
var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : '';
if (lastResult == "Failed") {
$('.lastRefreshResult', page).html('<span style="color:#FF0000;">(failed)</span>');
}
else if (lastResult == "Cancelled") {
$('.lastRefreshResult', page).html('<span style="color:#0026FF;">(cancelled)</span>');
}
else if (lastResult == "Aborted") {
$('.lastRefreshResult', page).html('<span style="color:#FF0000;">(Aborted by server shutdown)</span>');
} else {
$('.lastRefreshResult', page).html(lastResult);
}
}
function onWebSocketMessage(e, msg) {
if (msg.MessageType == "ScheduledTasksInfo") {
var tasks = msg.Data;
var page = $.mobile.activePage;
updateTasks(page, tasks);
}
}
$(document).on('pageinit', "#mediaLibraryPage", function () {
var page = this;
$('.btnRefresh', page).on('click', function () {
var button = this;
var id = button.getAttribute('data-taskid');
ApiClient.startScheduledTask(id).done(function () {
pollTasks(page);
});
});
}).on('pageshow', "#mediaLibraryPage", function () {
var page = this;
$('.refreshLibraryPanel', page).addClass('hide');
pollTasks(page);
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500");
}
$(ApiClient).on("websocketmessage", onWebSocketMessage).on('websocketopen', function () {
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStart", "1500,1500");
}
});
}).on('pagehide', "#mediaLibraryPage", function () {
var page = this;
if (ApiClient.isWebSocketOpen()) {
ApiClient.sendWebSocketMessage("ScheduledTasksInfoStop");
}
$(ApiClient).off("websocketmessage", onWebSocketMessage);
});
})(jQuery, document, window);

View file

@ -24,7 +24,7 @@
self.initVideoPlayer = function () { self.initVideoPlayer = function () {
video = playVideo(item, startPosition, user); video = playVideo(item, startPosition, user);
enhancePlayer(); enhancePlayer();
return video return video;
}; };
self.toggleFullscreen = function () { self.toggleFullscreen = function () {
@ -75,11 +75,11 @@
$('#videoPlayer').removeClass('fullscreenVideo'); $('#videoPlayer').removeClass('fullscreenVideo');
fullscreenExited = true; fullscreenExited = true;
} };
self.isFullScreen = function() { self.isFullScreen = function() {
return document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement ? true : false; return document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement ? true : false;
} };
self.showSubtitleMenu = function () { self.showSubtitleMenu = function () {
@ -358,7 +358,7 @@
function enterFullScreen() { function enterFullScreen() {
var player = $("#videoPlayer") var player = $("#videoPlayer");
player.addClass("fullscreenVideo"); player.addClass("fullscreenVideo");
@ -366,7 +366,7 @@
function exitFullScreenToWindow() { function exitFullScreenToWindow() {
var player = $("#videoPlayer") var player = $("#videoPlayer");
player.removeClass("fullscreenVideo"); player.removeClass("fullscreenVideo");

View file

@ -47,7 +47,7 @@
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>'; 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').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -9,7 +9,8 @@
Recursive: true, Recursive: true,
Fields: "DateCreated", Fields: "DateCreated",
PersonTypes: "", PersonTypes: "",
StartIndex: 0 StartIndex: 0,
Limit: 100
}; };
function reloadItems(page) { function reloadItems(page) {
@ -23,7 +24,7 @@
var html = ''; var html = '';
$('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create'); $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create');
updateFilterControls(page); updateFilterControls(page);
@ -37,7 +38,7 @@
coverImage: true coverImage: true
}); });
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false);
$('#items', page).html(html).trigger('create'); $('#items', page).html(html).trigger('create');
@ -51,12 +52,6 @@
reloadItems(page); reloadItems(page);
}); });
$('.selectPageSize', page).on('change', function () {
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
});
LibraryBrowser.saveQueryValues('moviepeople', query); LibraryBrowser.saveQueryValues('moviepeople', query);
Dashboard.hideLoadingMsg(); Dashboard.hideLoadingMsg();
@ -131,14 +126,6 @@
}).on('pagebeforeshow', "#moviePeoplePage", function () { }).on('pagebeforeshow', "#moviePeoplePage", function () {
var limit = LibraryBrowser.getDefaultPageSize();
// If the default page size has changed, the start index will have to be reset
if (limit != query.Limit) {
query.Limit = limit;
query.StartIndex = 0;
}
LibraryBrowser.loadSavedQueryValues('moviepeople', query); LibraryBrowser.loadSavedQueryValues('moviepeople', query);
reloadItems(this); reloadItems(this);

View file

@ -10,7 +10,8 @@
IncludeItemTypes: "Movie", IncludeItemTypes: "Movie",
Recursive: true, Recursive: true,
Fields: "PrimaryImageAspectRatio", Fields: "PrimaryImageAspectRatio",
StartIndex: 0 StartIndex: 0,
CollapseBoxSetItems: true
}; };
function reloadItems(page) { function reloadItems(page) {
@ -66,7 +67,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -23,7 +23,7 @@
items: result.Items, items: result.Items,
useAverageAspectRatio: true useAverageAspectRatio: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });
@ -50,7 +50,7 @@
items: result.Items, items: result.Items,
useAverageAspectRatio: true useAverageAspectRatio: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });

View file

@ -68,7 +68,7 @@
overlayText: true, overlayText: true,
showTitle: true showTitle: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });
@ -90,7 +90,7 @@
var html = recommendations.map(getRecommendationHtml).join(''); var html = recommendations.map(getRecommendationHtml).join('');
$('.recommendations', page).html(html).createPosterItemHoverMenu(); $('.recommendations', page).html(html).createPosterItemMenus();
}); });
}); });

View file

@ -40,7 +40,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -37,7 +37,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -57,7 +57,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -36,7 +36,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -25,7 +25,7 @@
shape: "square", shape: "square",
showTitle: true, showTitle: true,
showParentTitle: true showParentTitle: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });
@ -48,7 +48,7 @@
shape: "square", shape: "square",
showTitle: true, showTitle: true,
showParentTitle: true showParentTitle: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });
@ -78,7 +78,7 @@
shape: "square", shape: "square",
showTitle: true, showTitle: true,
showParentTitle: true showParentTitle: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });
@ -108,7 +108,7 @@
shape: "square", shape: "square",
showTitle: true, showTitle: true,
showParentTitle: true showParentTitle: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });

View file

@ -474,40 +474,35 @@ var Dashboard = {
Dashboard.getCurrentUser().done(function (user) { Dashboard.getCurrentUser().done(function (user) {
var html = '<div data-role="popup" data-transition="slidefade" id="userFlyout" style="max-width:400px;margin-top:30px;margin-right:20px;" data-theme="a">'; var html = '<div data-role="panel" data-position="right" data-display="overlay" id="userFlyout" data-theme="a">';
html += '<a href="#" data-rel="back" data-role="button" data-icon="delete" data-iconpos="notext" class="ui-btn-right" data-theme="b">Close</a>'; html += '<h3>';
html += '<div class="ui-bar-b" style="text-align:center;">'; if (user.PrimaryImageTag) {
html += '<h3 style="margin: .5em 0;">' + user.Name + '</h3>'; var imageUrl = ApiClient.getUserImageUrl(user.Id, {
html += '</div>';
html += '<div style="padding: 1em;">'; width: 60,
html += '<p style="text-align:center;">';
var imageUrl = user.PrimaryImageTag ? ApiClient.getUserImageUrl(user.Id, {
height: 400,
tag: user.PrimaryImageTag, tag: user.PrimaryImageTag,
type: "Primary" type: "Primary"
}) : "css/images/userflyoutdefault.png"; });
html += '<img style="max-height:125px;max-width:200px;" src="' + imageUrl + '" />'; html += '<img style="max-width:28px;vertical-align:middle;margin-right:5px;" src="' + imageUrl + '" />';
html += '</p>'; }
html += '<p><a data-mini="true" data-role="button" href="useredit.html?userId=' + user.Id + '" data-icon="user">View Profile</button></a>'; html += user.Name;
html += '</h3>';
html += '<p><a data-mini="true" data-role="button" href="useredit.html?userId=' + user.Id + '" data-icon="user">Preferences</button></a>';
html += '<p><button data-mini="true" type="button" onclick="Dashboard.logout();" data-icon="lock">Sign Out</button></p>'; html += '<p><button data-mini="true" type="button" onclick="Dashboard.logout();" data-icon="lock">Sign Out</button></p>';
html += '</div>';
html += '</div>'; html += '</div>';
$(document.body).append(html); $(document.body).append(html);
$('#userFlyout').popup({ positionTo: context }).trigger('create').popup("open").on("popupafterclose", function () { $('#userFlyout').panel({}).trigger('create').panel("open").on("panelafterclose", function () {
$(this).off("popupafterclose").remove(); $(this).off("panelafterclose").remove();
}); });
}); });
}, },

View file

@ -28,7 +28,7 @@
showParentTitle: true, showParentTitle: true,
overlayText: true overlayText: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });

View file

@ -9,7 +9,8 @@
Recursive: true, Recursive: true,
Fields: "DateCreated", Fields: "DateCreated",
PersonTypes: "", PersonTypes: "",
StartIndex: 0 StartIndex: 0,
Limit: 100
}; };
function reloadItems(page) { function reloadItems(page) {
@ -23,7 +24,7 @@
var html = ''; var html = '';
$('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, true)).trigger('create'); $('.listTopPaging', page).html(LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false)).trigger('create');
updateFilterControls(page); updateFilterControls(page);
@ -37,7 +38,7 @@
coverImage: true coverImage: true
}); });
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount, false, [], false);
$('#items', page).html(html).trigger('create'); $('#items', page).html(html).trigger('create');
@ -51,12 +52,6 @@
reloadItems(page); reloadItems(page);
}); });
$('.selectPageSize', page).on('change', function () {
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
});
LibraryBrowser.saveQueryValues('tvpeople', query); LibraryBrowser.saveQueryValues('tvpeople', query);
Dashboard.hideLoadingMsg(); Dashboard.hideLoadingMsg();
@ -140,14 +135,6 @@
}).on('pagebeforeshow', "#tvPeoplePage", function () { }).on('pagebeforeshow', "#tvPeoplePage", function () {
var limit = LibraryBrowser.getDefaultPageSize();
// If the default page size has changed, the start index will have to be reset
if (limit != query.Limit) {
query.Limit = limit;
query.StartIndex = 0;
}
LibraryBrowser.loadSavedQueryValues('tvpeople', query); LibraryBrowser.loadSavedQueryValues('tvpeople', query);
reloadItems(this); reloadItems(this);

View file

@ -32,7 +32,7 @@
showParentTitle: true, showParentTitle: true,
overlayText: true overlayText: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });
} }
@ -65,7 +65,7 @@
showParentTitle: true, showParentTitle: true,
overlayText: true overlayText: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
} else { } else {

View file

@ -70,7 +70,7 @@
html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount); html += LibraryBrowser.getPagingHtml(query, result.TotalRecordCount);
$('#items', page).html(html).trigger('create').createPosterItemHoverMenu(); $('#items', page).html(html).trigger('create').createPosterItemMenus();
$('.btnNextPage', page).on('click', function () { $('.btnNextPage', page).on('click', function () {
query.StartIndex += query.Limit; query.StartIndex += query.Limit;

View file

@ -29,7 +29,7 @@
showPremiereDateIndex: true, showPremiereDateIndex: true,
preferThumb: true preferThumb: true
})).createPosterItemHoverMenu(); })).createPosterItemMenus();
}); });
}); });

View file

@ -16,12 +16,12 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -17,11 +17,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -20,11 +20,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>

View file

@ -28,12 +28,12 @@
</select> </select>
</div> </div>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button> <button data-mini="true" data-icon="sort" data-inline="true" data-iconpos="notext" title="Sort" onclick="$('#sortPanel', $(this).parents('.page')).panel( 'toggle' );">Sort</button>
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
<div class="viewSummary"></div> <div class="viewSummary"></div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>

View file

@ -17,11 +17,11 @@
</div> </div>
<div data-role="content"> <div data-role="content">
<div class="viewSettings"> <div class="viewSettings">
<div class="listTopPaging">
</div>
<div class="viewControls" data-role="controlgroup" data-type="horizontal"> <div class="viewControls" data-role="controlgroup" data-type="horizontal">
<button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button> <button data-mini="true" data-icon="filter" data-inline="true" data-iconpos="notext" title="Filter" onclick="$('#filterPanel', $(this).parents('.page')).panel( 'toggle' );">Filter</button>
</div> </div>
<div class="listTopPaging">
</div>
</div> </div>
<div id="items" class="itemsContainer"></div> <div id="items" class="itemsContainer"></div>
</div> </div>