mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
fix scheduled task crash
This commit is contained in:
parent
b38145c4d3
commit
a88319b05d
5 changed files with 47 additions and 248 deletions
|
@ -4,7 +4,7 @@
|
|||
<title>Emby</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="musicRecommendedPage" data-role="page" class="page libraryPage backdropPage pageWithAbsoluteTabs" data-backdroptype="musicartist" data-require="scripts/musicrecommended">
|
||||
<div id="musicRecommendedPage" data-dom-cache="true" data-role="page" class="page libraryPage backdropPage pageWithAbsoluteTabs" data-backdroptype="musicartist" data-require="scripts/musicrecommended">
|
||||
<div class="libraryViewNav libraryViewNavWithMinHeight">
|
||||
<paper-tabs hidescrollbuttons noink>
|
||||
<paper-tab><iron-icon icon="info"></iron-icon>${TabSuggestions}</paper-tab>
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<title>Emby</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="playlistsPage" data-role="page" class="page libraryPage noSecondaryNavPage" data-require="scripts/playlists" data-title="${HeaderPlaylists}">
|
||||
<div id="playlistsPage" data-dom-cache="true" data-role="page" class="page libraryPage noSecondaryNavPage" data-require="scripts/playlists" data-title="${HeaderPlaylists}">
|
||||
|
||||
<div data-role="content">
|
||||
<div class="viewSettings">
|
||||
|
|
|
@ -453,33 +453,33 @@ function parseISO8601Date(s, options) {
|
|||
// The query params for the embedded page are also added as a property/value
|
||||
// object on the options object. You can access it from your page notifications
|
||||
// via data.options.pageData.
|
||||
$(document).bind("pagebeforechange", function (e, data) {
|
||||
//$(document).bind("pagebeforechange", function (e, data) {
|
||||
|
||||
// We only want to handle the case where we are being asked
|
||||
// to go to a page by URL, and only if that URL is referring
|
||||
// to an internal page by id.
|
||||
// // We only want to handle the case where we are being asked
|
||||
// // to go to a page by URL, and only if that URL is referring
|
||||
// // to an internal page by id.
|
||||
|
||||
if (typeof data.toPage === "string") {
|
||||
var u = $.mobile.path.parseUrl(data.toPage);
|
||||
if ($.mobile.path.isEmbeddedPage(u)) {
|
||||
// if (typeof data.toPage === "string") {
|
||||
// var u = $.mobile.path.parseUrl(data.toPage);
|
||||
// if ($.mobile.path.isEmbeddedPage(u)) {
|
||||
|
||||
// The request is for an internal page, if the hash
|
||||
// contains query (search) params, strip them off the
|
||||
// toPage URL and then set options.dataUrl appropriately
|
||||
// so the location.hash shows the originally requested URL
|
||||
// that hash the query params in the hash.
|
||||
// // The request is for an internal page, if the hash
|
||||
// // contains query (search) params, strip them off the
|
||||
// // toPage URL and then set options.dataUrl appropriately
|
||||
// // so the location.hash shows the originally requested URL
|
||||
// // that hash the query params in the hash.
|
||||
|
||||
var u2 = $.mobile.path.parseUrl(u.hash.replace(/^#/, ""));
|
||||
if (u2.search) {
|
||||
if (!data.options.dataUrl) {
|
||||
data.options.dataUrl = data.toPage;
|
||||
}
|
||||
data.options.pageData = queryStringToObject(u2.search);
|
||||
data.toPage = u.hrefNoHash + "#" + u2.pathname;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
// var u2 = $.mobile.path.parseUrl(u.hash.replace(/^#/, ""));
|
||||
// if (u2.search) {
|
||||
// if (!data.options.dataUrl) {
|
||||
// data.options.dataUrl = data.toPage;
|
||||
// }
|
||||
// data.options.pageData = queryStringToObject(u2.search);
|
||||
// data.toPage = u.hrefNoHash + "#" + u2.pathname;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//});
|
||||
|
||||
})(jQuery, window);
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
var libraryBrowser = {
|
||||
getDefaultPageSize: function (key, defaultValue) {
|
||||
|
||||
return 100;
|
||||
var saved = appStorage.getItem(key || pageSizeKey);
|
||||
|
||||
if (saved) {
|
||||
|
|
|
@ -859,19 +859,7 @@ $.ui.plugin = {
|
|||
|
||||
//simply set the active page's minimum height to screen height, depending on orientation
|
||||
resetActivePageHeight: function( height ) {
|
||||
var page = $( "." + $.mobile.activePageClass ),
|
||||
pageHeight = page.height(),
|
||||
pageOuterHeight = page.outerHeight( true );
|
||||
|
||||
height = (typeof height === "number") ? height : $.mobile.getScreenHeight();
|
||||
|
||||
// Remove any previous min-height setting
|
||||
page.css( "min-height", "" );
|
||||
|
||||
// Set the minimum height only if the height as determined by CSS is insufficient
|
||||
if ( page.height() < height ) {
|
||||
page.css( "min-height", height - ( pageOuterHeight - pageHeight ) );
|
||||
}
|
||||
},
|
||||
|
||||
loading: function () {
|
||||
|
@ -1354,187 +1342,6 @@ if ( !$.support.boxShadow ) {
|
|||
};
|
||||
})( jQuery );
|
||||
|
||||
|
||||
|
||||
// throttled resize event
|
||||
(function( $ ) {
|
||||
$.event.special.throttledresize = {
|
||||
setup: function() {
|
||||
$( this ).bind( "resize", handler );
|
||||
},
|
||||
teardown: function() {
|
||||
$( this ).unbind( "resize", handler );
|
||||
}
|
||||
};
|
||||
|
||||
var throttle = 250,
|
||||
handler = function() {
|
||||
curr = ( new Date() ).getTime();
|
||||
diff = curr - lastCall;
|
||||
|
||||
if ( diff >= throttle ) {
|
||||
|
||||
lastCall = curr;
|
||||
$( this ).trigger( "throttledresize" );
|
||||
|
||||
} else {
|
||||
|
||||
if ( heldCall ) {
|
||||
clearTimeout( heldCall );
|
||||
}
|
||||
|
||||
// Promise a held call will still execute
|
||||
heldCall = setTimeout( handler, throttle - diff );
|
||||
}
|
||||
},
|
||||
lastCall = 0,
|
||||
heldCall,
|
||||
curr,
|
||||
diff;
|
||||
})( jQuery );
|
||||
|
||||
|
||||
(function( $, window ) {
|
||||
var win = $( window ),
|
||||
event_name = "orientationchange",
|
||||
get_orientation,
|
||||
last_orientation,
|
||||
initial_orientation_is_landscape,
|
||||
initial_orientation_is_default,
|
||||
portrait_map = { "0": true, "180": true },
|
||||
ww, wh, landscape_threshold;
|
||||
|
||||
// It seems that some device/browser vendors use window.orientation values 0 and 180 to
|
||||
// denote the "default" orientation. For iOS devices, and most other smart-phones tested,
|
||||
// the default orientation is always "portrait", but in some Android and RIM based tablets,
|
||||
// the default orientation is "landscape". The following code attempts to use the window
|
||||
// dimensions to figure out what the current orientation is, and then makes adjustments
|
||||
// to the to the portrait_map if necessary, so that we can properly decode the
|
||||
// window.orientation value whenever get_orientation() is called.
|
||||
//
|
||||
// Note that we used to use a media query to figure out what the orientation the browser
|
||||
// thinks it is in:
|
||||
//
|
||||
// initial_orientation_is_landscape = $.mobile.media("all and (orientation: landscape)");
|
||||
//
|
||||
// but there was an iPhone/iPod Touch bug beginning with iOS 4.2, up through iOS 5.1,
|
||||
// where the browser *ALWAYS* applied the landscape media query. This bug does not
|
||||
// happen on iPad.
|
||||
|
||||
if ( $.support.orientation ) {
|
||||
|
||||
// Check the window width and height to figure out what the current orientation
|
||||
// of the device is at this moment. Note that we've initialized the portrait map
|
||||
// values to 0 and 180, *AND* we purposely check for landscape so that if we guess
|
||||
// wrong, , we default to the assumption that portrait is the default orientation.
|
||||
// We use a threshold check below because on some platforms like iOS, the iPhone
|
||||
// form-factor can report a larger width than height if the user turns on the
|
||||
// developer console. The actual threshold value is somewhat arbitrary, we just
|
||||
// need to make sure it is large enough to exclude the developer console case.
|
||||
|
||||
ww = window.innerWidth || win.width();
|
||||
wh = window.innerHeight || win.height();
|
||||
landscape_threshold = 50;
|
||||
|
||||
initial_orientation_is_landscape = ww > wh && ( ww - wh ) > landscape_threshold;
|
||||
|
||||
// Now check to see if the current window.orientation is 0 or 180.
|
||||
initial_orientation_is_default = portrait_map[ window.orientation ];
|
||||
|
||||
// If the initial orientation is landscape, but window.orientation reports 0 or 180, *OR*
|
||||
// if the initial orientation is portrait, but window.orientation reports 90 or -90, we
|
||||
// need to flip our portrait_map values because landscape is the default orientation for
|
||||
// this device/browser.
|
||||
if ( ( initial_orientation_is_landscape && initial_orientation_is_default ) || ( !initial_orientation_is_landscape && !initial_orientation_is_default ) ) {
|
||||
portrait_map = { "-90": true, "90": true };
|
||||
}
|
||||
}
|
||||
|
||||
$.event.special.orientationchange = $.extend( {}, $.event.special.orientationchange, {
|
||||
setup: function() {
|
||||
// If the event is supported natively, return false so that jQuery
|
||||
// will bind to the event using DOM methods.
|
||||
if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Get the current orientation to avoid initial double-triggering.
|
||||
last_orientation = get_orientation();
|
||||
|
||||
// Because the orientationchange event doesn't exist, simulate the
|
||||
// event by testing window dimensions on resize.
|
||||
win.bind( "throttledresize", handler );
|
||||
},
|
||||
teardown: function() {
|
||||
// If the event is not supported natively, return false so that
|
||||
// jQuery will unbind the event using DOM methods.
|
||||
if ( $.support.orientation && !$.event.special.orientationchange.disabled ) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Because the orientationchange event doesn't exist, unbind the
|
||||
// resize event handler.
|
||||
win.unbind( "throttledresize", handler );
|
||||
},
|
||||
add: function( handleObj ) {
|
||||
// Save a reference to the bound event handler.
|
||||
var old_handler = handleObj.handler;
|
||||
|
||||
handleObj.handler = function( event ) {
|
||||
// Modify event object, adding the .orientation property.
|
||||
event.orientation = get_orientation();
|
||||
|
||||
// Call the originally-bound event handler and return its result.
|
||||
return old_handler.apply( this, arguments );
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
// If the event is not supported natively, this handler will be bound to
|
||||
// the window resize event to simulate the orientationchange event.
|
||||
function handler() {
|
||||
// Get the current orientation.
|
||||
var orientation = get_orientation();
|
||||
|
||||
if ( orientation !== last_orientation ) {
|
||||
// The orientation has changed, so trigger the orientationchange event.
|
||||
last_orientation = orientation;
|
||||
win.trigger( event_name );
|
||||
}
|
||||
}
|
||||
|
||||
// Get the current page orientation. This method is exposed publicly, should it
|
||||
// be needed, as jQuery.event.special.orientationchange.orientation()
|
||||
$.event.special.orientationchange.orientation = get_orientation = function() {
|
||||
var isPortrait = true, elem = document.documentElement;
|
||||
|
||||
// prefer window orientation to the calculation based on screensize as
|
||||
// the actual screen resize takes place before or after the orientation change event
|
||||
// has been fired depending on implementation (eg android 2.3 is before, iphone after).
|
||||
// More testing is required to determine if a more reliable method of determining the new screensize
|
||||
// is possible when orientationchange is fired. (eg, use media queries + element + opacity)
|
||||
if ( $.support.orientation ) {
|
||||
// if the window orientation registers as 0 or 180 degrees report
|
||||
// portrait, otherwise landscape
|
||||
isPortrait = portrait_map[ window.orientation ];
|
||||
} else {
|
||||
isPortrait = elem && elem.clientWidth / elem.clientHeight < 1.1;
|
||||
}
|
||||
|
||||
return isPortrait ? "portrait" : "landscape";
|
||||
};
|
||||
|
||||
$.fn[ event_name ] = function( fn ) {
|
||||
return fn ? this.bind( event_name, fn ) : this.trigger( event_name );
|
||||
};
|
||||
|
||||
// jQuery < 1.8
|
||||
if ( $.attrFn ) {
|
||||
$.attrFn[ event_name ] = true;
|
||||
}
|
||||
|
||||
}( jQuery, this ));
|
||||
|
||||
(function( $, undefined ) {
|
||||
var props = {
|
||||
"animation": {},
|
||||
|
@ -4500,7 +4307,14 @@ $.fn.fieldcontain = function(/* options */) {
|
|||
TransitionHandler,
|
||||
promise;
|
||||
|
||||
this._triggerCssTransitionEvents( to, from, "before" );
|
||||
this._triggerCssTransitionEvents(to, from, "before");
|
||||
|
||||
if (from) {
|
||||
from[0].style.display = 'none';
|
||||
}
|
||||
to[0].style.display = 'block';
|
||||
this._triggerCssTransitionEvents(to, from);
|
||||
return;
|
||||
|
||||
// TODO put this in a binding to events *outside* the widget
|
||||
this._hideLoading();
|
||||
|
@ -4839,7 +4653,6 @@ $.fn.fieldcontain = function(/* options */) {
|
|||
|
||||
this._releaseTransitionLock();
|
||||
this._triggerWithDeprecated("transition", triggerData);
|
||||
this._triggerWithDeprecated("change", triggerData);
|
||||
},
|
||||
|
||||
// determine the current base url
|
||||
|
@ -5062,35 +4875,23 @@ $.fn.fieldcontain = function(/* options */) {
|
|||
|
||||
// TODO ensure that the navigate binding in the content widget happens at the right time
|
||||
$.mobile.pageContainer.pagecontainer();
|
||||
//set page min-heights to be device specific
|
||||
$.mobile.document.bind( "pageshow", function(e) {
|
||||
|
||||
// We need to wait for window.load to make sure that styles have already been rendered,
|
||||
// otherwise heights of external toolbars will have the wrong value
|
||||
if ( loadDeferred ) {
|
||||
loadDeferred.done( $.mobile.resetActivePageHeight );
|
||||
} else {
|
||||
$.mobile.resetActivePageHeight();
|
||||
}
|
||||
});
|
||||
|
||||
function removePage(page) {
|
||||
|
||||
$(page).removeWithDependents();
|
||||
page.parentNode.removeChild(page);
|
||||
}
|
||||
|
||||
function cleanPages(currentPage) {
|
||||
function cleanPages(newPage) {
|
||||
|
||||
var pages = document.querySelectorAll("div[data-role='page']");
|
||||
if (pages.length < 5) {
|
||||
return;
|
||||
//return;
|
||||
}
|
||||
|
||||
for (var i = 0, length = pages.length; i < length; i++) {
|
||||
var page = pages[i];
|
||||
if (page != currentPage) {
|
||||
if (page != newPage) {
|
||||
removePage(page);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -5098,16 +4899,13 @@ $.fn.fieldcontain = function(/* options */) {
|
|||
//set page min-heights to be device specific
|
||||
$.mobile.document.bind("pagehide", function (e,data) {
|
||||
|
||||
var page = e.target;
|
||||
var toPage = data.toPage ? data.toPage[0] : null;
|
||||
|
||||
//check if this is a same page transition and if so don't remove the page
|
||||
if (!data.samePage) {
|
||||
cleanPages(page);
|
||||
if (toPage && toPage.getAttribute('data-dom-cache')) {
|
||||
cleanPages(toPage);
|
||||
}
|
||||
});
|
||||
|
||||
$.mobile.window.bind( "throttledresize", $.mobile.resetActivePageHeight );
|
||||
|
||||
};//navreadyDeferred done callback
|
||||
|
||||
$( function() { domreadyDeferred.resolve(); } );
|
||||
|
@ -6809,11 +6607,11 @@ $.widget( "mobile.panel", {
|
|||
},
|
||||
|
||||
_bindFixListener: function() {
|
||||
this._on( $( window ), { "throttledresize": "_positionPanel" });
|
||||
this._on( $( window ), { "resize": "_positionPanel" });
|
||||
},
|
||||
|
||||
_unbindFixListener: function() {
|
||||
this._off( $( window ), "throttledresize" );
|
||||
this._off($(window), "resize");
|
||||
},
|
||||
|
||||
_unfixPanel: function() {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue