mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update card layouts
This commit is contained in:
parent
8f4f29888e
commit
bb38230c23
46 changed files with 1086 additions and 332 deletions
|
@ -29,7 +29,7 @@
|
||||||
</span>
|
</span>
|
||||||
<i class="fa fa-check"></i>
|
<i class="fa fa-check"></i>
|
||||||
</button>
|
</button>
|
||||||
<p class="forgotPassword" style="display:none;">
|
<p class="forgotPassword">
|
||||||
<a href="http://emby.media/community/index.php?app=core&module=global§ion=lostpass" target="_blank">${ButtonForgotPassword}</a>
|
<a href="http://emby.media/community/index.php?app=core&module=global§ion=lostpass" target="_blank">${ButtonForgotPassword}</a>
|
||||||
</p>
|
</p>
|
||||||
<div class="skip">
|
<div class="skip">
|
||||||
|
@ -43,7 +43,7 @@
|
||||||
<div class="fieldDescription">${TextConnectToServerManually}</div>
|
<div class="fieldDescription">${TextConnectToServerManually}</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="newUsers" style="display:none;">
|
<div class="newUsers">
|
||||||
<br />
|
<br />
|
||||||
<h2 style="text-align: left;">${HeaderNewUsers}</h2>
|
<h2 style="text-align: left;">${HeaderNewUsers}</h2>
|
||||||
<a data-role="button" data-icon="action" href="http://emby.media/community/index.php?app=core&module=global§ion=register" target="_blank">${ButtonSignUp}</a>
|
<a data-role="button" data-icon="action" href="http://emby.media/community/index.php?app=core&module=global§ion=register" target="_blank">${ButtonSignUp}</a>
|
||||||
|
|
|
@ -27,12 +27,23 @@
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
document.addEventListener("deviceready", function () {
|
document.addEventListener("deviceready", function () {
|
||||||
|
|
||||||
var deviceId = device.uuid;
|
function setDeviceId(deviceId) {
|
||||||
|
|
||||||
localStorage.setItem('cordovaDeviceName', device.model);
|
localStorage.setItem('cordovaDeviceName', device.model);
|
||||||
localStorage.setItem('cordovaDeviceId', device.uuid);
|
localStorage.setItem('cordovaDeviceId', deviceId);
|
||||||
|
|
||||||
window.location.replace('index.html');
|
window.location.replace('index.html');
|
||||||
|
}
|
||||||
|
|
||||||
|
window.plugins.uniqueDeviceID.get(function (uuid) {
|
||||||
|
|
||||||
|
setDeviceId(uuid);
|
||||||
|
|
||||||
|
}, function () {
|
||||||
|
|
||||||
|
// Failure. Use cordova uuid
|
||||||
|
setDeviceId(device.uuid);
|
||||||
|
});
|
||||||
|
|
||||||
}, false);
|
}, false);
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.largeCardMargin .cardBox {
|
.largeCardMargin .cardBox {
|
||||||
margin: 6px;
|
margin: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*@media all and (max-width: 600px) {
|
/*@media all and (max-width: 600px) {
|
||||||
|
@ -68,13 +68,7 @@
|
||||||
margin-bottom: 5px;
|
margin-bottom: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.visualFooterCard .outerCardFooter {
|
|
||||||
background: #111;
|
|
||||||
padding-bottom: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.visualCardBox {
|
.visualCardBox {
|
||||||
padding: 5px;
|
|
||||||
-moz-border-radius: 2px;
|
-moz-border-radius: 2px;
|
||||||
-webkit-border-radius: 2px;
|
-webkit-border-radius: 2px;
|
||||||
border-radius: 2px;
|
border-radius: 2px;
|
||||||
|
@ -83,16 +77,15 @@
|
||||||
-webkit-box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
-webkit-box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||||
background: #fff;
|
background: #fff;
|
||||||
margin: 1px;
|
margin: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*.visualCardBox .cardFooter {
|
.largeCardMargin .visualCardBox {
|
||||||
padding: 0 2px;
|
margin: 18px;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
.ui-page-theme-b .visualCardBox {
|
.ui-page-theme-b .visualCardBox {
|
||||||
background: rgba(45,45,45,.85);
|
background: rgba(45,45,45,.85);
|
||||||
border: 1px solid #1f1f1f;
|
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,6 +180,18 @@
|
||||||
right: 0;
|
right: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.visualCardBox .outerCardFooter {
|
||||||
|
padding: 5px;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btnCardOptions {
|
||||||
|
padding: 10px !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
color: inherit;
|
||||||
|
font-size: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
.cardText {
|
.cardText {
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -221,16 +226,6 @@
|
||||||
padding: 0 6px 4px 5px;
|
padding: 0 6px 4px 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.outerCardFooter .cardText + .cardText {
|
|
||||||
color: #ddd;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*.cardBox:not(.visualCardBox) .outerCardFooter .cardText {
|
|
||||||
font-size: 14px;
|
|
||||||
background: rgba(51, 51, 51,.6);
|
|
||||||
padding: 5px;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
.cardBox:not(.visualCardBox) .outerCardFooter .cardText:last-child {
|
.cardBox:not(.visualCardBox) .outerCardFooter .cardText:last-child {
|
||||||
margin-bottom: 2em;
|
margin-bottom: 2em;
|
||||||
}
|
}
|
||||||
|
@ -250,6 +245,11 @@
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cardImage canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
.coveredCardImage {
|
.coveredCardImage {
|
||||||
background-size: cover;
|
background-size: cover;
|
||||||
}
|
}
|
||||||
|
@ -298,7 +298,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.smallPortraitCard {
|
.smallPortraitCard {
|
||||||
width: 25%;
|
width: 33.334%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cardProgress {
|
.cardProgress {
|
||||||
|
@ -319,17 +319,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 500px) {
|
|
||||||
|
|
||||||
.squareCard {
|
|
||||||
width: 33.3%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.smallSquareCard {
|
|
||||||
width: 25%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (min-width: 400px) {
|
@media all and (min-width: 400px) {
|
||||||
|
|
||||||
.smallBackdropCard {
|
.smallBackdropCard {
|
||||||
|
@ -337,23 +326,25 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media all and (min-width: 500px) {
|
||||||
|
|
||||||
@media all and (min-width: 540px) {
|
.squareCard {
|
||||||
|
width: 33.3%;
|
||||||
.smallBackdropCard {
|
|
||||||
width: 25%;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@media all and (min-width: 640px) {
|
@media all and (min-width: 640px) {
|
||||||
|
|
||||||
|
.smallSquareCard {
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
.portraitCard {
|
.portraitCard {
|
||||||
width: 25%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.smallPortraitCard {
|
.smallPortraitCard {
|
||||||
width: 20%;
|
width: 25%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -377,11 +368,15 @@
|
||||||
width: 20%;
|
width: 20%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.smallBackdropCard {
|
.smallSquareCard {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.smallSquareCard {
|
.smallBackdropCard {
|
||||||
|
width: 25%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.smallPortraitCard {
|
||||||
width: 20%;
|
width: 20%;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1535,3 +1535,7 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
|
||||||
.movieTrailersTabDisabled .movieTrailersTab {
|
.movieTrailersTabDisabled .movieTrailersTab {
|
||||||
display: none !important;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.homeFavoritesTabDisabled .homeFavoritesTab {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<a href="index.html">${TabHome}</a>
|
<a href="index.html">${TabHome}</a>
|
||||||
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
||||||
<a href="tvrecommended.html">${TabNextUp}</a>
|
<a href="tvrecommended.html">${TabNextUp}</a>
|
||||||
<a href="favorites.html" class="ui-btn-active">${TabFavorites}</a>
|
<a href="favorites.html" class="ui-btn-active homeFavoritesTab">${TabFavorites}</a>
|
||||||
<a href="tvupcoming.html">${TabUpcoming}</a>
|
<a href="tvupcoming.html">${TabUpcoming}</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<a href="index.html">${TabHome}</a>
|
<a href="index.html">${TabHome}</a>
|
||||||
<a href="#" class="ui-btn-active">${TabLatest}</a>
|
<a href="#" class="ui-btn-active">${TabLatest}</a>
|
||||||
<a href="tvrecommended.html">${TabNextUp}</a>
|
<a href="tvrecommended.html">${TabNextUp}</a>
|
||||||
<a href="favorites.html">${TabFavorites}</a>
|
<a href="favorites.html" class="homeFavoritesTab">${TabFavorites}</a>
|
||||||
<a href="tvupcoming.html">${TabUpcoming}</a>
|
<a href="tvupcoming.html">${TabUpcoming}</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<a href="#" class="ui-btn-active">${TabHome}</a>
|
<a href="#" class="ui-btn-active">${TabHome}</a>
|
||||||
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
||||||
<a href="tvrecommended.html">${TabNextUp}</a>
|
<a href="tvrecommended.html">${TabNextUp}</a>
|
||||||
<a href="favorites.html">${TabFavorites}</a>
|
<a href="favorites.html" class="homeFavoritesTab">${TabFavorites}</a>
|
||||||
<a href="tvupcoming.html">${TabUpcoming}</a>
|
<a href="tvupcoming.html">${TabUpcoming}</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<div class="libraryViewNav scopedLibraryViewNav">
|
<div class="libraryViewNav scopedLibraryViewNav">
|
||||||
<a href="index.html" class="lnkHomeHome">${TabHome}</a>
|
<a href="index.html" class="lnkHomeHome">${TabHome}</a>
|
||||||
<a href="homelatest.html" class="lnkHomeLatest homeLatestTab">${TabLatest}</a>
|
<a href="homelatest.html" class="lnkHomeLatest homeLatestTab">${TabLatest}</a>
|
||||||
<a href="tvrecommended.html" class="lnkHomeNextUp">${TabNextUp}</a>
|
<a href="tvrecommended.html" class="lnkHomeNextUp homeFavoritesTab">${TabNextUp}</a>
|
||||||
<a href="favorites.html" class="lnkHomeFavorites">${TabFavorites}</a>
|
<a href="favorites.html" class="lnkHomeFavorites">${TabFavorites}</a>
|
||||||
<a href="tvupcoming.html" class="lnkHomeUpcoming">${TabUpcoming}</a>
|
<a href="tvupcoming.html" class="lnkHomeUpcoming">${TabUpcoming}</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -97,6 +97,19 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setDefault(page) {
|
||||||
|
|
||||||
|
var backdropContainer = $('.backdropContainer');
|
||||||
|
|
||||||
|
if (backdropContainer.length) {
|
||||||
|
backdropContainer.css('backgroundImage', 'url(css/images/splash.jpg)');
|
||||||
|
} else {
|
||||||
|
$(document.body).prepend('<div class="backdropContainer" style="background-image:url(css/images/splash.jpg);top:0;"></div>');
|
||||||
|
}
|
||||||
|
|
||||||
|
$(page).addClass('backdropPage staticBackdropPage');
|
||||||
|
}
|
||||||
|
|
||||||
function clearBackdrop() {
|
function clearBackdrop() {
|
||||||
|
|
||||||
$('.backdropContainer').css('backgroundImage', '');
|
$('.backdropContainer').css('backgroundImage', '');
|
||||||
|
@ -213,7 +226,8 @@
|
||||||
window.Backdrops = {
|
window.Backdrops = {
|
||||||
|
|
||||||
setBackdrops: setBackdrops,
|
setBackdrops: setBackdrops,
|
||||||
setBackdropUrl: setBackdropUrl
|
setBackdropUrl: setBackdropUrl,
|
||||||
|
setDefault: setDefault
|
||||||
};
|
};
|
||||||
|
|
||||||
})(jQuery, document);
|
})(jQuery, document);
|
|
@ -146,8 +146,10 @@
|
||||||
defaultShape: 'square',
|
defaultShape: 'square',
|
||||||
context: 'channels',
|
context: 'channels',
|
||||||
showTitle: true,
|
showTitle: true,
|
||||||
centerText: true,
|
coverImage: true,
|
||||||
coverImage: true
|
cardLayout: true,
|
||||||
|
showYear: true,
|
||||||
|
lazy: true
|
||||||
});
|
});
|
||||||
|
|
||||||
var elem = $('#items', page).html(html).lazyChildren();
|
var elem = $('#items', page).html(html).lazyChildren();
|
||||||
|
|
|
@ -21,14 +21,32 @@
|
||||||
|
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
|
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
var view = 'Thumb';
|
||||||
items: result.Items,
|
|
||||||
shape: "backdrop",
|
if (view == "Thumb") {
|
||||||
context: 'channels',
|
|
||||||
showTitle: true,
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
centerText: true,
|
items: result.Items,
|
||||||
preferThumb: true
|
shape: "backdrop",
|
||||||
});
|
context: 'channels',
|
||||||
|
showTitle: true,
|
||||||
|
centerText: true,
|
||||||
|
preferThumb: true
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (view == "ThumbCard") {
|
||||||
|
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "backdrop",
|
||||||
|
preferThumb: true,
|
||||||
|
context: 'channels',
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true,
|
||||||
|
showTitle: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$('#items', page).html(html).lazyChildren();
|
$('#items', page).html(html).lazyChildren();
|
||||||
|
|
||||||
|
|
|
@ -2,12 +2,13 @@
|
||||||
|
|
||||||
function onLoggedIn() {
|
function onLoggedIn() {
|
||||||
|
|
||||||
|
Dashboard.hideModalLoadingMsg();
|
||||||
Dashboard.navigate('selectserver.html');
|
Dashboard.navigate('selectserver.html');
|
||||||
}
|
}
|
||||||
|
|
||||||
function login(page, username, password) {
|
function login(page, username, password) {
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showModalLoadingMsg();
|
||||||
|
|
||||||
ConnectionManager.loginToConnect(username, password).done(function () {
|
ConnectionManager.loginToConnect(username, password).done(function () {
|
||||||
|
|
||||||
|
@ -30,6 +31,8 @@
|
||||||
|
|
||||||
function handleConnectionResult(page, result) {
|
function handleConnectionResult(page, result) {
|
||||||
|
|
||||||
|
Dashboard.hideLoadingMsg();
|
||||||
|
|
||||||
switch (result.State) {
|
switch (result.State) {
|
||||||
|
|
||||||
case MediaBrowser.ConnectionState.SignedIn:
|
case MediaBrowser.ConnectionState.SignedIn:
|
||||||
|
@ -71,12 +74,10 @@
|
||||||
|
|
||||||
function loadAppConnection(page) {
|
function loadAppConnection(page) {
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showModalLoadingMsg();
|
||||||
|
|
||||||
ConnectionManager.connect().done(function (result) {
|
ConnectionManager.connect().done(function (result) {
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
|
||||||
|
|
||||||
handleConnectionResult(page, result);
|
handleConnectionResult(page, result);
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -99,8 +100,7 @@
|
||||||
}
|
}
|
||||||
function loadMode(page, mode) {
|
function loadMode(page, mode) {
|
||||||
|
|
||||||
$(document.body).prepend('<div class="backdropContainer" style="background-image:url(css/images/splash.jpg);top:0;"></div>');
|
Backdrops.setDefault(page);
|
||||||
$(page).addClass('backdropPage staticBackdropPage');
|
|
||||||
|
|
||||||
if (mode == 'welcome') {
|
if (mode == 'welcome') {
|
||||||
$('.connectLoginForm', page).hide();
|
$('.connectLoginForm', page).hide();
|
||||||
|
@ -119,13 +119,17 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function skip() {
|
||||||
|
|
||||||
|
Dashboard.navigate('selectserver.html');
|
||||||
|
}
|
||||||
|
|
||||||
$(document).on('pageinit', "#connectLoginPage", function () {
|
$(document).on('pageinit', "#connectLoginPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
$('.btnSkipConnect', page).on('click', function() {
|
$('.btnSkipConnect', page).on('click', function () {
|
||||||
|
skip();
|
||||||
Dashboard.navigate('connectlogin.html?mode=manualserver');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}).on('pageshow', "#connectLoginPage", function () {
|
}).on('pageshow', "#connectLoginPage", function () {
|
||||||
|
@ -138,13 +142,9 @@
|
||||||
$('.embyIntroDownloadMessage', page).html(Globalize.translate('EmbyIntroDownloadMessage', link));
|
$('.embyIntroDownloadMessage', page).html(Globalize.translate('EmbyIntroDownloadMessage', link));
|
||||||
|
|
||||||
if (Dashboard.isRunningInCordova()) {
|
if (Dashboard.isRunningInCordova()) {
|
||||||
$('.newUsers', page).hide();
|
|
||||||
$('.forgotPassword', page).hide();
|
|
||||||
$('.skip', page).show();
|
$('.skip', page).show();
|
||||||
} else {
|
} else {
|
||||||
$('.skip', page).hide();
|
$('.skip', page).hide();
|
||||||
$('.newUsers', page).show();
|
|
||||||
$('.forgotPassword', page).show();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -157,18 +157,14 @@
|
||||||
host += ':' + port;
|
host += ':' + port;
|
||||||
}
|
}
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showModalLoadingMsg();
|
||||||
|
|
||||||
ConnectionManager.connectToAddress(host).done(function (result) {
|
ConnectionManager.connectToAddress(host).done(function (result) {
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
|
||||||
|
|
||||||
handleConnectionResult(page, result);
|
handleConnectionResult(page, result);
|
||||||
|
|
||||||
}).fail(function () {
|
}).fail(function () {
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
|
||||||
|
|
||||||
handleConnectionResult(page, {
|
handleConnectionResult(page, {
|
||||||
State: MediaBrowser.ConnectionState.Unavailable
|
State: MediaBrowser.ConnectionState.Unavailable
|
||||||
});
|
});
|
||||||
|
|
|
@ -626,7 +626,7 @@
|
||||||
imgUrl = 'css/images/clients/html5.png';
|
imgUrl = 'css/images/clients/html5.png';
|
||||||
}
|
}
|
||||||
|
|
||||||
return "<img src='" + imgUrl + "' alt='Emby Web Client' />";
|
return "<img src='" + imgUrl + "' alt='Emby Mobile' />";
|
||||||
}
|
}
|
||||||
if (clientLowered == "mb-classic") {
|
if (clientLowered == "mb-classic") {
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
var view = LibraryBrowser.getDefaultItemsView('Poster', 'PosterCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -46,6 +46,12 @@
|
||||||
updateFilterControls();
|
updateFilterControls();
|
||||||
var trigger = false;
|
var trigger = false;
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "List") {
|
if (view == "List") {
|
||||||
|
|
||||||
html = LibraryBrowser.getListViewHtml({
|
html = LibraryBrowser.getListViewHtml({
|
||||||
|
|
|
@ -139,6 +139,8 @@
|
||||||
|
|
||||||
var html = '';
|
var html = '';
|
||||||
|
|
||||||
|
var cardLayout = AppInfo.hasLowImageBandwidth;
|
||||||
|
|
||||||
if (items.length) {
|
if (items.length) {
|
||||||
html += '<div>';
|
html += '<div>';
|
||||||
html += '<h1 style="display:inline-block; vertical-align:middle;" class="listHeader">' + Globalize.translate('HeaderLatestMedia') + '</h1>';
|
html += '<h1 style="display:inline-block; vertical-align:middle;" class="listHeader">' + Globalize.translate('HeaderLatestMedia') + '</h1>';
|
||||||
|
@ -157,6 +159,9 @@
|
||||||
showUnplayedIndicator: false,
|
showUnplayedIndicator: false,
|
||||||
showChildCountIndicator: true,
|
showChildCountIndicator: true,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
|
cardLayout: cardLayout,
|
||||||
|
showTitle: cardLayout,
|
||||||
|
showYear: cardLayout
|
||||||
});
|
});
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
}
|
}
|
||||||
|
@ -275,6 +280,8 @@
|
||||||
|
|
||||||
var html = '';
|
var html = '';
|
||||||
|
|
||||||
|
var cardLayout = AppInfo.hasLowImageBandwidth;
|
||||||
|
|
||||||
if (result.Items.length) {
|
if (result.Items.length) {
|
||||||
html += '<h1 class="listHeader">' + Globalize.translate('HeaderResume') + '</h1>';
|
html += '<h1 class="listHeader">' + Globalize.translate('HeaderResume') + '</h1>';
|
||||||
html += '<div>';
|
html += '<div>';
|
||||||
|
@ -282,11 +289,12 @@
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
preferThumb: true,
|
preferThumb: true,
|
||||||
shape: 'backdrop',
|
shape: 'backdrop',
|
||||||
overlayText: screenWidth >= 800 && !AppInfo.hasLowImageBandwidth,
|
overlayText: screenWidth >= 800 && !cardLayout,
|
||||||
showTitle: true,
|
showTitle: true,
|
||||||
showParentTitle: true,
|
showParentTitle: true,
|
||||||
context: 'home',
|
context: 'home',
|
||||||
lazy: true
|
lazy: true,
|
||||||
|
cardLayout: cardLayout
|
||||||
});
|
});
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
}
|
}
|
||||||
|
@ -542,10 +550,10 @@
|
||||||
|
|
||||||
function dismissWelcome(page, userId) {
|
function dismissWelcome(page, userId) {
|
||||||
|
|
||||||
ApiClient.getDisplayPreferences('home', userId, 'webclient').done(function (result) {
|
getDisplayPreferences('home', userId).done(function (result) {
|
||||||
|
|
||||||
result.CustomPrefs[homePageTourKey] = homePageDismissValue;
|
result.CustomPrefs[homePageTourKey] = homePageDismissValue;
|
||||||
ApiClient.updateDisplayPreferences('home', result, userId, 'webclient');
|
ApiClient.updateDisplayPreferences('home', result, userId, getDisplayPreferencesAppName());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -635,7 +643,7 @@
|
||||||
|
|
||||||
var userId = Dashboard.getCurrentUserId();
|
var userId = Dashboard.getCurrentUserId();
|
||||||
|
|
||||||
ApiClient.getDisplayPreferences('home', userId, 'webclient').done(function (result) {
|
getDisplayPreferences('home', userId).done(function (result) {
|
||||||
|
|
||||||
Dashboard.getCurrentUser().done(function (user) {
|
Dashboard.getCurrentUser().done(function (user) {
|
||||||
|
|
||||||
|
@ -648,4 +656,20 @@
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function getDisplayPreferencesAppName() {
|
||||||
|
|
||||||
|
if (Dashboard.isRunningInCordova()) {
|
||||||
|
return 'Emby Mobile';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'webclient';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDisplayPreferences(key, userId) {
|
||||||
|
|
||||||
|
return ApiClient.getDisplayPreferences(key, userId, getDisplayPreferencesAppName()).done(function (result) {
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
})(jQuery, document);
|
})(jQuery, document);
|
||||||
|
|
|
@ -342,7 +342,7 @@
|
||||||
|
|
||||||
var chapters = item.Chapters || [];
|
var chapters = item.Chapters || [];
|
||||||
|
|
||||||
if (!chapters.length) {
|
if (!chapters.length || AppInfo.hasLowImageBandwidth) {
|
||||||
$('#scenesCollapsible', page).hide();
|
$('#scenesCollapsible', page).hide();
|
||||||
} else {
|
} else {
|
||||||
$('#scenesCollapsible', page).show();
|
$('#scenesCollapsible', page).show();
|
||||||
|
@ -616,9 +616,11 @@
|
||||||
|
|
||||||
var promise;
|
var promise;
|
||||||
|
|
||||||
|
var screenWidth = $(window).width();
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
userId: Dashboard.getCurrentUserId(),
|
userId: Dashboard.getCurrentUserId(),
|
||||||
limit: 5,
|
limit: screenWidth > 800 ? 5 : 4,
|
||||||
fields: "PrimaryImageAspectRatio,UserData,SyncInfo"
|
fields: "PrimaryImageAspectRatio,UserData,SyncInfo"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,12 @@
|
||||||
context = 'folders';
|
context = 'folders';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "Backdrop") {
|
if (view == "Backdrop") {
|
||||||
|
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
@ -75,6 +81,16 @@
|
||||||
context: context
|
context: context
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "auto",
|
||||||
|
showTitle: true,
|
||||||
|
context: context,
|
||||||
|
cardLayout: true,
|
||||||
|
showYear: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var elem = $('#items', page).html(html).lazyChildren();
|
var elem = $('#items', page).html(html).lazyChildren();
|
||||||
|
|
||||||
|
|
|
@ -1006,9 +1006,7 @@
|
||||||
|
|
||||||
var imagesPerRow = LibraryBrowser.getPostersPerRow(screenWidth);
|
var imagesPerRow = LibraryBrowser.getPostersPerRow(screenWidth);
|
||||||
|
|
||||||
if (AppInfo.hasLowImageBandwidth) {
|
if (!AppInfo.hasLowImageBandwidth) {
|
||||||
screenWidth *= .95;
|
|
||||||
} else {
|
|
||||||
screenWidth *= 1.25;
|
screenWidth *= 1.25;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1565,7 +1563,8 @@
|
||||||
if (options.cardLayout) {
|
if (options.cardLayout) {
|
||||||
html += '<div class="cardText" style="text-align:right; float:right;">';
|
html += '<div class="cardText" style="text-align:right; float:right;">';
|
||||||
// Render out the jqm classes so that we don't have to call trigger create
|
// Render out the jqm classes so that we don't have to call trigger create
|
||||||
html += '<button class="listviewMenuButton ui-btn ui-icon-ellipsis-v ui-btn-icon-notext ui-btn-inline ui-shadow ui-corner-all" type="button" data-inline="true" data-iconpos="notext" data-icon="ellipsis-v" style="margin: 4px 0 0;"></button>';
|
//html += '<button class="listviewMenuButton ui-btn ui-icon-ellipsis-v ui-btn-icon-notext ui-btn-inline ui-shadow ui-corner-all" type="button" data-inline="true" data-iconpos="notext" data-icon="ellipsis-v" style="margin: 4px 0 0;"></button>';
|
||||||
|
html += '<button class="listviewMenuButton imageButton btnCardOptions" type="button" data-role="none" style="margin: 4px 0 0;"><i class="fa fa-ellipsis-v"></i></button>';
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1618,15 +1617,19 @@
|
||||||
lines.push(songLine);
|
lines.push(songLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.showPremiereDate && item.PremiereDate) {
|
if (options.showPremiereDate) {
|
||||||
|
|
||||||
try {
|
if (item.PremiereDate) {
|
||||||
|
try {
|
||||||
|
|
||||||
lines.push(LibraryBrowser.getPremiereDateText(item));
|
lines.push(LibraryBrowser.getPremiereDateText(item));
|
||||||
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
lines.push('');
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
lines.push('');
|
lines.push('');
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,8 @@
|
||||||
return LibraryBrowser.getPosterViewHtml({
|
return LibraryBrowser.getPosterViewHtml({
|
||||||
items: channels,
|
items: channels,
|
||||||
shape: "smallBackdrop",
|
shape: "smallBackdrop",
|
||||||
centerText: true
|
centerText: true,
|
||||||
|
lazy: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
var view = LibraryBrowser.getDefaultItemsView('Poster', 'PosterCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -53,6 +53,15 @@
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
var trigger = false;
|
var trigger = false;
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Thumb') {
|
||||||
|
view = 'ThumbCard';
|
||||||
|
}
|
||||||
|
else if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (result.TotalRecordCount) {
|
if (result.TotalRecordCount) {
|
||||||
|
|
||||||
if (view == "List") {
|
if (view == "List") {
|
||||||
|
@ -74,6 +83,17 @@
|
||||||
lazy: true
|
lazy: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "auto",
|
||||||
|
context: 'movies',
|
||||||
|
showTitle: true,
|
||||||
|
cardLayout: true,
|
||||||
|
lazy: true,
|
||||||
|
showItemCounts: true
|
||||||
|
});
|
||||||
|
}
|
||||||
else if (view == "Thumb") {
|
else if (view == "Thumb") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -85,6 +105,18 @@
|
||||||
preferThumb: true
|
preferThumb: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (view == "ThumbCard") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "backdrop",
|
||||||
|
context: 'movies',
|
||||||
|
showTitle: true,
|
||||||
|
lazy: true,
|
||||||
|
preferThumb: true,
|
||||||
|
cardLayout: true,
|
||||||
|
showItemCounts: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$('.noItemsMessage', page).hide();
|
$('.noItemsMessage', page).hide();
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb');
|
var view = LibraryBrowser.getDefaultItemsView('Thumb', 'ThumbCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -39,6 +39,15 @@
|
||||||
|
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Thumb') {
|
||||||
|
view = 'ThumbCard';
|
||||||
|
}
|
||||||
|
else if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "Thumb") {
|
if (view == "Thumb") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -63,6 +72,17 @@
|
||||||
lazy: true
|
lazy: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "portrait",
|
||||||
|
context: 'movies',
|
||||||
|
showItemCounts: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true,
|
||||||
|
showTitle: true
|
||||||
|
});
|
||||||
|
}
|
||||||
else if (view == "Poster") {
|
else if (view == "Poster") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
var view = LibraryBrowser.getDefaultItemsView('Poster', 'PosterCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -48,6 +48,15 @@
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
var trigger = false;
|
var trigger = false;
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Thumb') {
|
||||||
|
view = 'ThumbCard';
|
||||||
|
}
|
||||||
|
else if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "Thumb") {
|
if (view == "Thumb") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -55,8 +64,7 @@
|
||||||
preferThumb: true,
|
preferThumb: true,
|
||||||
context: 'movies',
|
context: 'movies',
|
||||||
lazy: true,
|
lazy: true,
|
||||||
overlayText: true,
|
overlayText: true
|
||||||
showTitle: false
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else if (view == "ThumbCard") {
|
else if (view == "ThumbCard") {
|
||||||
|
@ -96,7 +104,6 @@
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
context: 'movies',
|
context: 'movies',
|
||||||
showTitle: false,
|
|
||||||
centerText: true,
|
centerText: true,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
overlayText: true
|
overlayText: true
|
||||||
|
|
|
@ -1,10 +1,29 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
|
function getView() {
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
return 'PosterCard';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'PosterCard';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getResumeView() {
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
return 'ThumbCard';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'ThumbCard';
|
||||||
|
}
|
||||||
|
|
||||||
function loadLatest(page, userId, parentId) {
|
function loadLatest(page, userId, parentId) {
|
||||||
|
|
||||||
var limit = AppInfo.hasLowImageBandwidth ?
|
var limit = 18;
|
||||||
15 :
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
18;
|
limit = 10;
|
||||||
|
}
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
|
|
||||||
|
@ -18,13 +37,34 @@
|
||||||
|
|
||||||
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).done(function (items) {
|
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).done(function (items) {
|
||||||
|
|
||||||
$('#recentlyAddedItems', page).html(LibraryBrowser.getPosterViewHtml({
|
var view = getView();
|
||||||
items: items,
|
var html = '';
|
||||||
lazy: true,
|
|
||||||
shape: 'portrait',
|
|
||||||
overlayText: false
|
|
||||||
|
|
||||||
})).lazyChildren().trigger('create');
|
if (view == 'PosterCard') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: items,
|
||||||
|
lazy: true,
|
||||||
|
shape: 'portrait',
|
||||||
|
overlayText: false,
|
||||||
|
showTitle: true,
|
||||||
|
showYear: true,
|
||||||
|
cardLayout: true
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (view == 'Poster') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: items,
|
||||||
|
shape: "portrait",
|
||||||
|
centerText: true,
|
||||||
|
lazy: true,
|
||||||
|
overlayText: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#recentlyAddedItems', page).html(html).lazyChildren().trigger('create');
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,15 +95,35 @@
|
||||||
$('#resumableSection', page).hide();
|
$('#resumableSection', page).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#resumableItems', page).html(LibraryBrowser.getPosterViewHtml({
|
var view = getResumeView();
|
||||||
items: result.Items,
|
var html = '';
|
||||||
preferThumb: true,
|
|
||||||
shape: 'backdrop',
|
|
||||||
overlayText: true,
|
|
||||||
showTitle: true,
|
|
||||||
lazy: true
|
|
||||||
|
|
||||||
})).lazyChildren().trigger('create');
|
if (view == 'ThumbCard') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
preferThumb: true,
|
||||||
|
shape: 'backdrop',
|
||||||
|
showTitle: true,
|
||||||
|
showYear: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (view == 'Thumb') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
preferThumb: true,
|
||||||
|
shape: 'backdrop',
|
||||||
|
overlayText: true,
|
||||||
|
showTitle: true,
|
||||||
|
lazy: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#resumableItems', page).html(html).lazyChildren().trigger('create');
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -95,12 +155,32 @@
|
||||||
html += '<h1 class="listHeader">' + title + '</h1>';
|
html += '<h1 class="listHeader">' + title + '</h1>';
|
||||||
|
|
||||||
html += '<div>';
|
html += '<div>';
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
|
||||||
items: recommendation.Items,
|
var view = getView();
|
||||||
lazy: true,
|
|
||||||
shape: 'portrait',
|
if (view == 'PosterCard') {
|
||||||
overlayText: true
|
|
||||||
});
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: recommendation.Items,
|
||||||
|
lazy: true,
|
||||||
|
shape: 'portrait',
|
||||||
|
overlayText: false,
|
||||||
|
showTitle: true,
|
||||||
|
showYear: true,
|
||||||
|
cardLayout: true
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (view == 'Poster') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: recommendation.Items,
|
||||||
|
shape: "portrait",
|
||||||
|
centerText: true,
|
||||||
|
lazy: true,
|
||||||
|
overlayText: true
|
||||||
|
});
|
||||||
|
}
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
return html;
|
return html;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
var view = LibraryBrowser.getDefaultItemsView('PosterCard', 'PosterCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -54,10 +54,10 @@
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
context: 'movies-trailers',
|
context: 'movies-trailers',
|
||||||
showTitle: false,
|
showTitle: true,
|
||||||
centerText: true,
|
showYear: true,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
overlayText: false
|
cardLayout: true
|
||||||
});
|
});
|
||||||
|
|
||||||
var elem = $('.itemsContainer', page).html(html).lazyChildren();
|
var elem = $('.itemsContainer', page).html(html).lazyChildren();
|
||||||
|
|
|
@ -46,6 +46,12 @@
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
var trigger = false;
|
var trigger = false;
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "List") {
|
if (view == "List") {
|
||||||
|
|
||||||
html = LibraryBrowser.getListViewHtml({
|
html = LibraryBrowser.getListViewHtml({
|
||||||
|
|
|
@ -44,6 +44,12 @@
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
var trigger = false;
|
var trigger = false;
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "Poster") {
|
if (view == "Poster") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
|
|
@ -47,6 +47,12 @@
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
var trigger = false;
|
var trigger = false;
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "List") {
|
if (view == "List") {
|
||||||
|
|
||||||
html = LibraryBrowser.getListViewHtml({
|
html = LibraryBrowser.getListViewHtml({
|
||||||
|
|
|
@ -26,6 +26,13 @@
|
||||||
$(document).scrollTop(0);
|
$(document).scrollTop(0);
|
||||||
|
|
||||||
var html = '';
|
var html = '';
|
||||||
|
var view = 'Thumb';
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Thumb') {
|
||||||
|
view = 'ThumbCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({
|
$('.listTopPaging', page).html(LibraryBrowser.getQueryPagingHtml({
|
||||||
startIndex: query.StartIndex,
|
startIndex: query.StartIndex,
|
||||||
|
@ -38,15 +45,30 @@
|
||||||
|
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
|
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
if (view == "Thumb") {
|
||||||
items: result.Items,
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
shape: "backdrop",
|
items: result.Items,
|
||||||
preferThumb: true,
|
shape: "backdrop",
|
||||||
context: 'music',
|
preferThumb: true,
|
||||||
showItemCounts: true,
|
context: 'music',
|
||||||
centerText: true,
|
showItemCounts: true,
|
||||||
lazy: true
|
centerText: true,
|
||||||
});
|
lazy: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (view == "ThumbCard") {
|
||||||
|
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "backdrop",
|
||||||
|
preferThumb: true,
|
||||||
|
context: 'music',
|
||||||
|
showItemCounts: true,
|
||||||
|
cardLayout: true,
|
||||||
|
lazy: true,
|
||||||
|
showTitle: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$('#items', page).html(html).lazyChildren();
|
$('#items', page).html(html).lazyChildren();
|
||||||
|
|
||||||
|
|
|
@ -37,13 +37,37 @@
|
||||||
|
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
|
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
var view = 'Poster';
|
||||||
items: result.Items,
|
|
||||||
shape: "square",
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
context: 'music',
|
if (view == 'Poster') {
|
||||||
showTitle: true,
|
view = 'PosterCard';
|
||||||
centerText: true
|
}
|
||||||
});
|
}
|
||||||
|
|
||||||
|
if (view == "Poster") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "square",
|
||||||
|
context: 'music',
|
||||||
|
showTitle: true,
|
||||||
|
lazy: true,
|
||||||
|
centerText: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "square",
|
||||||
|
context: 'music',
|
||||||
|
showTitle: true,
|
||||||
|
centerText: true,
|
||||||
|
cardLayout: true,
|
||||||
|
lazy: true,
|
||||||
|
showParentTitle: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
$('#items', page).html(html).trigger('create');
|
$('#items', page).html(html).trigger('create');
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
var view = LibraryBrowser.getDefaultItemsView('Poster', 'PosterCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -40,15 +40,36 @@
|
||||||
|
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
|
|
||||||
// Poster
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
if (view == 'Poster') {
|
||||||
items: result.Items,
|
view = 'PosterCard';
|
||||||
shape: "auto",
|
}
|
||||||
context: getParameterByName('context') || 'photos',
|
}
|
||||||
showTitle: query.MediaTypes != 'Photo',
|
|
||||||
overlayText: true,
|
if (view == "Poster") {
|
||||||
lazy: true
|
// Poster
|
||||||
});
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "auto",
|
||||||
|
context: getParameterByName('context') || 'photos',
|
||||||
|
showTitle: query.MediaTypes != 'Photo',
|
||||||
|
overlayText: true,
|
||||||
|
lazy: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
|
||||||
|
// Poster
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "auto",
|
||||||
|
context: getParameterByName('context') || 'photos',
|
||||||
|
showTitle: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true,
|
||||||
|
showPremiereDate: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var elem = $('#items', page).html(html).lazyChildren();
|
var elem = $('#items', page).html(html).lazyChildren();
|
||||||
|
|
||||||
|
|
|
@ -154,7 +154,7 @@
|
||||||
// Need the timeout because jquery mobile will not show a popup if there's currently already one in the process of closing
|
// Need the timeout because jquery mobile will not show a popup if there's currently already one in the process of closing
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideModalLoadingMsg();
|
||||||
Dashboard.alert({
|
Dashboard.alert({
|
||||||
message: Globalize.translate('DefaultErrorMessage')
|
message: Globalize.translate('DefaultErrorMessage')
|
||||||
});
|
});
|
||||||
|
@ -164,12 +164,12 @@
|
||||||
|
|
||||||
function acceptInvitation(page, id) {
|
function acceptInvitation(page, id) {
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showModalLoadingMsg();
|
||||||
|
|
||||||
// Add/Update connect info
|
// Add/Update connect info
|
||||||
ConnectionManager.acceptServer(id).done(function () {
|
ConnectionManager.acceptServer(id).done(function () {
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideModalLoadingMsg();
|
||||||
loadPage(page);
|
loadPage(page);
|
||||||
|
|
||||||
}).fail(function () {
|
}).fail(function () {
|
||||||
|
@ -180,12 +180,12 @@
|
||||||
|
|
||||||
function deleteServer(page, id) {
|
function deleteServer(page, id) {
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showModalLoadingMsg();
|
||||||
|
|
||||||
// Add/Update connect info
|
// Add/Update connect info
|
||||||
ConnectionManager.deleteServer(id).done(function () {
|
ConnectionManager.deleteServer(id).done(function () {
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideModalLoadingMsg();
|
||||||
loadPage(page);
|
loadPage(page);
|
||||||
|
|
||||||
}).fail(function () {
|
}).fail(function () {
|
||||||
|
@ -197,12 +197,12 @@
|
||||||
|
|
||||||
function rejectInvitation(page, id) {
|
function rejectInvitation(page, id) {
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showModalLoadingMsg();
|
||||||
|
|
||||||
// Add/Update connect info
|
// Add/Update connect info
|
||||||
ConnectionManager.rejectServer(id).done(function () {
|
ConnectionManager.rejectServer(id).done(function () {
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideModalLoadingMsg();
|
||||||
loadPage(page);
|
loadPage(page);
|
||||||
|
|
||||||
}).fail(function () {
|
}).fail(function () {
|
||||||
|
@ -372,6 +372,8 @@
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
Dashboard.showLoadingMsg();
|
||||||
|
|
||||||
|
Backdrops.setDefault(page);
|
||||||
|
|
||||||
ConnectionManager.getAvailableServers().done(function (servers) {
|
ConnectionManager.getAvailableServers().done(function (servers) {
|
||||||
|
|
||||||
servers = servers.slice(0);
|
servers = servers.slice(0);
|
||||||
|
@ -400,7 +402,17 @@
|
||||||
loadInvitations(page);
|
loadInvitations(page);
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).on('pageshow', "#selectServerPage", function () {
|
$(document).on('pagebeforecreate', "#selectServerPage", function () {
|
||||||
|
|
||||||
|
var page = this;
|
||||||
|
|
||||||
|
if (ConnectionManager.isLoggedIntoConnect()) {
|
||||||
|
$(page).addClass('libraryPage').addClass(' noSecondaryNavPage').removeClass('standalonePage');
|
||||||
|
} else {
|
||||||
|
$(page).removeClass('libraryPage').removeClass(' noSecondaryNavPage').addClass('standalonePage');
|
||||||
|
}
|
||||||
|
|
||||||
|
}).on('pagebeforeshow', "#selectServerPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
|
|
|
@ -87,7 +87,7 @@ var Dashboard = {
|
||||||
}
|
}
|
||||||
Dashboard.hideLoadingMsg();
|
Dashboard.hideLoadingMsg();
|
||||||
|
|
||||||
if (!Dashboard.suppressAjaxErrors) {
|
if (!Dashboard.suppressAjaxErrors && data.type != 'GET') {
|
||||||
|
|
||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
|
|
||||||
|
@ -428,6 +428,10 @@ var Dashboard = {
|
||||||
|
|
||||||
navigate: function (url, preserveQueryString) {
|
navigate: function (url, preserveQueryString) {
|
||||||
|
|
||||||
|
if (!url) {
|
||||||
|
throw new Error('url cannot be null or empty');
|
||||||
|
}
|
||||||
|
|
||||||
var queryString = getWindowLocationSearch();
|
var queryString = getWindowLocationSearch();
|
||||||
if (preserveQueryString && queryString) {
|
if (preserveQueryString && queryString) {
|
||||||
url += queryString;
|
url += queryString;
|
||||||
|
@ -1363,10 +1367,10 @@ var Dashboard = {
|
||||||
|
|
||||||
if (AppInfo.hasLowImageBandwidth) {
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
|
||||||
quality -= 10;
|
quality -= 20;
|
||||||
|
|
||||||
if (isBackdrop) {
|
if (isBackdrop) {
|
||||||
quality -= 10;
|
quality -= 20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1421,6 +1425,8 @@ var Dashboard = {
|
||||||
|
|
||||||
if (Dashboard.isRunningInCordova()) {
|
if (Dashboard.isRunningInCordova()) {
|
||||||
|
|
||||||
|
appName = "Emby Mobile";
|
||||||
|
|
||||||
deviceName = store.getItem('cordovaDeviceName');
|
deviceName = store.getItem('cordovaDeviceName');
|
||||||
deviceId = store.getItem('cordovaDeviceId');
|
deviceId = store.getItem('cordovaDeviceId');
|
||||||
}
|
}
|
||||||
|
@ -1501,6 +1507,7 @@ var AppInfo = {};
|
||||||
AppInfo.enableLatestChannelItems = true;
|
AppInfo.enableLatestChannelItems = true;
|
||||||
AppInfo.enableStudioTabs = true;
|
AppInfo.enableStudioTabs = true;
|
||||||
AppInfo.enablePeopleTabs = true;
|
AppInfo.enablePeopleTabs = true;
|
||||||
|
AppInfo.enableHomeFavoritesTab = true;
|
||||||
AppInfo.enableTvEpisodesTab = true;
|
AppInfo.enableTvEpisodesTab = true;
|
||||||
AppInfo.enableMusicArtistsTab = true;
|
AppInfo.enableMusicArtistsTab = true;
|
||||||
AppInfo.enableHomeLatestTab = true;
|
AppInfo.enableHomeLatestTab = true;
|
||||||
|
@ -1617,6 +1624,10 @@ var AppInfo = {};
|
||||||
$(document.body).addClass('peopleTabDisabled');
|
$(document.body).addClass('peopleTabDisabled');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!AppInfo.enableHomeFavoritesTab) {
|
||||||
|
$(document.body).addClass('homeFavoritesTabDisabled');
|
||||||
|
}
|
||||||
|
|
||||||
if (!AppInfo.enableTvEpisodesTab) {
|
if (!AppInfo.enableTvEpisodesTab) {
|
||||||
$(document.body).addClass('tvEpisodesTabDisabled');
|
$(document.body).addClass('tvEpisodesTabDisabled');
|
||||||
}
|
}
|
||||||
|
@ -1780,6 +1791,7 @@ var AppInfo = {};
|
||||||
|
|
||||||
$(onReady);
|
$(onReady);
|
||||||
}
|
}
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
Dashboard.jQueryMobileInit();
|
Dashboard.jQueryMobileInit();
|
||||||
|
|
|
@ -103,7 +103,7 @@
|
||||||
// cardScalable
|
// cardScalable
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
|
|
||||||
html += '<div class="cardFooter">';
|
html += '<div class="cardFooter outerCardFooter">';
|
||||||
|
|
||||||
var textLines = [];
|
var textLines = [];
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Thumb', 'Thumb');
|
var view = LibraryBrowser.getDefaultItemsView('Thumb', 'ThumbCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -39,6 +39,15 @@
|
||||||
|
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Thumb') {
|
||||||
|
view = 'ThumbCard';
|
||||||
|
}
|
||||||
|
else if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "Thumb") {
|
if (view == "Thumb") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -63,6 +72,17 @@
|
||||||
lazy: true
|
lazy: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (view == "PosterCard") {
|
||||||
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "portrait",
|
||||||
|
context: 'tv',
|
||||||
|
showItemCounts: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true,
|
||||||
|
showTitle: true
|
||||||
|
});
|
||||||
|
}
|
||||||
else if (view == "Poster") {
|
else if (view == "Poster") {
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
|
|
@ -1,5 +1,14 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
|
function getView() {
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
return 'ThumbCard';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'Thumb';
|
||||||
|
}
|
||||||
|
|
||||||
$(document).on('pagebeforeshow', "#tvNextUpPage", function () {
|
$(document).on('pagebeforeshow', "#tvNextUpPage", function () {
|
||||||
|
|
||||||
var userId = Dashboard.getCurrentUserId();
|
var userId = Dashboard.getCurrentUserId();
|
||||||
|
@ -8,9 +17,11 @@
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
var limit = AppInfo.hasLowImageBandwidth ?
|
var limit = 30;
|
||||||
20 :
|
|
||||||
30;
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
limit = 16;
|
||||||
|
}
|
||||||
|
|
||||||
var options = {
|
var options = {
|
||||||
|
|
||||||
|
@ -24,18 +35,43 @@
|
||||||
|
|
||||||
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).done(function (items) {
|
ApiClient.getJSON(ApiClient.getUrl('Users/' + userId + '/Items/Latest', options)).done(function (items) {
|
||||||
|
|
||||||
$('#latestEpisodes', page).html(LibraryBrowser.getPosterViewHtml({
|
var view = getView();
|
||||||
items: items,
|
var html = '';
|
||||||
shape: "backdrop",
|
|
||||||
preferThumb: true,
|
|
||||||
inheritThumb: false,
|
|
||||||
showParentTitle: false,
|
|
||||||
showUnplayedIndicator: false,
|
|
||||||
showChildCountIndicator: true,
|
|
||||||
overlayText: true,
|
|
||||||
lazy: true
|
|
||||||
|
|
||||||
})).lazyChildren();
|
if (view == 'ThumbCard') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: items,
|
||||||
|
shape: "backdrop",
|
||||||
|
preferThumb: true,
|
||||||
|
inheritThumb: false,
|
||||||
|
showUnplayedIndicator: false,
|
||||||
|
showChildCountIndicator: true,
|
||||||
|
overlayText: false,
|
||||||
|
showParentTitle: true,
|
||||||
|
lazy: true,
|
||||||
|
showTitle: true,
|
||||||
|
cardLayout: true
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (view == 'Thumb') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: items,
|
||||||
|
shape: "backdrop",
|
||||||
|
preferThumb: true,
|
||||||
|
inheritThumb: false,
|
||||||
|
showParentTitle: false,
|
||||||
|
showUnplayedIndicator: false,
|
||||||
|
showChildCountIndicator: true,
|
||||||
|
overlayText: false,
|
||||||
|
centerText: true,
|
||||||
|
lazy: true,
|
||||||
|
showTitle: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#latestEpisodes', page).html(html).lazyChildren();
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,5 +1,23 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
|
function getView() {
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
return 'ThumbCard';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'Thumb';
|
||||||
|
}
|
||||||
|
|
||||||
|
function getResumeView() {
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
return 'PosterCard';
|
||||||
|
}
|
||||||
|
|
||||||
|
return 'Poster';
|
||||||
|
}
|
||||||
|
|
||||||
function reload(page) {
|
function reload(page) {
|
||||||
|
|
||||||
var context = '';
|
var context = '';
|
||||||
|
@ -50,17 +68,37 @@
|
||||||
$('.noNextUpItems', page).show();
|
$('.noNextUpItems', page).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#nextUpItems', page).html(LibraryBrowser.getPosterViewHtml({
|
var view = getView();
|
||||||
items: result.Items,
|
var html = '';
|
||||||
shape: "backdrop",
|
|
||||||
showTitle: true,
|
|
||||||
showParentTitle: true,
|
|
||||||
overlayText: false,
|
|
||||||
context: context,
|
|
||||||
lazy: true,
|
|
||||||
preferThumb: true
|
|
||||||
|
|
||||||
})).lazyChildren();
|
if (view == 'ThumbCard') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "backdrop",
|
||||||
|
showTitle: true,
|
||||||
|
preferThumb: true,
|
||||||
|
showParentTitle: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true,
|
||||||
|
context: 'tv'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (view == 'Thumb') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "backdrop",
|
||||||
|
showTitle: true,
|
||||||
|
showParentTitle: true,
|
||||||
|
overlayText: false,
|
||||||
|
context: context,
|
||||||
|
lazy: true,
|
||||||
|
preferThumb: true
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#nextUpItems', page).html(html).lazyChildren();
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -99,16 +137,35 @@
|
||||||
$('.nextUpHeader', page).addClass('firstListHeader');
|
$('.nextUpHeader', page).addClass('firstListHeader');
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#resumableItems', page).html(LibraryBrowser.getPosterViewHtml({
|
var view = getResumeView();
|
||||||
items: result.Items,
|
var html = '';
|
||||||
shape: "backdrop",
|
|
||||||
showTitle: true,
|
|
||||||
showParentTitle: true,
|
|
||||||
overlayText: screenWidth >= 800 && !AppInfo.hasLowImageBandwidth,
|
|
||||||
lazy: true,
|
|
||||||
context: 'tv'
|
|
||||||
|
|
||||||
})).lazyChildren();
|
if (view == 'PosterCard') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "backdrop",
|
||||||
|
showTitle: true,
|
||||||
|
showParentTitle: true,
|
||||||
|
lazy: true,
|
||||||
|
cardLayout: true,
|
||||||
|
context: 'tv'
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if (view == 'Poster') {
|
||||||
|
|
||||||
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
items: result.Items,
|
||||||
|
shape: "backdrop",
|
||||||
|
showTitle: true,
|
||||||
|
showParentTitle: true,
|
||||||
|
overlayText: screenWidth >= 800 && !AppInfo.hasLowImageBandwidth,
|
||||||
|
lazy: true,
|
||||||
|
context: 'tv'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#resumableItems', page).html(html).lazyChildren();
|
||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
(function ($, document) {
|
(function ($, document) {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
var view = LibraryBrowser.getDefaultItemsView('Poster', 'PosterCard');
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
@ -43,6 +43,15 @@
|
||||||
|
|
||||||
updateFilterControls(page);
|
updateFilterControls(page);
|
||||||
|
|
||||||
|
if (AppInfo.hasLowImageBandwidth) {
|
||||||
|
if (view == 'Thumb') {
|
||||||
|
view = 'ThumbCard';
|
||||||
|
}
|
||||||
|
else if (view == 'Poster') {
|
||||||
|
view = 'PosterCard';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (view == "Thumb") {
|
if (view == "Thumb") {
|
||||||
|
|
||||||
html = LibraryBrowser.getPosterViewHtml({
|
html = LibraryBrowser.getPosterViewHtml({
|
||||||
|
@ -50,7 +59,8 @@
|
||||||
shape: "backdrop",
|
shape: "backdrop",
|
||||||
preferThumb: true,
|
preferThumb: true,
|
||||||
context: 'tv',
|
context: 'tv',
|
||||||
lazy: true
|
lazy: true,
|
||||||
|
overlayText: true
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -104,9 +114,9 @@
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
shape: "portrait",
|
shape: "portrait",
|
||||||
context: 'tv',
|
context: 'tv',
|
||||||
showTitle: false,
|
|
||||||
centerText: true,
|
centerText: true,
|
||||||
lazy: true
|
lazy: true,
|
||||||
|
overlayText: true
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
var limit = AppInfo.hasLowImageBandwidth ?
|
var limit = AppInfo.hasLowImageBandwidth ?
|
||||||
20 :
|
18 :
|
||||||
40;
|
40;
|
||||||
|
|
||||||
var query = {
|
var query = {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<title>Emby</title>
|
<title>Emby</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="selectServerPage" data-role="page" class="page libraryPage noSecondaryNavPage">
|
<div id="selectServerPage" data-role="page" class="page libraryPage noSecondaryNavPage" data-theme="b">
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
||||||
|
|
|
@ -126,6 +126,7 @@
|
||||||
Events.trigger(self, 'requestfail', [
|
Events.trigger(self, 'requestfail', [
|
||||||
{
|
{
|
||||||
url: this.url,
|
url: this.url,
|
||||||
|
type: this.type,
|
||||||
status: e.status,
|
status: e.status,
|
||||||
errorCode: e.getResponseHeader("X-Application-Error-Code")
|
errorCode: e.getResponseHeader("X-Application-Error-Code")
|
||||||
}]);
|
}]);
|
||||||
|
|
|
@ -1070,39 +1070,56 @@
|
||||||
|
|
||||||
self.deleteServer = function (serverId) {
|
self.deleteServer = function (serverId) {
|
||||||
|
|
||||||
var connectToken = self.connectToken();
|
var credentials = credentialProvider.credentials();
|
||||||
|
|
||||||
if (!serverId) {
|
var serverInfo = credentials.servers = credentials.servers.filter(function (s) {
|
||||||
throw new Error("null serverId");
|
return s.ConnectServerId == serverId;
|
||||||
}
|
});
|
||||||
if (!connectToken) {
|
|
||||||
throw new Error("null connectToken");
|
|
||||||
}
|
|
||||||
if (!self.connectUserId()) {
|
|
||||||
throw new Error("null connectUserId");
|
|
||||||
}
|
|
||||||
|
|
||||||
var url = "https://connect.mediabrowser.tv/service/serverAuthorizations?serverId=" + serverId + "&userId=" + self.connectUserId();
|
function onDone() {
|
||||||
|
|
||||||
return AjaxApi.ajax({
|
credentials = credentialProvider.credentials();
|
||||||
type: "DELETE",
|
|
||||||
url: url,
|
|
||||||
headers: {
|
|
||||||
"X-Connect-UserToken": connectToken,
|
|
||||||
"X-Application": appName + "/" + appVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
}).done(function () {
|
|
||||||
|
|
||||||
var credentials = credentialProvider.credentials();
|
|
||||||
|
|
||||||
credentials.servers = credentials.servers.filter(function (s) {
|
credentials.servers = credentials.servers.filter(function (s) {
|
||||||
return s.ConnectServerId != serverId;
|
return s.ConnectServerId != serverId;
|
||||||
});
|
});
|
||||||
|
|
||||||
credentialProvider.credentials(credentials);
|
credentialProvider.credentials(credentials);
|
||||||
|
}
|
||||||
|
|
||||||
});
|
if (serverInfo.ExchangeToken) {
|
||||||
|
|
||||||
|
var connectToken = self.connectToken();
|
||||||
|
|
||||||
|
if (!serverId) {
|
||||||
|
throw new Error("null serverId");
|
||||||
|
}
|
||||||
|
if (!connectToken) {
|
||||||
|
throw new Error("null connectToken");
|
||||||
|
}
|
||||||
|
if (!self.connectUserId()) {
|
||||||
|
throw new Error("null connectUserId");
|
||||||
|
}
|
||||||
|
|
||||||
|
var url = "https://connect.mediabrowser.tv/service/serverAuthorizations?serverId=" + serverId + "&userId=" + self.connectUserId();
|
||||||
|
|
||||||
|
return AjaxApi.ajax({
|
||||||
|
type: "DELETE",
|
||||||
|
url: url,
|
||||||
|
headers: {
|
||||||
|
"X-Connect-UserToken": connectToken,
|
||||||
|
"X-Application": appName + "/" + appVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
}).done(onDone);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
onDone();
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
deferred.resolve();
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
self.rejectServer = function (serverId) {
|
self.rejectServer = function (serverId) {
|
||||||
|
|
|
@ -57,18 +57,15 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
var params = [artist, title, album, url, duration, elapsedTime];
|
var params = [artist, title, album, url, duration, elapsedTime];
|
||||||
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
|
try {
|
||||||
|
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
|
||||||
|
} catch (err) {
|
||||||
|
onUpdateMetasFail(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onStateChanged(e, state) {
|
function onStateChanged(e, state) {
|
||||||
|
|
||||||
//console.log('nowplaying event: ' + e.type);
|
|
||||||
var player = this;
|
|
||||||
|
|
||||||
if (player.isDefaultPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
updatePlayerState(state);
|
updatePlayerState(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +112,12 @@
|
||||||
var elapsedTime = 0;
|
var elapsedTime = 0;
|
||||||
|
|
||||||
var params = [artist, title, album, image, duration, elapsedTime];
|
var params = [artist, title, album, image, duration, elapsedTime];
|
||||||
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
|
|
||||||
|
try {
|
||||||
|
window.remoteControls.updateMetas(onUpdateMetasSuccess, onUpdateMetasFail, params);
|
||||||
|
} catch (err) {
|
||||||
|
onUpdateMetasFail(err);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function onUpdateMetasSuccess() {
|
function onUpdateMetasSuccess() {
|
||||||
|
@ -125,7 +127,7 @@
|
||||||
|
|
||||||
function onUpdateMetasFail(fail) {
|
function onUpdateMetasFail(fail) {
|
||||||
|
|
||||||
console.log('onUpdateMetasFail' + fail);
|
console.log('onUpdateMetasFail: ' + fail);
|
||||||
}
|
}
|
||||||
|
|
||||||
function bindToPlayer(player) {
|
function bindToPlayer(player) {
|
||||||
|
@ -138,6 +140,8 @@
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('binding remotecontrols to MediaPlayer');
|
||||||
|
|
||||||
player.getPlayerState().done(function (state) {
|
player.getPlayerState().done(function (state) {
|
||||||
|
|
||||||
if (state.NowPlayingItem) {
|
if (state.NowPlayingItem) {
|
||||||
|
@ -153,8 +157,12 @@
|
||||||
.on('positionchange.cordovaremote', onStateChanged);
|
.on('positionchange.cordovaremote', onStateChanged);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log('binding remotecontrols to MediaController');
|
||||||
|
|
||||||
document.addEventListener("deviceready", function () {
|
document.addEventListener("deviceready", function () {
|
||||||
|
|
||||||
|
console.log('binding remotecontrols to MediaController');
|
||||||
|
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
||||||
$(MediaController).on('playerchange', function () {
|
$(MediaController).on('playerchange', function () {
|
||||||
|
|
117
dashboard-ui/thirdparty/cordova/serverdiscovery.js
vendored
117
dashboard-ui/thirdparty/cordova/serverdiscovery.js
vendored
|
@ -14,28 +14,29 @@
|
||||||
return String.fromCharCode.apply(null, new Uint16Array(buf));
|
return String.fromCharCode.apply(null, new Uint16Array(buf));
|
||||||
}
|
}
|
||||||
|
|
||||||
globalScope.ServerDiscovery = {
|
function findServersInternal(timeoutMs) {
|
||||||
|
|
||||||
findServers: function (timeoutMs) {
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var servers = [];
|
||||||
|
|
||||||
var servers = [];
|
// Expected server properties
|
||||||
|
// Name, Id, Address, EndpointAddress (optional)
|
||||||
|
|
||||||
// Expected server properties
|
var chrome = globalScope.chrome;
|
||||||
// Name, Id, Address, EndpointAddress (optional)
|
|
||||||
|
|
||||||
var chrome = globalScope.chrome;
|
if (!chrome) {
|
||||||
|
deferred.resolveWith(null, [servers]);
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
if (!chrome) {
|
var isTimedOut = false;
|
||||||
deferred.resolveWith(null, [servers]);
|
var timeout;
|
||||||
return deferred.promise();
|
var socketId;
|
||||||
}
|
|
||||||
|
|
||||||
var isTimedOut = false;
|
function startTimer() {
|
||||||
var socketId;
|
|
||||||
|
|
||||||
var timeout = setTimeout(function () {
|
timeout = setTimeout(function () {
|
||||||
|
|
||||||
isTimedOut = true;
|
isTimedOut = true;
|
||||||
deferred.resolveWith(null, [servers]);
|
deferred.resolveWith(null, [servers]);
|
||||||
|
@ -43,22 +44,22 @@
|
||||||
if (socketId) {
|
if (socketId) {
|
||||||
chrome.sockets.udp.onReceive.removeListener(onReceive);
|
chrome.sockets.udp.onReceive.removeListener(onReceive);
|
||||||
chrome.sockets.udp.close(socketId);
|
chrome.sockets.udp.close(socketId);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}, timeoutMs);
|
}, timeoutMs);
|
||||||
|
}
|
||||||
|
|
||||||
function onReceive(info) {
|
function onReceive(info) {
|
||||||
|
|
||||||
console.log('ServerDiscovery message received');
|
console.log('ServerDiscovery message received');
|
||||||
|
|
||||||
console.log(info);
|
console.log(info);
|
||||||
|
|
||||||
if (info.socketId == socketId) {
|
if (info.socketId == socketId) {
|
||||||
|
|
||||||
|
try {
|
||||||
var json = arrayBufferToString(info.data);
|
var json = arrayBufferToString(info.data);
|
||||||
|
console.log('Server discovery json: ' + json);
|
||||||
var server = JSON.parse(json);
|
var server = JSON.parse(json);
|
||||||
|
|
||||||
server.RemoteAddress = info.remoteAddress;
|
server.RemoteAddress = info.remoteAddress;
|
||||||
|
@ -68,37 +69,61 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
servers.push(server);
|
servers.push(server);
|
||||||
|
} catch (err) {
|
||||||
|
console.log('Error receiving server info: ' + err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var port = 7359;
|
var port = 7359;
|
||||||
chrome.sockets.udp.create(function (createInfo) {
|
console.log('chrome.sockets.udp.create');
|
||||||
|
chrome.sockets.udp.create(function (createInfo) {
|
||||||
|
|
||||||
socketId = createInfo.socketId;
|
socketId = createInfo.socketId;
|
||||||
|
|
||||||
chrome.sockets.udp.bind(createInfo.socketId, '0.0.0.0', port, function (result) {
|
console.log('chrome.sockets.udp.bind');
|
||||||
|
|
||||||
var data = stringToArrayBuffer('who is EmbyServer?');
|
chrome.sockets.udp.bind(createInfo.socketId, '0.0.0.0', port, function (result) {
|
||||||
|
|
||||||
chrome.sockets.udp.send(createInfo.socketId, data, '255.255.255.255', port, function (result) {
|
var data = stringToArrayBuffer('who is EmbyServer?');
|
||||||
if (result < 0) {
|
|
||||||
console.log('send fail: ' + result);
|
|
||||||
chrome.sockets.udp.close(createInfo.socketId);
|
|
||||||
|
|
||||||
if (!isTimedOut) {
|
console.log('chrome.sockets.udp.send');
|
||||||
clearTimeout(timeout);
|
chrome.sockets.udp.send(createInfo.socketId, data, '255.255.255.255', port, function (result) {
|
||||||
deferred.resolveWith(null, [servers]);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
if (result < 0) {
|
||||||
|
console.log('send fail: ' + result);
|
||||||
|
deferred.resolveWith(null, [servers]);
|
||||||
|
chrome.sockets.udp.close(createInfo.socketId);
|
||||||
|
|
||||||
console.log('sendTo: success ' + port);
|
} else {
|
||||||
|
|
||||||
if (!isTimedOut) {
|
console.log('sendTo: success ' + port);
|
||||||
chrome.sockets.udp.onReceive.addListener(onReceive);
|
|
||||||
}
|
startTimer();
|
||||||
}
|
chrome.sockets.udp.onReceive.addListener(onReceive);
|
||||||
});
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
globalScope.ServerDiscovery = {
|
||||||
|
|
||||||
|
findServers: function (timeoutMs) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
deviceReadyPromise.done(function () {
|
||||||
|
|
||||||
|
findServersInternal(timeoutMs).done(function (result) {
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [result]);
|
||||||
|
|
||||||
|
}).fail(function () {
|
||||||
|
|
||||||
|
deferred.reject();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -106,4 +131,14 @@
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var deviceReadyDeferred = DeferredBuilder.Deferred();
|
||||||
|
var deviceReadyPromise = deviceReadyDeferred.promise();
|
||||||
|
|
||||||
|
document.addEventListener("deviceready", function () {
|
||||||
|
|
||||||
|
deviceReadyDeferred.resolve();
|
||||||
|
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
|
||||||
})(window);
|
})(window);
|
318
dashboard-ui/thirdparty/jquery.unveil-custom.js
vendored
318
dashboard-ui/thirdparty/jquery.unveil-custom.js
vendored
|
@ -12,13 +12,23 @@
|
||||||
|
|
||||||
var unveilId = 0;
|
var unveilId = 0;
|
||||||
|
|
||||||
// Test search before setting to 0
|
|
||||||
var threshold = 100;
|
function getThreshold() {
|
||||||
|
|
||||||
|
var threshold = 100;
|
||||||
|
|
||||||
|
if (window.AppInfo && AppInfo.hasLowImageBandwidth) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Test search before setting to 0
|
||||||
|
return 100;
|
||||||
|
}
|
||||||
|
|
||||||
$.fn.unveil = function () {
|
$.fn.unveil = function () {
|
||||||
|
|
||||||
var $w = $(window),
|
var $w = $(window),
|
||||||
th = threshold || 0,
|
th = getThreshold(),
|
||||||
attrib = "data-src",
|
attrib = "data-src",
|
||||||
images = this,
|
images = this,
|
||||||
loaded;
|
loaded;
|
||||||
|
@ -90,7 +100,7 @@
|
||||||
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
|
var indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
|
||||||
dbVersion = 1.0;
|
dbVersion = 1.0;
|
||||||
|
|
||||||
var dbName = "emby3";
|
var dbName = "emby4";
|
||||||
var imagesStoreName = "images";
|
var imagesStoreName = "images";
|
||||||
|
|
||||||
function createObjectStore(dataBase) {
|
function createObjectStore(dataBase) {
|
||||||
|
@ -160,9 +170,10 @@
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var openPromise = openDb().done(function (db) {
|
openDb().done(function (db) {
|
||||||
|
|
||||||
self._db = db;
|
self._db = db;
|
||||||
|
window.ImageStore = self;
|
||||||
});
|
});
|
||||||
|
|
||||||
self.addImageToDatabase = function (blob, key) {
|
self.addImageToDatabase = function (blob, key) {
|
||||||
|
@ -176,13 +187,6 @@
|
||||||
var put = transaction.objectStore(imagesStoreName).put(blob, key);
|
var put = transaction.objectStore(imagesStoreName).put(blob, key);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.revokeUrl = function (url) {
|
|
||||||
|
|
||||||
// Get window.URL object
|
|
||||||
var URL = window.URL || window.webkitURL;
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.db = function () {
|
self.db = function () {
|
||||||
|
|
||||||
return self._db;
|
return self._db;
|
||||||
|
@ -283,6 +287,7 @@
|
||||||
self.addImageToDatabase(dataURL, key);
|
self.addImageToDatabase(dataURL, key);
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log("Error adding image to database");
|
||||||
deferred.reject();
|
deferred.reject();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -301,13 +306,9 @@
|
||||||
setImageIntoElement(elem, url);
|
setImageIntoElement(elem, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
openPromise.done(function () {
|
self.getImageUrl(url).done(function (localUrl) {
|
||||||
|
|
||||||
self.getImageUrl(url).done(function (localUrl) {
|
setImageIntoElement(elem, localUrl);
|
||||||
|
|
||||||
setImageIntoElement(elem, localUrl);
|
|
||||||
|
|
||||||
}).fail(onFail);
|
|
||||||
|
|
||||||
}).fail(onFail);
|
}).fail(onFail);
|
||||||
|
|
||||||
|
@ -318,9 +319,10 @@
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
var openPromise = openDb().done(function (db) {
|
openDb().done(function (db) {
|
||||||
|
|
||||||
self._db = db;
|
self._db = db;
|
||||||
|
window.ImageStore = self;
|
||||||
});
|
});
|
||||||
|
|
||||||
self.addImageToDatabase = function (blob, key) {
|
self.addImageToDatabase = function (blob, key) {
|
||||||
|
@ -334,13 +336,6 @@
|
||||||
var put = transaction.objectStore(imagesStoreName).put(blob, key);
|
var put = transaction.objectStore(imagesStoreName).put(blob, key);
|
||||||
};
|
};
|
||||||
|
|
||||||
self.revokeUrl = function (url) {
|
|
||||||
|
|
||||||
// Get window.URL object
|
|
||||||
var URL = window.URL || window.webkitURL;
|
|
||||||
URL.revokeObjectURL(url);
|
|
||||||
};
|
|
||||||
|
|
||||||
self.db = function () {
|
self.db = function () {
|
||||||
|
|
||||||
return self._db;
|
return self._db;
|
||||||
|
@ -437,6 +432,8 @@
|
||||||
self.addImageToDatabase(blob, key);
|
self.addImageToDatabase(blob, key);
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
console.log("Error adding blob to database");
|
||||||
|
alert("Error adding blob to database");
|
||||||
deferred.reject();
|
deferred.reject();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -455,16 +452,250 @@
|
||||||
setImageIntoElement(elem, url);
|
setImageIntoElement(elem, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
openPromise.done(function () {
|
self.getImageUrl(url).done(function (localUrl) {
|
||||||
|
|
||||||
self.getImageUrl(url).done(function (localUrl) {
|
setImageIntoElement(elem, localUrl);
|
||||||
|
|
||||||
setImageIntoElement(elem, localUrl);
|
|
||||||
|
|
||||||
}).fail(onFail);
|
|
||||||
|
|
||||||
}).fail(onFail);
|
}).fail(onFail);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
function indexedDbWebpImageStore() {
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
openDb().done(function (db) {
|
||||||
|
|
||||||
|
self._db = db;
|
||||||
|
window.ImageStore = self;
|
||||||
|
});
|
||||||
|
|
||||||
|
self.addImageToDatabase = function (blob, key) {
|
||||||
|
|
||||||
|
console.log("addImageToDatabase");
|
||||||
|
|
||||||
|
// Open a transaction to the database
|
||||||
|
var transaction = self.db().transaction([imagesStoreName], "readwrite");
|
||||||
|
|
||||||
|
// Put the blob into the dabase
|
||||||
|
var put = transaction.objectStore(imagesStoreName).put(blob, key);
|
||||||
|
};
|
||||||
|
|
||||||
|
self.db = function () {
|
||||||
|
|
||||||
|
return self._db;
|
||||||
|
};
|
||||||
|
|
||||||
|
self.get = function (key) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
var transaction = self.db().transaction([imagesStoreName], "readonly");
|
||||||
|
|
||||||
|
// Open a transaction to the database
|
||||||
|
var getRequest = transaction.objectStore(imagesStoreName).get(key);
|
||||||
|
|
||||||
|
getRequest.onsuccess = function (event) {
|
||||||
|
|
||||||
|
var imgFile = event.target.result;
|
||||||
|
|
||||||
|
if (imgFile) {
|
||||||
|
deferred.resolveWith(null, [imgFile]);
|
||||||
|
} else {
|
||||||
|
deferred.reject();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
getRequest.onerror = function () {
|
||||||
|
deferred.reject();
|
||||||
|
};
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
};
|
||||||
|
|
||||||
|
self.getImageUrl = function (originalUrl) {
|
||||||
|
|
||||||
|
console.log('getImageUrl:' + originalUrl);
|
||||||
|
|
||||||
|
var key = CryptoJS.SHA1(originalUrl).toString();
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
self.get(key).done(function (url) {
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [url]);
|
||||||
|
|
||||||
|
}).fail(function () {
|
||||||
|
|
||||||
|
self.downloadImage(originalUrl, key).done(function () {
|
||||||
|
self.get(key).done(function (url) {
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [url]);
|
||||||
|
|
||||||
|
}).fail(function () {
|
||||||
|
|
||||||
|
deferred.reject();
|
||||||
|
});
|
||||||
|
}).fail(function () {
|
||||||
|
|
||||||
|
deferred.reject();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
};
|
||||||
|
|
||||||
|
self.downloadImage = function (url, key) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
console.log('downloadImage:' + url);
|
||||||
|
|
||||||
|
// Create XHR
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
|
||||||
|
xhr.open("GET", url, true);
|
||||||
|
// Set the responseType to blob
|
||||||
|
xhr.responseType = "arraybuffer";
|
||||||
|
|
||||||
|
xhr.addEventListener("load", function () {
|
||||||
|
|
||||||
|
if (xhr.status === 200) {
|
||||||
|
console.log("Image retrieved");
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
|
||||||
|
self.addImageToDatabase(this.response, key);
|
||||||
|
deferred.resolve();
|
||||||
|
} catch (err) {
|
||||||
|
console.log("Error adding image to database");
|
||||||
|
deferred.reject();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
deferred.reject();
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
// Send XHR
|
||||||
|
xhr.send();
|
||||||
|
return deferred.promise();
|
||||||
|
};
|
||||||
|
|
||||||
|
function decode(data, elem) {
|
||||||
|
|
||||||
|
console.log('decoding webp');
|
||||||
|
|
||||||
|
var WebPImage = { width: { value: 0 }, height: { value: 0 } }
|
||||||
|
var decoder = new WebPDecoder();
|
||||||
|
|
||||||
|
//Config, you can set all arguments or what you need, nothing no objeect
|
||||||
|
var config = decoder.WebPDecoderConfig;
|
||||||
|
var output_buffer = config.j;
|
||||||
|
var bitstream = config.input;
|
||||||
|
|
||||||
|
if (!decoder.WebPInitDecoderConfig(config)) {
|
||||||
|
throw new Error("Library version mismatch!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
var StatusCode = decoder.VP8StatusCode;
|
||||||
|
|
||||||
|
var status = decoder.WebPGetFeatures(data, data.length, bitstream);
|
||||||
|
if (status != 0) {
|
||||||
|
console.log('error');
|
||||||
|
}
|
||||||
|
|
||||||
|
var mode = decoder.WEBP_CSP_MODE;
|
||||||
|
output_buffer.J = 4;
|
||||||
|
|
||||||
|
status = decoder.WebPDecode(data, data.length, config);
|
||||||
|
|
||||||
|
var ok = (status == 0);
|
||||||
|
if (!ok) {
|
||||||
|
throw new Error("Decoding of %s failed.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
drawIntoElement(output_buffer, elem);
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawIntoElement(output_buffer, elem) {
|
||||||
|
|
||||||
|
console.log('drawing canvas');
|
||||||
|
|
||||||
|
var bitmap = output_buffer.c.RGBA.ma;
|
||||||
|
|
||||||
|
var canvas = document.createElement("canvas");
|
||||||
|
|
||||||
|
var biHeight = output_buffer.height; var biWidth = output_buffer.width;
|
||||||
|
|
||||||
|
canvas.height = biHeight;
|
||||||
|
canvas.width = biWidth;
|
||||||
|
|
||||||
|
var context = canvas.getContext('2d');
|
||||||
|
var output = context.createImageData(canvas.width, canvas.height);
|
||||||
|
var outputData = output.data;
|
||||||
|
|
||||||
|
for (var h = 0; h < biHeight; h++) {
|
||||||
|
for (var w = 0; w < biWidth; w++) {
|
||||||
|
outputData[0 + w * 4 + (biWidth * 4) * h] = bitmap[1 + w * 4 + (biWidth * 4) * h];
|
||||||
|
outputData[1 + w * 4 + (biWidth * 4) * h] = bitmap[2 + w * 4 + (biWidth * 4) * h];
|
||||||
|
outputData[2 + w * 4 + (biWidth * 4) * h] = bitmap[3 + w * 4 + (biWidth * 4) * h];
|
||||||
|
outputData[3 + w * 4 + (biWidth * 4) * h] = bitmap[0 + w * 4 + (biWidth * 4) * h];
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
context.putImageData(output, 0, 0);
|
||||||
|
|
||||||
|
elem.appendChild(canvas);
|
||||||
|
}
|
||||||
|
|
||||||
|
self.setImageInto = function (elem, url) {
|
||||||
|
|
||||||
|
if (url.indexOf('format=webp') == -1 || elem.tagName != 'DIV') {
|
||||||
|
|
||||||
|
setImageIntoElement(elem, url);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create XHR
|
||||||
|
var xhr = new XMLHttpRequest();
|
||||||
|
|
||||||
|
xhr.open("GET", url, true);
|
||||||
|
// Set the responseType to blob
|
||||||
|
xhr.responseType = "arraybuffer";
|
||||||
|
|
||||||
|
xhr.addEventListener("load", function () {
|
||||||
|
|
||||||
|
if (xhr.status === 200) {
|
||||||
|
console.log("Image retrieved");
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
var arr = new Uint8Array(this.response);
|
||||||
|
|
||||||
|
//// Convert the int array to a binary string
|
||||||
|
//// We have to use apply() as we are converting an *array*
|
||||||
|
//// and String.fromCharCode() takes one or more single values, not
|
||||||
|
//// an array.
|
||||||
|
//var raw = String.fromCharCode.apply(null, arr);
|
||||||
|
|
||||||
|
//// This works!!!
|
||||||
|
//var b64 = btoa(raw);
|
||||||
|
//var dataURL = "data:image/jpeg;base64," + b64;
|
||||||
|
|
||||||
|
console.log(url);
|
||||||
|
decode(arr, elem);
|
||||||
|
|
||||||
|
} catch (err) {
|
||||||
|
console.log("Error adding image to database");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
}
|
||||||
|
}, false);
|
||||||
|
|
||||||
|
// Send XHR
|
||||||
|
xhr.send();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,17 +706,16 @@
|
||||||
self.setImageInto = setImageIntoElement;
|
self.setImageInto = setImageIntoElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($.browser.safari && indexedDB && window.Blob) {
|
console.log('creating simpleImageStore');
|
||||||
console.log('creating indexedDbBlobImageStore');
|
window.ImageStore = new simpleImageStore();
|
||||||
window.ImageStore = new indexedDbBlobImageStore();
|
|
||||||
}
|
//if ($.browser.safari && indexedDB && window.Blob) {
|
||||||
else if ($.browser.safari && indexedDB) {
|
// console.log('creating indexedDbBlobImageStore');
|
||||||
console.log('creating indexedDbImageStore');
|
// new indexedDbBlobImageStore();
|
||||||
window.ImageStore = new indexedDbImageStore();
|
//}
|
||||||
}
|
//else if ($.browser.safari && indexedDB) {
|
||||||
else {
|
// console.log('creating indexedDbImageStore');
|
||||||
console.log('creating simpleImageStore');
|
// new indexedDbImageStore();
|
||||||
window.ImageStore = new simpleImageStore();
|
//}
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
})();
|
|
@ -10,7 +10,7 @@
|
||||||
<a href="index.html">${TabHome}</a>
|
<a href="index.html">${TabHome}</a>
|
||||||
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
||||||
<a href="#" class="ui-btn-active">${TabNextUp}</a>
|
<a href="#" class="ui-btn-active">${TabNextUp}</a>
|
||||||
<a href="favorites.html">${TabFavorites}</a>
|
<a href="favorites.html" class="homeFavoritesTab">${TabFavorites}</a>
|
||||||
<a href="tvupcoming.html">${TabUpcoming}</a>
|
<a href="tvupcoming.html">${TabUpcoming}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="libraryViewNav scopedLibraryViewNav" style="display: none;">
|
<div class="libraryViewNav scopedLibraryViewNav" style="display: none;">
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<a href="index.html">${TabHome}</a>
|
<a href="index.html">${TabHome}</a>
|
||||||
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
<a href="homelatest.html" class="homeLatestTab">${TabLatest}</a>
|
||||||
<a href="tvrecommended.html">${TabNextUp}</a>
|
<a href="tvrecommended.html">${TabNextUp}</a>
|
||||||
<a href="favorites.html">${TabFavorites}</a>
|
<a href="favorites.html" class="homeFavoritesTab">${TabFavorites}</a>
|
||||||
<a href="#" class="ui-btn-active">${TabUpcoming}</a>
|
<a href="#" class="ui-btn-active">${TabUpcoming}</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="libraryViewNav scopedLibraryViewNav" style="display: none;">
|
<div class="libraryViewNav scopedLibraryViewNav" style="display: none;">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue