Merge branch 'dev'
36
CHANGELOG.md
|
@ -1,5 +1,41 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v1.3.0 (2016-01-23)
|
||||||
|
|
||||||
|
* Add: Brand new Libraries section.
|
||||||
|
* Add: Lots of new library statistics.
|
||||||
|
* Add: Media info table for libraries.
|
||||||
|
* Add: Web app for Android and iOS. (Thanks @zobe123)
|
||||||
|
* Add: Slack notification agent. (Thanks @richipargo)
|
||||||
|
* Add: Facebook notification agent.
|
||||||
|
* Add: Custom script notification agent. (Thanks @Hellowlol)
|
||||||
|
* Add: Custom "From Name" to email notification agent.
|
||||||
|
* Add: Ability to test notifications / send custom one-off notifications.
|
||||||
|
* Add: 'datestamp' and 'timestamp' notification options.
|
||||||
|
* Add: More concurrent stream statistics.
|
||||||
|
* Add: Media info flags on the info pages.
|
||||||
|
* Add: Ability to fix broken metadata if the item has been moved in Plex.
|
||||||
|
* Add: Ability to rearrange the homepage statistics cards.
|
||||||
|
* Add: CentOS startup script (Thanks @PHoSawyer)
|
||||||
|
* Fix: Server name blank after first run wizard.
|
||||||
|
* Fix: Incorrect duration for grouped home stats.
|
||||||
|
* Fix: Allow SSL when verifying server in settings.
|
||||||
|
* Fix: Metadata for grouped recently added notifications.
|
||||||
|
* Fix: Unable to access settings with missing changelog file.
|
||||||
|
* Fix: Month name localization on play totals graphs.
|
||||||
|
* Fix: Get new PMS identifier when changing servers.
|
||||||
|
* Fix: Websocket log spam when there is no active session.
|
||||||
|
* Fix: Logs and cache folder not created in the data directory.
|
||||||
|
* Fix: Title links on sync table.
|
||||||
|
* Fix: Other various minor bugs and graphical glitches.
|
||||||
|
* Change: Prettier thumbnail popovers on tables.
|
||||||
|
* Change: Star ratings to use css/font-awesome.
|
||||||
|
* Change: More detailed logging info to warnings and errors.
|
||||||
|
* Change: Better PlexPy process restart handling (Thanks @jackwilsdon)
|
||||||
|
* Change: Massive behind the scenes code cleanup.
|
||||||
|
* Remove: Built in Pushover API token (User's own API token is now required).
|
||||||
|
|
||||||
|
|
||||||
## v1.2.16 (2015-12-22)
|
## v1.2.16 (2015-12-22)
|
||||||
|
|
||||||
* Fix Most Concurrent stream stat for emtpy databases
|
* Fix Most Concurrent stream stat for emtpy databases
|
||||||
|
|
|
@ -18,12 +18,117 @@ from plexpy import version
|
||||||
${next.headIncludes()}
|
${next.headIncludes()}
|
||||||
|
|
||||||
<link rel="icon" type="image/x-icon" href="interfaces/default/images/favicon.ico"/>
|
<link rel="icon" type="image/x-icon" href="interfaces/default/images/favicon.ico"/>
|
||||||
<!-- touch icons -->
|
|
||||||
<link rel="shortcut icon" href="interfaces/default/images/favicon.png">
|
<link rel="shortcut icon" href="interfaces/default/images/favicon.png">
|
||||||
<link rel="apple-touch-icon" href="interfaces/default/images/icon_iphone.png">
|
|
||||||
<link rel="apple-touch-icon" sizes="72x72" href="interfaces/default/images/icon_ipad.png">
|
<!-- Allow web app to be run in full-screen mode. -->
|
||||||
<link rel="apple-touch-icon" sizes="114x114" href="interfaces/default/images/icon_iphone@2x.png">
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||||
<link rel="apple-touch-icon" sizes="144x144" href="interfaces/default/images/icon_ipad@2x.png">
|
<!-- Configure the status bar. -->
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<!-- Set the viewport. -->
|
||||||
|
<meta name="viewport" content="initial-scale=1">
|
||||||
|
<!-- Disable automatic phone number detection. -->
|
||||||
|
<meta name="format-detection" content="telephone=no">
|
||||||
|
|
||||||
|
<!-- ICONS -->
|
||||||
|
<!-- IE10 icon -->
|
||||||
|
<meta name="application-name" content="PlexPy" />
|
||||||
|
<meta name="msapplication-config" content="interfaces/default/xml/IEconfig.xml"/>
|
||||||
|
<!-- Android >M39 icon -->
|
||||||
|
<link rel="manifest" href="interfaces/default/json/Android-manifest.json">
|
||||||
|
<!-- iPad retina icon -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-76@2x.png" sizes="152x152" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPad retina icon (iOS < 7) -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-72@2x.png" sizes="144x144" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPad non-retina icon -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-76.png" sizes="76x76" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPad non-retina icon (iOS < 7) -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-72.png" sizes="72x72" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPhone 6 Plus icon -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-60@2x.png" sizes="120x120" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPhone retina icon (iOS < 7) -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon@2x.png" sizes="114x114" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPhone non-retina icon (iOS < 7) -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon.png" sizes="57x57" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPhone / iPod Touch -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-60@3x.png" sizes="180x180" rel="apple-touch-icon-precomposed">
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-60.png" sizes="60x60" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- Spotlight Icon -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-40.png" sizes="40x40" rel="apple-touch-icon-precomposed">
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-40@2x.png" sizes="80x80" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPhone Spotlight and Settings Icon -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-small.png" sizes="29x29" rel="apple-touch-icon-precomposed">
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-small@2x.png" sizes="58x58" rel="apple-touch-icon-precomposed">
|
||||||
|
<!-- iPad Spotlight and Settings Icon -->
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-50.png" sizes="50x50" rel="apple-touch-icon-precomposed">
|
||||||
|
<link href="interfaces/default/images/res/ios/icon-50@2x.png" sizes="100x100" rel="apple-touch-icon-precomposed">
|
||||||
|
|
||||||
|
<!-- STARTUP IMAGES -->
|
||||||
|
<!-- iPad retina portrait startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-Portrait@2x~ipad.png"
|
||||||
|
media="(device-width: 768px) and (device-height: 1024px)
|
||||||
|
and (-webkit-device-pixel-ratio: 2)
|
||||||
|
and (orientation: portrait)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPad retina landscape startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-Landscape@2x~ipad.png"
|
||||||
|
media="(device-width: 768px) and (device-height: 1024px)
|
||||||
|
and (-webkit-device-pixel-ratio: 2)
|
||||||
|
and (orientation: landscape)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPad non-retina portrait startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-Portrait~ipad.png"
|
||||||
|
media="(device-width: 768px) and (device-height: 1024px)
|
||||||
|
and (-webkit-device-pixel-ratio: 1)
|
||||||
|
and (orientation: portrait)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPad non-retina landscape startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-Landscape~ipad.png"
|
||||||
|
media="(device-width: 768px) and (device-height: 1024px)
|
||||||
|
and (-webkit-device-pixel-ratio: 1)
|
||||||
|
and (orientation: landscape)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPhone 6 Plus portrait startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-736h.png"
|
||||||
|
media="(device-width: 414px) and (device-height: 736px)
|
||||||
|
and (-webkit-device-pixel-ratio: 3)
|
||||||
|
and (orientation: portrait)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPhone 6 Plus landscape startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-Landscape-736h.png"
|
||||||
|
media="(device-width: 414px) and (device-height: 736px)
|
||||||
|
and (-webkit-device-pixel-ratio: 3)
|
||||||
|
and (orientation: landscape)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPhone 6 startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-667h.png"
|
||||||
|
media="(device-width: 375px) and (device-height: 667px)
|
||||||
|
and (-webkit-device-pixel-ratio: 2)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPhone 5 startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default-568h@2x~iphone5.jpg"
|
||||||
|
media="(device-width: 320px) and (device-height: 568px)
|
||||||
|
and (-webkit-device-pixel-ratio: 2)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPhone < 5 retina startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default@2x~iphone.png"
|
||||||
|
media="(device-width: 320px) and (device-height: 480px)
|
||||||
|
and (-webkit-device-pixel-ratio: 2)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
|
<!-- iPhone < 5 non-retina startup image -->
|
||||||
|
<link href="interfaces/default/images/res/screen/ios/Default~iphone.png"
|
||||||
|
media="(device-width: 320px) and (device-height: 480px)
|
||||||
|
and (-webkit-device-pixel-ratio: 1)"
|
||||||
|
rel="apple-touch-startup-image">
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="content">
|
<body class="content">
|
||||||
|
@ -69,37 +174,42 @@ from plexpy import version
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</li>
|
</li>
|
||||||
% if title=="Home":
|
% if title == "Home":
|
||||||
<li class="active"><a href="home"><i class="fa fa-lg fa-home"></i></a></li>
|
<li class="active"><a href="home"><i class="fa fa-lg fa-home"></i></a></li>
|
||||||
% else:
|
% else:
|
||||||
<li><a href="home"><i class="fa fa-lg fa-home"></i></a></li>
|
<li><a href="home"><i class="fa fa-lg fa-home"></i></a></li>
|
||||||
% endif
|
% endif
|
||||||
% if title=="Users" or title=="User":
|
% if title == "Libraries" or title == "Library" or title == "Info":
|
||||||
|
<li class="active"><a href="libraries">Libraries</a></li>
|
||||||
|
% else:
|
||||||
|
<li><a href="libraries">Libraries</a></li>
|
||||||
|
% endif
|
||||||
|
% if title == "Users" or title == "User":
|
||||||
<li class="active"><a href="users">Users</a></li>
|
<li class="active"><a href="users">Users</a></li>
|
||||||
% else:
|
% else:
|
||||||
<li><a href="users">Users</a></li>
|
<li><a href="users">Users</a></li>
|
||||||
% endif
|
% endif
|
||||||
% if title=="History":
|
% if title == "History":
|
||||||
<li class="active"><a href="history">History</a></li>
|
<li class="active"><a href="history">History</a></li>
|
||||||
% else:
|
% else:
|
||||||
<li><a href="history">History</a></li>
|
<li><a href="history">History</a></li>
|
||||||
% endif
|
% endif
|
||||||
% if title=="Graphs":
|
% if title == "Graphs":
|
||||||
<li class="active"><a href="graphs">Graphs</a></li>
|
<li class="active"><a href="graphs">Graphs</a></li>
|
||||||
% else:
|
% else:
|
||||||
<li><a href="graphs">Graphs</a></li>
|
<li><a href="graphs">Graphs</a></li>
|
||||||
% endif
|
% endif
|
||||||
% if title=="Synced Items":
|
% if title == "Synced Items":
|
||||||
<li class="active"><a href="sync">Synced Items</a></li>
|
<li class="active"><a href="sync">Synced Items</a></li>
|
||||||
% else:
|
% else:
|
||||||
<li><a href="sync">Synced Items</a></li>
|
<li><a href="sync">Synced Items</a></li>
|
||||||
% endif
|
% endif
|
||||||
% if title=="Log":
|
% if title == "Log":
|
||||||
<li class="active"><a href="logs">Logs</a></li>
|
<li class="active"><a href="logs">Logs</a></li>
|
||||||
% else:
|
% else:
|
||||||
<li><a href="logs">Logs</a></li>
|
<li><a href="logs">Logs</a></li>
|
||||||
% endif
|
% endif
|
||||||
% if title=="Settings":
|
% if title == "Settings":
|
||||||
<li class="active"><a href="settings">Settings</a></li>
|
<li class="active"><a href="settings">Settings</a></li>
|
||||||
% else:
|
% else:
|
||||||
<li><a href="settings">Settings</a></li>
|
<li><a href="settings">Settings</a></li>
|
||||||
|
@ -135,7 +245,7 @@ ${next.headerIncludes()}
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'post',
|
type: 'post',
|
||||||
url: 'search',
|
url: 'search',
|
||||||
data: { 'query': $('#query').val() }
|
data: { query: $('#query').val() }
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
|
@ -151,6 +261,21 @@ ${next.headerIncludes()}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
<script>
|
||||||
|
// Work around for iOS web app links opening in Safari
|
||||||
|
$(document).ready(function () {
|
||||||
|
if (("standalone" in window.navigator) && window.navigator.standalone) {
|
||||||
|
// For iOS Apps
|
||||||
|
$('a').on('click', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
var new_location = $(this).attr('href');
|
||||||
|
if (new_location != undefined && new_location.substr(0, 1) != '#' && $(this).attr('data-method') == undefined) {
|
||||||
|
window.location = new_location;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
${next.javascriptIncludes()}
|
${next.javascriptIncludes()}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -235,8 +235,8 @@ fieldset[disabled] .btn-bright:active,
|
||||||
.btn-bright.disabled.active,
|
.btn-bright.disabled.active,
|
||||||
.btn-bright[disabled].active,
|
.btn-bright[disabled].active,
|
||||||
fieldset[disabled] .btn-bright.active {
|
fieldset[disabled] .btn-bright.active {
|
||||||
background-color: #5cb85c;
|
background-color: #c9302c;
|
||||||
border-color: #4cae4c;
|
border-color: #ac2925;
|
||||||
}
|
}
|
||||||
.btn-bright .badge {
|
.btn-bright .badge {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
@ -498,6 +498,16 @@ textarea.form-control:focus {
|
||||||
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
}
|
}
|
||||||
|
.libraries-poster-face {
|
||||||
|
overflow: hidden;
|
||||||
|
float: left;
|
||||||
|
background-size: contain;
|
||||||
|
height: 40px;
|
||||||
|
width: 40px;
|
||||||
|
/*-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);*/
|
||||||
|
}
|
||||||
a .poster-face:hover,
|
a .poster-face:hover,
|
||||||
a .cover-face:hover,
|
a .cover-face:hover,
|
||||||
a .users-poster-face:hover {
|
a .users-poster-face:hover {
|
||||||
|
@ -1195,6 +1205,7 @@ a:hover .summary-poster-face-track .summary-poster-face-overlay span {
|
||||||
width: 250px;
|
width: 250px;
|
||||||
height: 1px;
|
height: 1px;
|
||||||
margin: 0 40px 20px 25px;
|
margin: 0 40px 20px 25px;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
.summary-content {
|
.summary-content {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -1218,6 +1229,20 @@ a:hover .summary-poster-face-track .summary-poster-face-overlay span {
|
||||||
margin-left: 2px;
|
margin-left: 2px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
.summary-content-media-info-wrapper {
|
||||||
|
width: 100%;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.summary-content-media-flag {
|
||||||
|
width: auto;
|
||||||
|
height: auto;
|
||||||
|
max-width: 75pt;
|
||||||
|
max-height: 15px;
|
||||||
|
margin: 0 5px;
|
||||||
|
}
|
||||||
.summary-content-summary {
|
.summary-content-summary {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
@ -1294,31 +1319,25 @@ a:hover .summary-poster-face-track .summary-poster-face-overlay span {
|
||||||
line-height: 18px;
|
line-height: 18px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
.rateit {
|
.star-rating {
|
||||||
display: -moz-inline-box;
|
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
-webkit-user-select: none;
|
font-size: 15px;
|
||||||
-khtml-user-select: none;
|
|
||||||
-moz-user-select: none;
|
|
||||||
-o-user-select: none;
|
|
||||||
-ms-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
-webkit-touch-callout: none;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
float: right;
|
|
||||||
margin-top: 3px;
|
margin-top: 3px;
|
||||||
height: 21px;
|
height: 21px;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
}
|
}
|
||||||
.rateit .rateit-range {
|
.star-rating .star-icon {
|
||||||
background: url(../images/star-gray-32.png);
|
width: auto;
|
||||||
background-size: contain;
|
margin-left: 2px;
|
||||||
height: 16px;
|
color: #F9AA03;
|
||||||
}
|
}
|
||||||
.rateit .rateit-selected {
|
.star-rating .star-icon-o {
|
||||||
background: url(../images/star-32.png);
|
width: auto;
|
||||||
background-size: contain;
|
margin-left: 2px;
|
||||||
height: 16px;
|
color: #999;
|
||||||
}
|
}
|
||||||
#children-list, #search-results-list {
|
#children-list, #search-results-list {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
@ -1654,7 +1673,6 @@ a:hover .item-children-poster {
|
||||||
}
|
}
|
||||||
.user-player-instance-box {
|
.user-player-instance-box {
|
||||||
float: left;
|
float: left;
|
||||||
width: 75px;
|
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
@ -1676,6 +1694,7 @@ a:hover .item-children-poster {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
width: 140px;
|
width: 140px;
|
||||||
margin-left: 10px;
|
margin-left: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
}
|
}
|
||||||
.user-player-instance-playcount h3 {
|
.user-player-instance-playcount h3 {
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
|
@ -1695,6 +1714,35 @@ a:hover .item-children-poster {
|
||||||
top: 15px;
|
top: 15px;
|
||||||
left: 0px;
|
left: 0px;
|
||||||
}
|
}
|
||||||
|
.library-info-poster-face {
|
||||||
|
float: left;
|
||||||
|
margin-top: 15px;
|
||||||
|
margin-right: 15px;
|
||||||
|
background-size: contain;
|
||||||
|
height: 80px;
|
||||||
|
width: 80px;
|
||||||
|
/*-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);*/
|
||||||
|
}
|
||||||
|
.library-user-instance-box {
|
||||||
|
float: left;
|
||||||
|
-webkit-border-radius: 50%;
|
||||||
|
-moz-border-radius: 50%;
|
||||||
|
border-radius: 50%;
|
||||||
|
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
background-size: contain;
|
||||||
|
position: relative;
|
||||||
|
height: 80px;
|
||||||
|
width: 80px;
|
||||||
|
}
|
||||||
|
.library-user-instance-box:hover {
|
||||||
|
-webkit-box-shadow: inset 0 0 0 2px #e9a049;
|
||||||
|
-moz-box-shadow: inset 0 0 0 2px #e9a049;
|
||||||
|
box-shadow: inset 0 0 0 2px #e9a049;
|
||||||
|
}
|
||||||
.home-platforms {
|
.home-platforms {
|
||||||
}
|
}
|
||||||
.home-platforms ul {
|
.home-platforms ul {
|
||||||
|
@ -1725,6 +1773,7 @@ a:hover .item-children-poster {
|
||||||
padding-left: 80px;
|
padding-left: 80px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 120px;
|
height: 120px;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.home-platforms-instance-name {
|
.home-platforms-instance-name {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
@ -2126,7 +2175,8 @@ a .home-platforms-instance-list-oval:hover,
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
.colvis-button-bar,
|
.colvis-button-bar,
|
||||||
.refresh-users-button {
|
.refresh-users-button,
|
||||||
|
.refresh-libraries-button {
|
||||||
float: right;
|
float: right;
|
||||||
}
|
}
|
||||||
.nav-settings,
|
.nav-settings,
|
||||||
|
@ -2325,6 +2375,9 @@ a .home-platforms-instance-list-oval:hover,
|
||||||
width: 250px;
|
width: 250px;
|
||||||
z-index: 9999;
|
z-index: 9999;
|
||||||
}
|
}
|
||||||
|
.dataTables_paginate li {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
.tooltip.top .tooltip-arrow {
|
.tooltip.top .tooltip-arrow {
|
||||||
border-top-color: #fff;
|
border-top-color: #fff;
|
||||||
}
|
}
|
||||||
|
@ -2342,42 +2395,52 @@ a .home-platforms-instance-list-oval:hover,
|
||||||
background: #fff;
|
background: #fff;
|
||||||
border: 0;
|
border: 0;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
border-radius: 2px;
|
||||||
}
|
}
|
||||||
.history-title .popover.right {
|
.history-thumbnail-popover {
|
||||||
margin-left: 12px;
|
z-index: 2;
|
||||||
z-index: 5;
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
}
|
}
|
||||||
.history-title .popover.right .popover-content {
|
.history-thumbnail-popover.popover.right {
|
||||||
padding: 5px 8px;
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
.history-thumbnail-popover .popover-content {
|
||||||
|
color: #000;
|
||||||
|
padding: 0;
|
||||||
}
|
}
|
||||||
.history-thumbnail {
|
.history-thumbnail {
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
width: 80px;
|
width: 80px;
|
||||||
|
-webkit-border-radius: 3px;
|
||||||
|
-moz-border-radius: 3px;
|
||||||
|
border-radius: 3px;
|
||||||
|
-webkit-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
-moz-box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
|
box-shadow: 0 0 4px rgba(0,0,0,.3),inset 0 0 0 1px rgba(255,255,255,.1);
|
||||||
}
|
}
|
||||||
.edit-user-toggles {
|
.edit-user-toggles,
|
||||||
|
.edit-library-toggles {
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
.edit-user-toggles > input[type='checkbox'] {
|
.edit-user-toggles > input[type='checkbox'],
|
||||||
|
.edit-library-toggles > input[type='checkbox'] {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.edit-user-toggles > input[type='checkbox'] + label {
|
.edit-user-toggles > input[type='checkbox'] + label,
|
||||||
|
.edit-library-toggles > input[type='checkbox'] + label {
|
||||||
color: #444;
|
color: #444;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.edit-user-toggles > input[type='checkbox']:checked + label {
|
.edit-user-toggles > input[type='checkbox']:checked + label,
|
||||||
|
.edit-library-toggles > input[type='checkbox']:checked + label {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
.edit-user-name > input[type='text'] {
|
.edit-user-name > input[type='text'] {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
.popover {
|
|
||||||
z-index: 2;
|
|
||||||
}
|
|
||||||
.popover .popover-content {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.noTransition
|
.noTransition
|
||||||
{
|
{
|
||||||
-moz-transition: none !important;
|
-moz-transition: none !important;
|
||||||
|
@ -2414,7 +2477,9 @@ a .home-platforms-instance-list-oval:hover,
|
||||||
left: 12px;
|
left: 12px;
|
||||||
}
|
}
|
||||||
#users-to-delete > li,
|
#users-to-delete > li,
|
||||||
#users-to-purge > li {
|
#users-to-purge > li,
|
||||||
|
#libraries-to-delete > li,
|
||||||
|
#libraries-to-purge > li {
|
||||||
color: #e9a049;
|
color: #e9a049;
|
||||||
}
|
}
|
||||||
#updatebar {
|
#updatebar {
|
||||||
|
@ -2464,9 +2529,8 @@ a .home-platforms-instance-list-oval:hover,
|
||||||
right: 0;
|
right: 0;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
overflow-x: hidden;
|
overflow: auto;
|
||||||
overflow-y: auto;
|
-webkit-overflow-scrolling: touch;
|
||||||
|
|
||||||
}
|
}
|
||||||
::-webkit-scrollbar {
|
::-webkit-scrollbar {
|
||||||
width: 15px;
|
width: 15px;
|
||||||
|
@ -2492,12 +2556,19 @@ a .home-platforms-instance-list-oval:hover,
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
table.display,
|
||||||
|
table.display tr.shown + tr table[id^='history_child'],
|
||||||
|
table.display tr.shown + tr table[id^='media_info_child'],
|
||||||
|
table.display tr.shown + tr table[id^='media_info_child'] tr.shown + tr table[id^='media_info_child'] {
|
||||||
|
table-layout: auto;
|
||||||
|
}
|
||||||
table.display tr.shown + tr div.slider {
|
table.display tr.shown + tr div.slider {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
table.display tr.shown + tr > td {
|
table.display tr.shown + tr > td {
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
padding-bottom: 0;
|
padding-bottom: 0;
|
||||||
|
padding-left: 0;
|
||||||
}
|
}
|
||||||
table.display tr.shown + tr:hover {
|
table.display tr.shown + tr:hover {
|
||||||
background-color: rgba(255,255,255,0);
|
background-color: rgba(255,255,255,0);
|
||||||
|
@ -2508,7 +2579,9 @@ table.display tr.shown + tr .pagination > .active > a,
|
||||||
table.display tr.shown + tr .pagination > .active > a:hover {
|
table.display tr.shown + tr .pagination > .active > a:hover {
|
||||||
color: #fff;
|
color: #fff;
|
||||||
}
|
}
|
||||||
table.display tr.shown + tr table[id^='history_child'] td:hover a {
|
table.display tr.shown + tr table[id^='history_child'] td:hover a,
|
||||||
|
table.display tr.shown + tr table[id^='media_info_child'] > tr > td:hover a,
|
||||||
|
table.display tr.shown + tr table[id^='media_info_child'] tr.shown + tr table[id^='media_info_child'] td:hover a {
|
||||||
color: #F9AA03;
|
color: #F9AA03;
|
||||||
}
|
}
|
||||||
table.display tr.shown + tr .pagination > .disabled > a {
|
table.display tr.shown + tr .pagination > .disabled > a {
|
||||||
|
@ -2519,14 +2592,22 @@ table.display tr.shown + tr .pagination > li > a:hover {
|
||||||
}
|
}
|
||||||
table[id^='history_child'] {
|
table[id^='history_child'] {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-left: -4px;
|
|
||||||
opacity: .6;
|
opacity: .6;
|
||||||
}
|
}
|
||||||
table[id^='history_child'] thead th {
|
table[id^='media_info_child'] {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
table[id^='history_child'] thead th,
|
||||||
|
table[id^='media_info_child'] thead th {
|
||||||
line-height: 0;
|
line-height: 0;
|
||||||
height: 0 !important;
|
height: 0 !important;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
table[id^='media_info_child'] table[id^='media_info_child'] thead th {
|
||||||
|
line-height: 25px;
|
||||||
|
height: 35px !important;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
#search_form {
|
#search_form {
|
||||||
width: 300px;
|
width: 300px;
|
||||||
padding: 8px 15px;
|
padding: 8px 15px;
|
||||||
|
@ -2560,7 +2641,14 @@ table[id^='history_child'] thead th {
|
||||||
-o-transition: background 0.3s;
|
-o-transition: background 0.3s;
|
||||||
transition: background 0.3s;
|
transition: background 0.3s;
|
||||||
}
|
}
|
||||||
|
#update_search_form div.input-group {
|
||||||
|
display: inline-table;
|
||||||
|
vertical-align: middle;
|
||||||
|
max-width: 250px;
|
||||||
|
}
|
||||||
|
#update_search_form #update_query {
|
||||||
|
margin: 5px 0 0 0.5em;
|
||||||
|
}
|
||||||
.notification-params {
|
.notification-params {
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
background-color: #282828;
|
background-color: #282828;
|
||||||
|
@ -2585,7 +2673,6 @@ table[id^='history_child'] thead th {
|
||||||
.notification-params tr:nth-child(even) td {
|
.notification-params tr:nth-child(even) td {
|
||||||
background-color: rgba(255,255,255,0.010);
|
background-color: rgba(255,255,255,0.010);
|
||||||
}
|
}
|
||||||
|
|
||||||
#days-selection label {
|
#days-selection label {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
|
@ -2594,3 +2681,36 @@ table[id^='history_child'] thead th {
|
||||||
width: 75px;
|
width: 75px;
|
||||||
height: 34px;
|
height: 34px;
|
||||||
}
|
}
|
||||||
|
.card-sortable {
|
||||||
|
height: 36px;
|
||||||
|
padding: 0 20px 0 0;
|
||||||
|
line-height: 34px;
|
||||||
|
cursor: move;
|
||||||
|
cursor: -webkit-grab;
|
||||||
|
cursor: grab;
|
||||||
|
border-bottom: 1px solid #232323;
|
||||||
|
-webkit-user-select: none;
|
||||||
|
-moz-user-select: none;
|
||||||
|
-ms-user-select: none;
|
||||||
|
-o-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
.card {
|
||||||
|
position: relative;
|
||||||
|
background-color: #282828;
|
||||||
|
border-top: 1px solid #2d2d2d;
|
||||||
|
}
|
||||||
|
.card label {
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
.card-handle {
|
||||||
|
display: inline-block;
|
||||||
|
width: 30px;
|
||||||
|
margin-right: 10px;
|
||||||
|
color: #444;
|
||||||
|
text-align: center;
|
||||||
|
background-color: #2f2f2f;
|
||||||
|
}
|
||||||
|
.selectize-input input[type='text'] {
|
||||||
|
height: 20px;
|
||||||
|
}
|
|
@ -69,12 +69,12 @@ DOCUMENTATION :: END
|
||||||
% for a in data['sessions']:
|
% for a in data['sessions']:
|
||||||
<div class="dashboard-instance" id="instance-${a['session_key']}">
|
<div class="dashboard-instance" id="instance-${a['session_key']}">
|
||||||
% if a['media_type'] == 'movie' or a['media_type'] == 'episode' or a['media_type'] == 'track':
|
% if a['media_type'] == 'movie' or a['media_type'] == 'episode' or a['media_type'] == 'track':
|
||||||
<a href="info?item_id=${a['rating_key']}">
|
<a href="info?rating_key=${a['rating_key']}">
|
||||||
% endif
|
% endif
|
||||||
<div class="dashboard-activity-poster">
|
<div class="dashboard-activity-poster">
|
||||||
% if a['media_type'] == 'movie' and not a['indexes']:
|
% if (a['media_type'] == 'movie' and not a['indexes']) or (a['indexes'] and not a['view_offset']):
|
||||||
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${a['art']}&width=500&height=280);"></div>
|
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${a['art']}&width=500&height=280);"></div>
|
||||||
% elif a['media_type'] == 'episode' and not a['indexes']:
|
% elif (a['media_type'] == 'episode' and not a['indexes']) or (a['indexes'] and not a['view_offset']):
|
||||||
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${a['art']}&width=500&height=280);"></div>
|
<div class="dashboard-activity-poster-face" style="background-image: url(pms_image_proxy?img=${a['art']}&width=500&height=280);"></div>
|
||||||
% elif a['indexes']:
|
% elif a['indexes']:
|
||||||
<div class="dashboard-activity-poster-face bif" style="background-image: url(pms_image_proxy?img=${a['bif_thumb']}&width=500&height=280); display: none;"></div>
|
<div class="dashboard-activity-poster-face bif" style="background-image: url(pms_image_proxy?img=${a['bif_thumb']}&width=500&height=280); display: none;"></div>
|
||||||
|
@ -227,13 +227,13 @@ DOCUMENTATION :: END
|
||||||
<i class="fa fa-spinner"></i>
|
<i class="fa fa-spinner"></i>
|
||||||
% endif
|
% endif
|
||||||
% if a['media_type'] == 'episode':
|
% if a['media_type'] == 'episode':
|
||||||
<a href="info?item_id=${a['rating_key']}" title="${a['grandparent_title']} - ${a['title']}">${a['grandparent_title']} - ${a['title']}</a>
|
<a href="info?rating_key=${a['rating_key']}" title="${a['grandparent_title']} - ${a['title']}">${a['grandparent_title']} - ${a['title']}</a>
|
||||||
% elif a['media_type'] == 'movie':
|
% elif a['media_type'] == 'movie':
|
||||||
<a href="info?item_id=${a['rating_key']}" title="${a['title']}">${a['title']}</a>
|
<a href="info?rating_key=${a['rating_key']}" title="${a['title']}">${a['title']}</a>
|
||||||
% elif a['media_type'] == 'clip':
|
% elif a['media_type'] == 'clip':
|
||||||
<span title="${a['title']}">${a['title']}</span>
|
<span title="${a['title']}">${a['title']}</span>
|
||||||
% elif a['media_type'] == 'track':
|
% elif a['media_type'] == 'track':
|
||||||
<a href="info?item_id=${a['rating_key']}" title="${a['grandparent_title']} - ${a['title']}">${a['grandparent_title']} - ${a['title']}</a>
|
<a href="info?rating_key=${a['rating_key']}" title="${a['grandparent_title']} - ${a['title']}">${a['grandparent_title']} - ${a['title']}</a>
|
||||||
% elif a['media_type'] == 'photo':
|
% elif a['media_type'] == 'photo':
|
||||||
<span title="${a['parent_title']}">${a['parent_title']}</span>
|
<span title="${a['parent_title']}">${a['parent_title']}</span>
|
||||||
% else:
|
% else:
|
||||||
|
@ -246,7 +246,7 @@ DOCUMENTATION :: END
|
||||||
% elif a['media_type'] == 'movie':
|
% elif a['media_type'] == 'movie':
|
||||||
<span title="${a['year']}">${a['year']}</span>
|
<span title="${a['year']}">${a['year']}</span>
|
||||||
% elif a['media_type'] == 'track':
|
% elif a['media_type'] == 'track':
|
||||||
<a href="info?item_id=${a['parent_rating_key']}" title="${a['parent_title']}">${a['parent_title']}</a>
|
<a href="info?rating_key=${a['parent_rating_key']}" title="${a['parent_title']}">${a['parent_title']}</a>
|
||||||
% elif a['media_type'] == 'photo':
|
% elif a['media_type'] == 'photo':
|
||||||
<span title="${a['title']}">${a['title']}</span>
|
<span title="${a['title']}">${a['title']}</span>
|
||||||
% else:
|
% else:
|
||||||
|
|
179
data/interfaces/default/edit_library.html
Normal file
|
@ -0,0 +1,179 @@
|
||||||
|
<%doc>
|
||||||
|
USAGE DOCUMENTATION :: PLEASE LEAVE THIS AT THE TOP OF THIS FILE
|
||||||
|
|
||||||
|
For Mako templating syntax documentation please visit: http://docs.makotemplates.org/en/latest/
|
||||||
|
|
||||||
|
Filename: edit_library.html
|
||||||
|
Version: 0.1
|
||||||
|
Variable names: data [list]
|
||||||
|
|
||||||
|
data :: Usable parameters
|
||||||
|
|
||||||
|
== Global keys ==
|
||||||
|
section_id Returns the library id of the library.
|
||||||
|
section_name Returns the name of the library.
|
||||||
|
section_type Returns the type of the library.
|
||||||
|
library_thumb Returns the thumbnail for the library.
|
||||||
|
custom_thumb Returns the custom thumbnail for the library.
|
||||||
|
library_art Returns the artwork for the library.
|
||||||
|
count Returns the item count for the library.
|
||||||
|
parent_count Returns the parent item count for the library.
|
||||||
|
child_count Returns the child item count for the library.
|
||||||
|
do_notify Returns bool value for whether to send notifications for the library.
|
||||||
|
keep_history Returns bool value for whether to keep history for the library.
|
||||||
|
|
||||||
|
DOCUMENTATION :: END
|
||||||
|
</%doc>
|
||||||
|
|
||||||
|
<%!
|
||||||
|
from plexpy import helpers
|
||||||
|
%>
|
||||||
|
|
||||||
|
% if data != None:
|
||||||
|
<div class="modal-dialog" role="document">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-remove"></i></button>
|
||||||
|
<h4 class="modal-title">Edit library <strong>${data['section_name']}</strong></h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" id="modal-text">
|
||||||
|
<fieldset>
|
||||||
|
<div class="form-group">
|
||||||
|
<label for="profile_url">Library Picture URL</label>
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-8">
|
||||||
|
<input type="text" class="form-control" id="custom_thumb_url" name="custom_thumb_url" value="${data['library_thumb']}">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<p class="help-block">Change the library's picture in PlexPy. To reset to default, leave this field empty and save.</p>
|
||||||
|
</div>
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="do_notify" name="do_notify" value="1" ${helpers.checked(data['do_notify'])}> Enable notifications
|
||||||
|
</label>
|
||||||
|
<p class="help-block">Uncheck this if you do not want to receive notifications for this library's activity.</p>
|
||||||
|
</div>
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="keep_history" name="keep_history" value="1" ${helpers.checked(data['keep_history'])}> Keep history
|
||||||
|
</label>
|
||||||
|
<p class="help-block">Uncheck this if you do not want to keep any history on this library's activity.</p>
|
||||||
|
</div>
|
||||||
|
<div class="checkbox">
|
||||||
|
<label>
|
||||||
|
<input type="checkbox" id="do_notify_created" name="do_notify_created" value="1" ${helpers.checked(data['do_notify_created'])}> Enable recently added notifications
|
||||||
|
</label>
|
||||||
|
<p class="help-block">Uncheck this if you do not want to receive recently added notifications for this library.</p>
|
||||||
|
</div>
|
||||||
|
% if data['section_id']:
|
||||||
|
<div class="form-group">
|
||||||
|
<button class="btn btn-danger" id="delete-all-history">Purge</button>
|
||||||
|
<p class="help-block">DANGER ZONE! Click the purge button to remove all history logged for this library. This is permanent!</p>
|
||||||
|
</div>
|
||||||
|
% endif
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<div>
|
||||||
|
<span id="edit-library-status-message"></span>
|
||||||
|
<input type="button" id="save_library" class="btn btn-bright" value="Save">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="confirm-modal-purge" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="confirm-modal-purge">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content">
|
||||||
|
<div class="modal-header">
|
||||||
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-remove"></i></button>
|
||||||
|
<h4 class="modal-title" id="myModalLabel">Confirm Purge</h4>
|
||||||
|
</div>
|
||||||
|
<div class="modal-body" style="text-align: center;">
|
||||||
|
<p>Are you REALLY sure you want to purge all history for this library?</p>
|
||||||
|
<p>This is permanent and cannot be undone!</p>
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer">
|
||||||
|
<button type="button" class="btn btn-dark" data-dismiss="modal">Cancel</button>
|
||||||
|
<button type="button" class="btn btn-danger btn-ok" data-dismiss="modal" id="confirm-purge">Purge</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script>
|
||||||
|
// Save library options
|
||||||
|
$("#save_library").on('click', function () {
|
||||||
|
var custom_thumb = $("#custom_thumb_url").val();
|
||||||
|
var do_notify = 0;
|
||||||
|
var do_notify_created = 0;
|
||||||
|
var keep_history = 0;
|
||||||
|
if ($("#do_notify").is(":checked")) {
|
||||||
|
do_notify = 1;
|
||||||
|
}
|
||||||
|
if ($("#do_notify_created").is(":checked")) {
|
||||||
|
do_notify_created = 1;
|
||||||
|
}
|
||||||
|
if ($("#keep_history").is(":checked")) {
|
||||||
|
keep_history = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: 'edit_library',
|
||||||
|
data: {
|
||||||
|
section_id: '${data["section_id"]}',
|
||||||
|
custom_thumb: custom_thumb,
|
||||||
|
do_notify: do_notify,
|
||||||
|
do_notify_created: do_notify_created,
|
||||||
|
keep_history: keep_history
|
||||||
|
},
|
||||||
|
cache: false,
|
||||||
|
async: true,
|
||||||
|
success: function (data) {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$("#delete-all-history").on('click', function() {
|
||||||
|
$('#confirm-modal-purge').modal();
|
||||||
|
$('#confirm-modal-purge').one('click', '#confirm-purge', function () {
|
||||||
|
$.ajax({
|
||||||
|
url: 'delete_all_library_history',
|
||||||
|
data: { section_id: '${data["section_id"]}' },
|
||||||
|
cache: false,
|
||||||
|
async: true,
|
||||||
|
success: function(data) {
|
||||||
|
location.reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
// Move #confirm-modal to parent container
|
||||||
|
if (!($('#edit-library-modal').next().is('#confirm-modal-purge'))) {
|
||||||
|
$('#confirm-modal-purge').appendTo($('#edit-library-modal').parent());
|
||||||
|
}
|
||||||
|
$('#edit-library-modal > #confirm-modal-purge').remove();
|
||||||
|
|
||||||
|
$('#edit-library-modal').css('z-index', '1050');
|
||||||
|
$('.modal-backdrop').not('.modal-backdrop-stack').css('z-index', '1049');
|
||||||
|
$('.modal-backdrop').not('.modal-backdrop-stack').addClass('modal-backdrop-stack');
|
||||||
|
|
||||||
|
$('#confirm-modal-purge').on('show.bs.modal', function () {
|
||||||
|
// Fix position to match parent modal
|
||||||
|
var currentPadding = parseInt($('body').css('padding-right'));
|
||||||
|
$(this).children('.modal-dialog').css('left', -currentPadding/2);
|
||||||
|
$('#edit-library-modal').css('overflow-y', 'hidden');
|
||||||
|
});
|
||||||
|
$('#confirm-modal-purge').on('shown.bs.modal', function () {
|
||||||
|
$(this).css('z-index', '1060');
|
||||||
|
$('.modal-backdrop').not('.modal-backdrop-stack').css('z-index', '1059');
|
||||||
|
$('.modal-backdrop').not('.modal-backdrop-stack').addClass('modal-backdrop-stack');
|
||||||
|
});
|
||||||
|
$('#confirm-modal-purge').on('hidden.bs.modal', function () {
|
||||||
|
$('body').addClass('modal-open');
|
||||||
|
$('#edit-library-modal').css('overflow-y', 'auto');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
% endif
|
|
@ -10,21 +10,30 @@ Variable names: data [list]
|
||||||
data :: Usable parameters
|
data :: Usable parameters
|
||||||
|
|
||||||
== Global keys ==
|
== Global keys ==
|
||||||
user Return the real Plex username
|
user_id Returns the user id of the user.
|
||||||
user_id Return the Plex user_id
|
username Returns the user's username.
|
||||||
friendly_name Returns the friendly edited Plex username
|
friendly_name Returns the friendly name of the user.
|
||||||
do_notify Returns bool value for whether the user should trigger notifications
|
email Returns the user's email address.
|
||||||
keep_history Returns bool value for whether the user's activity should be logged
|
user_thumb Returns the thumbnail for the user.
|
||||||
|
is_home_user Returns bool value for whether the user is part of a Plex Home.
|
||||||
|
is_allow_sync Returns bool value for whether the user has sync rights.
|
||||||
|
is_restricted Returns bool value for whether the user account is restricted.
|
||||||
|
do_notify Returns bool value for whether to send notifications for the user.
|
||||||
|
keep_history Returns bool value for whether to keep history for the user.
|
||||||
|
|
||||||
DOCUMENTATION :: END
|
DOCUMENTATION :: END
|
||||||
</%doc>
|
</%doc>
|
||||||
|
|
||||||
% if data is not None:
|
<%!
|
||||||
|
from plexpy import helpers
|
||||||
|
%>
|
||||||
|
|
||||||
|
% if data != None:
|
||||||
<div class="modal-dialog" role="document">
|
<div class="modal-dialog" role="document">
|
||||||
<div class="modal-content">
|
<div class="modal-content">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-remove"></i></button>
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="fa fa-remove"></i></button>
|
||||||
<h4 class="modal-title">Edit user <strong>${data['user']}</strong></h4>
|
<h4 class="modal-title">Edit user <strong>${data['username']}</strong></h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body" id="modal-text">
|
<div class="modal-body" id="modal-text">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
|
@ -41,22 +50,22 @@ DOCUMENTATION :: END
|
||||||
<label for="profile_url">Profile Picture URL</label>
|
<label for="profile_url">Profile Picture URL</label>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
<input type="text" class="form-control" id="profile_url" name="profile_url" value="${data['thumb']}">
|
<input type="text" class="form-control" id="custom_avatar_url" name="custom_avatar_url" value="${data['user_thumb']}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="help-block">Change the users profile picture in PlexPy. To reset to default, leave this field empty and save then perform a user refresh.</p>
|
<p class="help-block">Change the users profile picture in PlexPy. To reset to default, leave this field empty and save.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="do_notify" name="do_notify" value="1" ${data['do_notify']}> Enable notifications
|
<input type="checkbox" id="do_notify" name="do_notify" value="1" ${helpers.checked(data['do_notify'])}> Enable notifications
|
||||||
</label>
|
</label>
|
||||||
<p class="help-block">Uncheck this if you do not want to receive notifications for this user's activity.</p>
|
<p class="help-block">Uncheck this if you do not want to receive notifications for this user's activity.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="checkbox">
|
<div class="checkbox">
|
||||||
<label>
|
<label>
|
||||||
<input type="checkbox" id="keep_history" name="keep_history" value="1" ${data['keep_history']}> Keep history
|
<input type="checkbox" id="keep_history" name="keep_history" value="1" ${helpers.checked(data['keep_history'])}> Keep history
|
||||||
</label>
|
</label>
|
||||||
<p class="help-block">Uncheck this if you do not want this keep any history on this user's activity.</p>
|
<p class="help-block">Uncheck this if you do not want to keep any history on this user's activity.</p>
|
||||||
</div>
|
</div>
|
||||||
% if data['user_id']:
|
% if data['user_id']:
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
|
@ -69,7 +78,7 @@ DOCUMENTATION :: END
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
<div>
|
<div>
|
||||||
<span id="edit-user-status-message"></span>
|
<span id="edit-user-status-message"></span>
|
||||||
<input type="button" id="save_user_name" class="btn btn-bright" value="Save">
|
<input type="button" id="save_user" class="btn btn-bright" value="Save">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -93,10 +102,10 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
// Set new friendly name
|
// Set user options
|
||||||
$("#save_user_name").click(function() {
|
$("#save_user").on('click', function () {
|
||||||
var friendly_name = $("#friendly_name").val();
|
var friendly_name = $("#friendly_name").val();
|
||||||
var thumb = $("#profile_url").val();
|
var custom_thumb = $("#custom_avatar_url").val();
|
||||||
var do_notify = 0;
|
var do_notify = 0;
|
||||||
var keep_history = 0;
|
var keep_history = 0;
|
||||||
if ($("#do_notify").is(":checked")) {
|
if ($("#do_notify").is(":checked")) {
|
||||||
|
@ -106,35 +115,21 @@ DOCUMENTATION :: END
|
||||||
keep_history = 1;
|
keep_history = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
% if data['user_id']:
|
$.ajax({
|
||||||
$.ajax({
|
url: 'edit_user',
|
||||||
url: 'edit_user',
|
data: {
|
||||||
data: {user_id: '${data['user_id']}', friendly_name: friendly_name, do_notify: do_notify, keep_history: keep_history, thumb: thumb},
|
user_id: '${data["user_id"]}',
|
||||||
cache: false,
|
friendly_name: friendly_name,
|
||||||
async: true,
|
custom_thumb: custom_thumb,
|
||||||
success: function(data) {
|
do_notify: do_notify,
|
||||||
$("#edit-user-status-message").html(data);
|
keep_history: keep_history
|
||||||
if ($.trim(friendly_name) !== '') {
|
},
|
||||||
$('.set-username').html(document.createTextNode(friendly_name));
|
cache: false,
|
||||||
}
|
async: true,
|
||||||
$("#user-profile-thumb").attr('src', thumb);
|
success: function(data) {
|
||||||
}
|
location.reload();
|
||||||
});
|
}
|
||||||
% else:
|
});
|
||||||
$.ajax({
|
|
||||||
url: 'edit_user',
|
|
||||||
data: {user: '${data['user']}', friendly_name: friendly_name, do_notify: do_notify, keep_history: keep_history, thumb: thumb},
|
|
||||||
cache: false,
|
|
||||||
async: true,
|
|
||||||
success: function(data) {
|
|
||||||
$("#edit-user-status-message").html(data);
|
|
||||||
if ($.trim(friendly_name) !== '') {
|
|
||||||
$(".set-username").html(friendly_name);
|
|
||||||
}
|
|
||||||
$("#user-profile-thumb").attr('src', thumb);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
% endif
|
|
||||||
});
|
});
|
||||||
|
|
||||||
$("#delete-all-history").on('click', function() {
|
$("#delete-all-history").on('click', function() {
|
||||||
|
@ -142,7 +137,7 @@ DOCUMENTATION :: END
|
||||||
$('#confirm-modal').one('click', '#confirm-purge', function () {
|
$('#confirm-modal').one('click', '#confirm-purge', function () {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: 'delete_all_user_history',
|
url: 'delete_all_user_history',
|
||||||
data: {user_id: '${data['user_id']}'},
|
data: { user_id: '${data["user_id"]}' },
|
||||||
cache: false,
|
cache: false,
|
||||||
async: true,
|
async: true,
|
||||||
success: function(data) {
|
success: function(data) {
|
||||||
|
@ -155,7 +150,8 @@ DOCUMENTATION :: END
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
// Move #confirm-modal to parent container
|
// Move #confirm-modal to parent container
|
||||||
if(!($('#edit-user-modal').next().is('#confirm-modal'))) {
|
if(!($('#edit-user-modal').next().is('#confirm-modal'))) {
|
||||||
$('#confirm-modal').appendTo($('#edit-user-modal').parent()); }
|
$('#confirm-modal').appendTo($('#edit-user-modal').parent());
|
||||||
|
}
|
||||||
$('#edit-user-modal > #confirm-modal').remove();
|
$('#edit-user-modal > #confirm-modal').remove();
|
||||||
|
|
||||||
$('#edit-user-modal').css('z-index', '1050');
|
$('#edit-user-modal').css('z-index', '1050');
|
||||||
|
@ -179,5 +175,4 @@ DOCUMENTATION :: END
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
% endif
|
% endif
|
|
@ -25,18 +25,18 @@
|
||||||
<table class="display" id="history_table" width="100%">
|
<table class="display" id="history_table" width="100%">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th align='left' id="delete_row">Delete</th>
|
<th align="left" id="delete_row">Delete</th>
|
||||||
<th align='left' id="time">Time</th>
|
<th align="left" id="time">Time</th>
|
||||||
<th align='left' id="friendly_name">User</th>
|
<th align="left" id="friendly_name">User</th>
|
||||||
<th align='left' id="ip_address">IP Address</th>
|
<th align="left" id="ip_address">IP Address</th>
|
||||||
<th align='left' id="platform">Platform</th>
|
<th align="left" id="platform">Platform</th>
|
||||||
<th align='left' id="device">Player</th>
|
<th align="left" id="device">Player</th>
|
||||||
<th align='left' id="title">Title</th>
|
<th align="left" id="title">Title</th>
|
||||||
<th align='left' id="started">Started</th>
|
<th align="left" id="started">Started</th>
|
||||||
<th align='left' id="paused_counter">Paused</th>
|
<th align="left" id="paused_counter">Paused</th>
|
||||||
<th align='left' id="stopped">Stopped</th>
|
<th align="left" id="stopped">Stopped</th>
|
||||||
<th align='left' id="duration">Duration</th>
|
<th align="left" id="duration">Duration</th>
|
||||||
<th align='left' id="percent_complete"></th>
|
<th align="left" id="percent_complete"></th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -83,8 +83,8 @@
|
||||||
type: 'post',
|
type: 'post',
|
||||||
data: function (d) {
|
data: function (d) {
|
||||||
return {
|
return {
|
||||||
'json_data': JSON.stringify(d),
|
json_data: JSON.stringify(d),
|
||||||
'media_type': media_type
|
media_type: media_type
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,11 +13,11 @@
|
||||||
<table class="display" id="history_table" width="100%">
|
<table class="display" id="history_table" width="100%">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th align='left' id="started">Started</th>
|
<th align="left" id="started">Started</th>
|
||||||
<th align='left' id="stopped">Stopped</th>
|
<th align="left" id="stopped">Stopped</th>
|
||||||
<th align='left' id="friendly_name">User</th>
|
<th align="left" id="friendly_name">User</th>
|
||||||
<th align='left' id="player">Player</th>
|
<th align="left" id="player">Player</th>
|
||||||
<th align='left' id="title">Title</th>
|
<th align="left" id="title">Title</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
@ -34,13 +34,14 @@
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
$('#date-header').html(moment('${data}','YYYY-MM-DD').format('ddd MMM Do YYYY'));
|
$('#date-header').html(moment('${data}','YYYY-MM-DD').format('ddd MMM Do YYYY'));
|
||||||
history_table_modal_options.ajax = {
|
history_table_modal_options.ajax = {
|
||||||
"url": "get_history",
|
url: 'get_history',
|
||||||
type: "post",
|
type: 'post',
|
||||||
data: function ( d ) {
|
data: function ( d ) {
|
||||||
return { 'json_data': JSON.stringify( d ),
|
return {
|
||||||
'grouping': false,
|
json_data: JSON.stringify(d),
|
||||||
'start_date': '${data}'
|
grouping: false,
|
||||||
};
|
start_date: '${data}'
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,8 +70,8 @@ DOCUMENTATION :: END
|
||||||
%>
|
%>
|
||||||
|
|
||||||
% if data:
|
% if data:
|
||||||
% if data[0]['stat_id']:
|
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
|
% if any(top_stat['rows'] for top_stat in data):
|
||||||
% for top_stat in data:
|
% for top_stat in data:
|
||||||
% if top_stat['stat_id'] == 'top_tv' and top_stat['rows']:
|
% if top_stat['stat_id'] == 'top_tv' and top_stat['rows']:
|
||||||
<div class="home-platforms-instance">
|
<div class="home-platforms-instance">
|
||||||
|
@ -82,7 +82,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
<h4>
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
@ -94,7 +94,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
% if top_stat['rows'][0]['grandparent_thumb']:
|
% if top_stat['rows'][0]['grandparent_thumb']:
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -105,18 +105,18 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
<h5>
|
<h5>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
${top_stat['rows'][loop.index]['title']}
|
${top_stat['rows'][loop.index]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h5>
|
||||||
|
@ -130,7 +130,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
||||||
<div class="home-platforms-instance-list-poster">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -162,7 +162,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
<h4>
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
@ -170,7 +170,7 @@ DOCUMENTATION :: END
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
% if top_stat['rows'][0]['grandparent_thumb'] != '':
|
% if top_stat['rows'][0]['grandparent_thumb'] != '':
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -181,18 +181,18 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
<h5>
|
<h5>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
${top_stat['rows'][loop.index]['title']}
|
${top_stat['rows'][loop.index]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h5>
|
||||||
|
@ -202,7 +202,7 @@ DOCUMENTATION :: END
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
||||||
<div class="home-platforms-instance-list-poster">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -234,7 +234,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
<h4>
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
@ -246,7 +246,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
% if top_stat['rows'][0]['thumb']:
|
% if top_stat['rows'][0]['thumb']:
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -257,18 +257,18 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
<h5>
|
<h5>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
${top_stat['rows'][loop.index]['title']}
|
${top_stat['rows'][loop.index]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h5>
|
||||||
|
@ -282,7 +282,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
% if top_stat['rows'][loop.index]['thumb']:
|
% if top_stat['rows'][loop.index]['thumb']:
|
||||||
<div class="home-platforms-instance-list-poster">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -314,7 +314,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
<h4>
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
@ -322,7 +322,7 @@ DOCUMENTATION :: END
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
% if top_stat['rows'][0]['thumb']:
|
% if top_stat['rows'][0]['thumb']:
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -333,18 +333,18 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
<h5>
|
<h5>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
${top_stat['rows'][loop.index]['title']}
|
${top_stat['rows'][loop.index]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h5>
|
||||||
|
@ -354,7 +354,7 @@ DOCUMENTATION :: END
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
% if top_stat['rows'][loop.index]['thumb']:
|
% if top_stat['rows'][loop.index]['thumb']:
|
||||||
<div class="home-platforms-instance-list-poster">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -386,7 +386,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
<h4>
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
@ -398,7 +398,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
% if top_stat['rows'][0]['grandparent_thumb']:
|
% if top_stat['rows'][0]['grandparent_thumb']:
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
||||||
|
@ -409,18 +409,18 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
<h5>
|
<h5>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
${top_stat['rows'][loop.index]['title']}
|
${top_stat['rows'][loop.index]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h5>
|
||||||
|
@ -434,7 +434,7 @@ DOCUMENTATION :: END
|
||||||
% endif
|
% endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
||||||
<div class="home-platforms-instance-list-poster">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
||||||
|
@ -466,7 +466,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-playcount">
|
<div class="home-platforms-instance-playcount">
|
||||||
<h4>
|
<h4>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
@ -474,7 +474,7 @@ DOCUMENTATION :: END
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
% if top_stat['rows'][0]['grandparent_thumb'] != '':
|
% if top_stat['rows'][0]['grandparent_thumb'] != '':
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
||||||
|
@ -485,18 +485,18 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
<h5>
|
<h5>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
${top_stat['rows'][loop.index]['title']}
|
${top_stat['rows'][loop.index]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h5>
|
||||||
|
@ -506,7 +506,7 @@ DOCUMENTATION :: END
|
||||||
<p> users</p>
|
<p> users</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?item_id=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
% if top_stat['rows'][loop.index]['grandparent_thumb']:
|
||||||
<div class="home-platforms-instance-list-poster">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['grandparent_thumb']}&width=300&height=300&fallback=poster);"></div>
|
||||||
|
@ -569,13 +569,13 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
|
@ -647,13 +647,13 @@ DOCUMENTATION :: END
|
||||||
$("#platform-stat").html("<div class='home-platforms-instance-box' style='background-image: url(" + getPlatformImagePath('${top_stat['rows'][0]['platform_type']}') + ");'>");
|
$("#platform-stat").html("<div class='home-platforms-instance-box' style='background-image: url(" + getPlatformImagePath('${top_stat['rows'][0]['platform_type']}') + ");'>");
|
||||||
</script>
|
</script>
|
||||||
</div>
|
</div>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
|
@ -696,7 +696,7 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
<div class="home-platforms-instance-last-user">
|
<div class="home-platforms-instance-last-user">
|
||||||
<h4>
|
<h4>
|
||||||
<a href="info?source=history&item_id=${top_stat['rows'][0]['row_id']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?source=history&rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
${top_stat['rows'][0]['title']}
|
${top_stat['rows'][0]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h4>
|
</h4>
|
||||||
|
@ -718,7 +718,7 @@ DOCUMENTATION :: END
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?source=history&item_id=${top_stat['rows'][0]['row_id']}" title="${top_stat['rows'][0]['title']}">
|
<a href="info?source=history&rating_key=${top_stat['rows'][0]['rating_key']}" title="${top_stat['rows'][0]['title']}">
|
||||||
% if top_stat['rows'][0]['thumb']:
|
% if top_stat['rows'][0]['thumb']:
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][0]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
|
@ -729,18 +729,18 @@ DOCUMENTATION :: END
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
</a>
|
</a>
|
||||||
%if len(top_stat['rows']) > 1:
|
% if len(top_stat['rows']) > 1:
|
||||||
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<div class="slider">
|
<div class="slider">
|
||||||
<div class="home-platforms-instance-list">
|
<div class="home-platforms-instance-list">
|
||||||
% for row in top_stat['rows']:
|
% for row in top_stat['rows']:
|
||||||
%if loop.index > 0:
|
% if loop.index > 0:
|
||||||
<li>
|
<li>
|
||||||
<div class="home-platforms-instance-list-info">
|
<div class="home-platforms-instance-list-info">
|
||||||
<div class="home-platforms-instance-list-name">
|
<div class="home-platforms-instance-list-name">
|
||||||
<h5>
|
<h5>
|
||||||
<a href="info?source=history&item_id=${top_stat['rows'][loop.index]['row_id']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?source=history&rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
${top_stat['rows'][loop.index]['title']}
|
${top_stat['rows'][loop.index]['title']}
|
||||||
</a>
|
</a>
|
||||||
</h5>
|
</h5>
|
||||||
|
@ -764,13 +764,13 @@ DOCUMENTATION :: END
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<a href="info?source=history&item_id=${top_stat['rows'][loop.index]['row_id']}" title="${top_stat['rows'][loop.index]['title']}">
|
<a href="info?source=history&rating_key=${top_stat['rows'][loop.index]['rating_key']}" title="${top_stat['rows'][loop.index]['title']}">
|
||||||
% if top_stat['rows'][loop.index]['thumb']:
|
% if top_stat['rows'][loop.index]['thumb']:
|
||||||
<div class="home-platforms-instance-list-poster">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(pms_image_proxy?img=${top_stat['rows'][loop.index]['thumb']}&width=300&height=450&fallback=poster);"></div>
|
||||||
</div>
|
</div>
|
||||||
% else:
|
% else:
|
||||||
<div class="home-platforms-instance-poster2">
|
<div class="home-platforms-instance-list-poster">
|
||||||
<div class="home-platforms-list-poster-face" style="background-image: url(interfaces/default/images/poster.png);"></div>
|
<div class="home-platforms-list-poster-face" style="background-image: url(interfaces/default/images/poster.png);"></div>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
|
@ -809,10 +809,52 @@ DOCUMENTATION :: END
|
||||||
<div class="home-platforms-instance-poster">
|
<div class="home-platforms-instance-poster">
|
||||||
<div class="home-platforms-instance-box" style="background-image: url(interfaces/default/images/home-stat_most-concurrent.png);"></div>
|
<div class="home-platforms-instance-box" style="background-image: url(interfaces/default/images/home-stat_most-concurrent.png);"></div>
|
||||||
</div>
|
</div>
|
||||||
|
% if len(top_stat['rows']) > 1:
|
||||||
|
<div class="home-platforms-instance-list-chevron"><i class="fa fa-chevron-down"></i></div>
|
||||||
|
<ul class="list-unstyled">
|
||||||
|
<div class="slider">
|
||||||
|
<div class="home-platforms-instance-list">
|
||||||
|
% for row in top_stat['rows']:
|
||||||
|
% if loop.index > 0:
|
||||||
|
<li>
|
||||||
|
<div class="home-platforms-instance-list-info">
|
||||||
|
<div class="home-platforms-instance-list-name">
|
||||||
|
<h5>
|
||||||
|
${top_stat['rows'][loop.index]['title']}
|
||||||
|
</h5>
|
||||||
|
</div>
|
||||||
|
<div class="home-platforms-instance-list-playcount">
|
||||||
|
<h3>${top_stat['rows'][loop.index]['count']}</h3>
|
||||||
|
<p> streams
|
||||||
|
% if top_stat['rows'][loop.index]['started']:
|
||||||
|
- <span id="most-concurrent-start-${loop.index + 1}">
|
||||||
|
<script>
|
||||||
|
$('#most-concurrent-start-${loop.index + 1}').text(moment(${top_stat['rows'][loop.index]['started']},"X").format(date_format + ' ' + time_format));
|
||||||
|
</script>
|
||||||
|
</span>
|
||||||
|
% else:
|
||||||
|
- N/A
|
||||||
|
% endif
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="home-platforms-instance-poster">
|
||||||
|
<div class="home-platforms-instance-list-box" style="background-image: url(interfaces/default/images/home-stat_most-concurrent.png);"></div>
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
% endif
|
||||||
|
% endfor
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</ul>
|
||||||
|
% endif
|
||||||
</li>
|
</li>
|
||||||
</div>
|
</div>
|
||||||
% endif
|
% endif
|
||||||
% endfor
|
% endfor
|
||||||
|
% else:
|
||||||
|
<div class="text-muted">No stats to show for the selected period.</div><br>
|
||||||
|
% endif
|
||||||
</ul>
|
</ul>
|
||||||
<script>
|
<script>
|
||||||
var topZIndex = 2;
|
var topZIndex = 2;
|
||||||
|
@ -828,9 +870,5 @@ DOCUMENTATION :: END
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
% else:
|
% else:
|
||||||
<div class="text-muted">No stats for selected period.</div><br>
|
<div class="text-muted">No stats to show for the selected period.</div><br>
|
||||||
% endif
|
|
||||||
% else:
|
|
||||||
<div class="text-muted">Unable to retrieve data from database. Please check your <a href="settings">settings</a>.
|
|
||||||
</div><br>
|
|
||||||
% endif
|
% endif
|
Before Width: | Height: | Size: 8.6 KiB |
Before Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 66 KiB |
BIN
data/interfaces/default/images/media_flags/aspect_ratio/1.33.png
Normal file
After Width: | Height: | Size: 926 B |
BIN
data/interfaces/default/images/media_flags/aspect_ratio/1.66.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/interfaces/default/images/media_flags/aspect_ratio/1.78.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/interfaces/default/images/media_flags/aspect_ratio/1.85.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/interfaces/default/images/media_flags/aspect_ratio/2.20.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/interfaces/default/images/media_flags/aspect_ratio/2.25.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
data/interfaces/default/images/media_flags/aspect_ratio/2.35.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/interfaces/default/images/media_flags/audio_channels/1.png
Normal file
After Width: | Height: | Size: 662 B |
BIN
data/interfaces/default/images/media_flags/audio_channels/2.png
Normal file
After Width: | Height: | Size: 873 B |
BIN
data/interfaces/default/images/media_flags/audio_channels/5.png
Normal file
After Width: | Height: | Size: 671 B |
BIN
data/interfaces/default/images/media_flags/audio_channels/6.png
Normal file
After Width: | Height: | Size: 671 B |
BIN
data/interfaces/default/images/media_flags/audio_channels/7.png
Normal file
After Width: | Height: | Size: 757 B |
BIN
data/interfaces/default/images/media_flags/audio_channels/8.png
Normal file
After Width: | Height: | Size: 527 B |
BIN
data/interfaces/default/images/media_flags/audio_codec/aac.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/aif.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/aifc.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/aiff.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/alac.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/ape.png
Normal file
After Width: | Height: | Size: 523 B |
BIN
data/interfaces/default/images/media_flags/audio_codec/cdda.png
Normal file
After Width: | Height: | Size: 4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/dts.png
Normal file
After Width: | Height: | Size: 2.4 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/eac3.png
Normal file
After Width: | Height: | Size: 2.6 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/flac.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/m4a.png
Normal file
After Width: | Height: | Size: 1.7 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/mlp.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/mp2.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/mp3.png
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/mpc.png
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/ogg.png
Normal file
After Width: | Height: | Size: 2 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/pcm.png
Normal file
After Width: | Height: | Size: 827 B |
BIN
data/interfaces/default/images/media_flags/audio_codec/ra.png
Normal file
After Width: | Height: | Size: 2.7 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/shn.png
Normal file
After Width: | Height: | Size: 270 B |
BIN
data/interfaces/default/images/media_flags/audio_codec/wav.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/wave.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/wma.png
Normal file
After Width: | Height: | Size: 3.2 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/wmahd.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 778 B |
BIN
data/interfaces/default/images/media_flags/audio_codec/wmav2.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
data/interfaces/default/images/media_flags/audio_codec/wv.png
Normal file
After Width: | Height: | Size: 2.3 KiB |
BIN
data/interfaces/default/images/media_flags/content_rating/G.png
Normal file
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 2 KiB |
BIN
data/interfaces/default/images/media_flags/content_rating/NR.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.8 KiB |
After Width: | Height: | Size: 2.2 KiB |
BIN
data/interfaces/default/images/media_flags/content_rating/PG.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
data/interfaces/default/images/media_flags/content_rating/R.png
Normal file
After Width: | Height: | Size: 928 B |
After Width: | Height: | Size: 931 B |
After Width: | Height: | Size: 1,017 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 821 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 1.7 KiB |
BIN
data/interfaces/default/images/media_flags/content_rating/X.png
Normal file
After Width: | Height: | Size: 990 B |
After Width: | Height: | Size: 539 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 1.5 KiB |
After Width: | Height: | Size: 1.7 KiB |