mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
Merge remote-tracking branch 'upstream/master' into lazyloader
This commit is contained in:
commit
7dc1cf771d
315 changed files with 10374 additions and 9194 deletions
|
@ -1,12 +1,12 @@
|
|||
(function() {
|
||||
"use strict";
|
||||
'use strict';
|
||||
|
||||
function injectScriptElement(src, onload) {
|
||||
if (!src) {
|
||||
return;
|
||||
}
|
||||
|
||||
var script = document.createElement("script");
|
||||
var script = document.createElement('script');
|
||||
if (self.dashboardVersion) {
|
||||
src += `?v=${self.dashboardVersion}`;
|
||||
}
|
||||
|
@ -21,10 +21,10 @@
|
|||
|
||||
function loadSite() {
|
||||
injectScriptElement(
|
||||
"./libraries/alameda.js",
|
||||
'./libraries/alameda.js',
|
||||
function() {
|
||||
// onload of require library
|
||||
injectScriptElement("./scripts/site.js");
|
||||
injectScriptElement('./scripts/site.js');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
@ -42,7 +42,7 @@
|
|||
if (!self.Promise) {
|
||||
// Load Promise polyfill if they are not natively supported
|
||||
injectScriptElement(
|
||||
"./libraries/npo.js",
|
||||
'./libraries/npo.js',
|
||||
loadSite
|
||||
);
|
||||
} else {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
define(["backdrop", "userSettings", "libraryMenu"], function (backdrop, userSettings, libraryMenu) {
|
||||
"use strict";
|
||||
define(['backdrop', 'userSettings', 'libraryMenu'], function (backdrop, userSettings, libraryMenu) {
|
||||
'use strict';
|
||||
|
||||
var cache = {};
|
||||
|
||||
|
@ -8,7 +8,7 @@ define(["backdrop", "userSettings", "libraryMenu"], function (backdrop, userSett
|
|||
}
|
||||
|
||||
function getBackdropItemIds(apiClient, userId, types, parentId) {
|
||||
var key = `backdrops2_${userId + (types || "") + (parentId || "")}`;
|
||||
var key = `backdrops2_${userId + (types || '') + (parentId || '')}`;
|
||||
var data = cache[key];
|
||||
|
||||
if (data) {
|
||||
|
@ -18,11 +18,11 @@ define(["backdrop", "userSettings", "libraryMenu"], function (backdrop, userSett
|
|||
}
|
||||
|
||||
var options = {
|
||||
SortBy: "IsFavoriteOrLiked,Random",
|
||||
SortBy: 'IsFavoriteOrLiked,Random',
|
||||
Limit: 20,
|
||||
Recursive: true,
|
||||
IncludeItemTypes: types,
|
||||
ImageTypes: "Backdrop",
|
||||
ImageTypes: 'Backdrop',
|
||||
ParentId: parentId,
|
||||
EnableTotalRecordCount: false
|
||||
};
|
||||
|
@ -56,17 +56,17 @@ define(["backdrop", "userSettings", "libraryMenu"], function (backdrop, userSett
|
|||
}
|
||||
}
|
||||
|
||||
pageClassOn("pageshow", "page", function () {
|
||||
pageClassOn('pageshow', 'page', function () {
|
||||
var page = this;
|
||||
|
||||
if (!page.classList.contains("selfBackdropPage")) {
|
||||
if (page.classList.contains("backdropPage")) {
|
||||
if (!page.classList.contains('selfBackdropPage')) {
|
||||
if (page.classList.contains('backdropPage')) {
|
||||
if (enabled()) {
|
||||
var type = page.getAttribute("data-backdroptype");
|
||||
var parentId = page.classList.contains("globalBackdropPage") ? "" : libraryMenu.getTopParentId();
|
||||
var type = page.getAttribute('data-backdroptype');
|
||||
var parentId = page.classList.contains('globalBackdropPage') ? '' : libraryMenu.getTopParentId();
|
||||
showBackdrop(type, parentId);
|
||||
} else {
|
||||
page.classList.remove("backdropPage");
|
||||
page.classList.remove('backdropPage');
|
||||
backdrop.clear();
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -185,7 +185,7 @@ define([], function () {
|
|||
/(safari)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(firefox)[ \/]([\w.]+)/.exec(ua) ||
|
||||
/(msie) ([\w.]+)/.exec(ua) ||
|
||||
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
||||
ua.indexOf('compatible') < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
||||
[];
|
||||
|
||||
var versionMatch = /(version)[ \/]([\w.]+)/.exec(ua);
|
||||
|
@ -196,17 +196,17 @@ define([], function () {
|
|||
/(android)/.exec(ua) ||
|
||||
[];
|
||||
|
||||
var browser = match[1] || "";
|
||||
var browser = match[1] || '';
|
||||
|
||||
if (browser === "edge") {
|
||||
platform_match = [""];
|
||||
if (browser === 'edge') {
|
||||
platform_match = [''];
|
||||
} else {
|
||||
if (ua.indexOf("windows phone") !== -1 || ua.indexOf("iemobile") !== -1) {
|
||||
if (ua.indexOf('windows phone') !== -1 || ua.indexOf('iemobile') !== -1) {
|
||||
|
||||
// http://www.neowin.net/news/ie11-fakes-user-agent-to-fool-gmail-in-windows-phone-81-gdr1-update
|
||||
browser = "msie";
|
||||
} else if (ua.indexOf("like gecko") !== -1 && ua.indexOf('webkit') === -1 && ua.indexOf('opera') === -1 && ua.indexOf('chrome') === -1 && ua.indexOf('safari') === -1) {
|
||||
browser = "msie";
|
||||
browser = 'msie';
|
||||
} else if (ua.indexOf('like gecko') !== -1 && ua.indexOf('webkit') === -1 && ua.indexOf('opera') === -1 && ua.indexOf('chrome') === -1 && ua.indexOf('safari') === -1) {
|
||||
browser = 'msie';
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -219,7 +219,7 @@ define([], function () {
|
|||
version = versionMatch[2];
|
||||
}
|
||||
|
||||
version = version || match[2] || "0";
|
||||
version = version || match[2] || '0';
|
||||
|
||||
var versionMajor = parseInt(version.split('.')[0]);
|
||||
|
||||
|
@ -230,7 +230,7 @@ define([], function () {
|
|||
return {
|
||||
browser: browser,
|
||||
version: version,
|
||||
platform: platform_match[0] || "",
|
||||
platform: platform_match[0] || '',
|
||||
versionMajor: versionMajor
|
||||
};
|
||||
};
|
||||
|
@ -250,11 +250,11 @@ define([], function () {
|
|||
browser[matched.platform] = true;
|
||||
}
|
||||
|
||||
if (!browser.chrome && !browser.msie && !browser.edge && !browser.opera && userAgent.toLowerCase().indexOf("webkit") !== -1) {
|
||||
if (!browser.chrome && !browser.msie && !browser.edge && !browser.opera && userAgent.toLowerCase().indexOf('webkit') !== -1) {
|
||||
browser.safari = true;
|
||||
}
|
||||
|
||||
if (userAgent.toLowerCase().indexOf("playstation 4") !== -1) {
|
||||
if (userAgent.toLowerCase().indexOf('playstation 4') !== -1) {
|
||||
browser.ps4 = true;
|
||||
browser.tv = true;
|
||||
}
|
||||
|
|
|
@ -311,9 +311,9 @@ define(['browser'], function (browser) {
|
|||
try {
|
||||
var isTizenUhd = webapis.productinfo.isUdPanelSupported();
|
||||
isTizenFhd = !isTizenUhd;
|
||||
console.debug("isTizenFhd = " + isTizenFhd);
|
||||
console.debug('isTizenFhd = ' + isTizenFhd);
|
||||
} catch (error) {
|
||||
console.error("isUdPanelSupported() error code = " + error.code);
|
||||
console.error('isUdPanelSupported() error code = ' + error.code);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -334,6 +334,7 @@ define(['browser'], function (browser) {
|
|||
|
||||
var canPlayVp8 = videoTestElement.canPlayType('video/webm; codecs="vp8"').replace(/no/, '');
|
||||
var canPlayVp9 = videoTestElement.canPlayType('video/webm; codecs="vp9"').replace(/no/, '');
|
||||
var canPlayAv1 = videoTestElement.canPlayType('video/webm; codecs="av1"').replace(/no/, '');
|
||||
var webmAudioCodecs = ['vorbis'];
|
||||
|
||||
var canPlayMkv = testCanPlayMkv(videoTestElement);
|
||||
|
@ -592,6 +593,15 @@ define(['browser'], function (browser) {
|
|||
});
|
||||
}
|
||||
|
||||
if (canPlayAv1) {
|
||||
profile.DirectPlayProfiles.push({
|
||||
Container: 'webm',
|
||||
Type: 'Video',
|
||||
AudioCodec: webmAudioCodecs.join(','),
|
||||
VideoCodec: 'AV1'
|
||||
});
|
||||
}
|
||||
|
||||
profile.TranscodingProfiles = [];
|
||||
|
||||
var hlsBreakOnNonKeyFrames = browser.iOS || browser.osx || browser.edge || !canPlayNativeHls() ? true : false;
|
||||
|
|
|
@ -41,12 +41,12 @@ define(['globalize'], function (globalize) {
|
|||
}
|
||||
|
||||
// if there's a timezone, calculate it
|
||||
if (d[8] !== "Z" && d[10]) {
|
||||
if (d[8] !== 'Z' && d[10]) {
|
||||
var offset = d[10] * 60 * 60 * 1000;
|
||||
if (d[11]) {
|
||||
offset += d[11] * 60 * 1000;
|
||||
}
|
||||
if (d[9] === "-") {
|
||||
if (d[9] === '-') {
|
||||
ms -= offset;
|
||||
} else {
|
||||
ms += offset;
|
||||
|
@ -159,13 +159,13 @@ define(['globalize'], function (globalize) {
|
|||
var optionList = getOptionList(options);
|
||||
if (optionList.length === 1 && optionList[0].name === 'weekday') {
|
||||
var weekday = [];
|
||||
weekday[0] = "Sun";
|
||||
weekday[1] = "Mon";
|
||||
weekday[2] = "Tue";
|
||||
weekday[3] = "Wed";
|
||||
weekday[4] = "Thu";
|
||||
weekday[5] = "Fri";
|
||||
weekday[6] = "Sat";
|
||||
weekday[0] = 'Sun';
|
||||
weekday[1] = 'Mon';
|
||||
weekday[2] = 'Tue';
|
||||
weekday[3] = 'Wed';
|
||||
weekday[4] = 'Thu';
|
||||
weekday[5] = 'Fri';
|
||||
weekday[6] = 'Sat';
|
||||
return weekday[date.getDay()];
|
||||
}
|
||||
|
||||
|
|
|
@ -93,7 +93,7 @@
|
|||
supportsCaptureOption = true;
|
||||
}
|
||||
});
|
||||
window.addEventListener("test", null, opts);
|
||||
window.addEventListener('test', null, opts);
|
||||
} catch (e) {
|
||||
console.debug('error checking capture support');
|
||||
}
|
||||
|
@ -158,7 +158,7 @@
|
|||
|
||||
if (!windowSizeEventsBound) {
|
||||
windowSizeEventsBound = true;
|
||||
addEventListener(window, "orientationchange", clearWindowSize, { passive: true });
|
||||
addEventListener(window, 'orientationchange', clearWindowSize, { passive: true });
|
||||
addEventListener(window, 'resize', clearWindowSize, { passive: true });
|
||||
}
|
||||
}
|
||||
|
@ -204,12 +204,12 @@
|
|||
return _animationEvent;
|
||||
}
|
||||
|
||||
const el = document.createElement("div");
|
||||
const el = document.createElement('div');
|
||||
const animations = {
|
||||
"animation": "animationend",
|
||||
"OAnimation": "oAnimationEnd",
|
||||
"MozAnimation": "animationend",
|
||||
"WebkitAnimation": "webkitAnimationEnd"
|
||||
'animation': 'animationend',
|
||||
'OAnimation': 'oAnimationEnd',
|
||||
'MozAnimation': 'animationend',
|
||||
'WebkitAnimation': 'webkitAnimationEnd'
|
||||
};
|
||||
for (let t in animations) {
|
||||
if (el.style[t] !== undefined) {
|
||||
|
@ -244,12 +244,12 @@
|
|||
return _transitionEvent;
|
||||
}
|
||||
|
||||
const el = document.createElement("div");
|
||||
const el = document.createElement('div');
|
||||
const transitions = {
|
||||
"transition": "transitionend",
|
||||
"OTransition": "oTransitionEnd",
|
||||
"MozTransition": "transitionend",
|
||||
"WebkitTransition": "webkitTransitionEnd"
|
||||
'transition': 'transitionend',
|
||||
'OTransition': 'oTransitionEnd',
|
||||
'MozTransition': 'transitionend',
|
||||
'WebkitTransition': 'webkitTransitionEnd'
|
||||
};
|
||||
for (let t in transitions) {
|
||||
if (el.style[t] !== undefined) {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime, $, globalize) {
|
||||
"use strict";
|
||||
define(['datetime', 'jQuery', 'globalize', 'material-icons'], function (datetime, $, globalize) {
|
||||
'use strict';
|
||||
|
||||
function getNode(item, folderState, selected) {
|
||||
var htmlName = getNodeInnerHtml(item);
|
||||
|
@ -7,7 +7,7 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
id: item.Id,
|
||||
text: htmlName,
|
||||
state: {
|
||||
opened: item.IsFolder && folderState == "open",
|
||||
opened: item.IsFolder && folderState == 'open',
|
||||
selected: selected
|
||||
},
|
||||
li_attr: {
|
||||
|
@ -17,7 +17,7 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
};
|
||||
if (item.IsFolder) {
|
||||
node.children = [{
|
||||
text: "Loading...",
|
||||
text: 'Loading...',
|
||||
icon: false
|
||||
}];
|
||||
node.icon = false;
|
||||
|
@ -36,30 +36,30 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
function getNodeInnerHtml(item) {
|
||||
var name = item.Name;
|
||||
if (item.Number) {
|
||||
name = item.Number + " - " + name;
|
||||
name = item.Number + ' - ' + name;
|
||||
}
|
||||
if (item.IndexNumber != null && item.Type != "Season") {
|
||||
name = item.IndexNumber + " - " + name;
|
||||
if (item.IndexNumber != null && item.Type != 'Season') {
|
||||
name = item.IndexNumber + ' - ' + name;
|
||||
}
|
||||
var htmlName = "<div class='editorNode'>";
|
||||
if (item.IsFolder) {
|
||||
htmlName += '<i class="material-icons metadataSidebarIcon">folder</i>';
|
||||
} else if (item.MediaType === "Video") {
|
||||
htmlName += '<i class="material-icons metadataSidebarIcon">movie</i>';
|
||||
} else if (item.MediaType === "Audio") {
|
||||
htmlName += '<i class="material-icons metadataSidebarIcon">audiotrack</i>';
|
||||
} else if (item.Type === "TvChannel") {
|
||||
htmlName += '<i class="material-icons metadataSidebarIcon live_tv"></i>';
|
||||
} else if (item.MediaType === "Photo") {
|
||||
htmlName += '<i class="material-icons metadataSidebarIcon">photo</i>';
|
||||
} else if (item.MediaType === "Book") {
|
||||
htmlName += '<i class="material-icons metadataSidebarIcon">book</i>';
|
||||
htmlName += '<span class="material-icons metadataSidebarIcon folder"></span>';
|
||||
} else if (item.MediaType === 'Video') {
|
||||
htmlName += '<span class="material-icons metadataSidebarIcon movie"></span>';
|
||||
} else if (item.MediaType === 'Audio') {
|
||||
htmlName += '<span class="material-icons metadataSidebarIcon audiotrack"></span>';
|
||||
} else if (item.Type === 'TvChannel') {
|
||||
htmlName += '<span class="material-icons metadataSidebarIcon live_tv"></span>';
|
||||
} else if (item.MediaType === 'Photo') {
|
||||
htmlName += '<span class="material-icons metadataSidebarIcon photo"></span>';
|
||||
} else if (item.MediaType === 'Book') {
|
||||
htmlName += '<span class="material-icons metadataSidebarIcon book"></span>';
|
||||
}
|
||||
if (item.LockData) {
|
||||
htmlName += '<i class="material-icons metadataSidebarIcon">lock</i>';
|
||||
htmlName += '<span class="material-icons metadataSidebarIcon lock"></span>';
|
||||
}
|
||||
htmlName += name;
|
||||
htmlName += "</div>";
|
||||
htmlName += '</div>';
|
||||
return htmlName;
|
||||
}
|
||||
|
||||
|
@ -69,36 +69,36 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
}).then(function (result) {
|
||||
var nodes = [];
|
||||
nodes.push({
|
||||
id: "MediaFolders",
|
||||
text: globalize.translate("HeaderMediaFolders"),
|
||||
id: 'MediaFolders',
|
||||
text: globalize.translate('HeaderMediaFolders'),
|
||||
state: {
|
||||
opened: true
|
||||
},
|
||||
li_attr: {
|
||||
itemtype: "mediafolders",
|
||||
itemtype: 'mediafolders',
|
||||
loadedFromServer: true
|
||||
},
|
||||
icon: false
|
||||
});
|
||||
if (result.TotalRecordCount) {
|
||||
nodes.push({
|
||||
id: "livetv",
|
||||
text: globalize.translate("HeaderLiveTV"),
|
||||
id: 'livetv',
|
||||
text: globalize.translate('HeaderLiveTV'),
|
||||
state: {
|
||||
opened: false
|
||||
},
|
||||
li_attr: {
|
||||
itemtype: "livetv"
|
||||
itemtype: 'livetv'
|
||||
},
|
||||
children: [{
|
||||
text: "Loading...",
|
||||
text: 'Loading...',
|
||||
icon: false
|
||||
}],
|
||||
icon: false
|
||||
});
|
||||
}
|
||||
callback.call(scope, nodes);
|
||||
nodesToLoad.push("MediaFolders");
|
||||
nodesToLoad.push('MediaFolders');
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -108,7 +108,7 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
AddCurrentProgram: false
|
||||
}).then(function (result) {
|
||||
var nodes = result.Items.map(function (i) {
|
||||
var state = openItems.indexOf(i.Id) == -1 ? "closed" : "open";
|
||||
var state = openItems.indexOf(i.Id) == -1 ? 'closed' : 'open';
|
||||
return getNode(i, state, false);
|
||||
});
|
||||
callback(nodes);
|
||||
|
@ -116,9 +116,9 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
}
|
||||
|
||||
function loadMediaFolders(page, scope, openItems, callback) {
|
||||
ApiClient.getJSON(ApiClient.getUrl("Library/MediaFolders")).then(function (result) {
|
||||
ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders')).then(function (result) {
|
||||
var nodes = result.Items.map(function (n) {
|
||||
var state = openItems.indexOf(n.Id) == -1 ? "closed" : "open";
|
||||
var state = openItems.indexOf(n.Id) == -1 ? 'closed' : 'open';
|
||||
return getNode(n, state, false);
|
||||
});
|
||||
callback.call(scope, nodes);
|
||||
|
@ -132,21 +132,21 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
|
||||
function loadNode(page, scope, node, openItems, selectedId, currentUser, callback) {
|
||||
var id = node.id;
|
||||
if (id == "#") {
|
||||
if (id == '#') {
|
||||
loadChildrenOfRootNode(page, scope, callback);
|
||||
return;
|
||||
}
|
||||
if (id == "livetv") {
|
||||
if (id == 'livetv') {
|
||||
loadLiveTvChannels(id, openItems, callback);
|
||||
return;
|
||||
}
|
||||
if (id == "MediaFolders") {
|
||||
if (id == 'MediaFolders') {
|
||||
loadMediaFolders(page, scope, openItems, callback);
|
||||
return;
|
||||
}
|
||||
var query = {
|
||||
ParentId: id,
|
||||
Fields: "Settings",
|
||||
Fields: 'Settings',
|
||||
IsVirtualUnaired: false,
|
||||
IsMissing: false,
|
||||
EnableTotalRecordCount: false,
|
||||
|
@ -154,12 +154,12 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
EnableUserData: false
|
||||
};
|
||||
var itemtype = node.li_attr.itemtype;
|
||||
if (itemtype != "Season" && itemtype != "Series") {
|
||||
query.SortBy = "SortName";
|
||||
if (itemtype != 'Season' && itemtype != 'Series') {
|
||||
query.SortBy = 'SortName';
|
||||
}
|
||||
ApiClient.getItems(Dashboard.getCurrentUserId(), query).then(function (result) {
|
||||
var nodes = result.Items.map(function (n) {
|
||||
var state = openItems.indexOf(n.Id) == -1 ? "closed" : "open";
|
||||
var state = openItems.indexOf(n.Id) == -1 ? 'closed' : 'open';
|
||||
return getNode(n, state, n.Id == selectedId);
|
||||
});
|
||||
callback.call(scope, nodes);
|
||||
|
@ -172,14 +172,14 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
}
|
||||
|
||||
function scrollToNode(id) {
|
||||
var elem = $("#" + id)[0];
|
||||
var elem = $('#' + id)[0];
|
||||
if (elem) {
|
||||
elem.scrollIntoView();
|
||||
}
|
||||
}
|
||||
|
||||
function initializeTree(page, currentUser, openItems, selectedId) {
|
||||
require(["jstree"], function () {
|
||||
require(['jstree'], function () {
|
||||
initializeTreeInternal(page, currentUser, openItems, selectedId);
|
||||
});
|
||||
}
|
||||
|
@ -192,41 +192,41 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
serverItemType: node.li_attr.serveritemtype,
|
||||
collectionType: node.li_attr.collectiontype
|
||||
};
|
||||
if (eventData.itemType != "livetv" && eventData.itemType != "mediafolders") {
|
||||
if (eventData.itemType != 'livetv' && eventData.itemType != 'mediafolders') {
|
||||
{
|
||||
this.dispatchEvent(new CustomEvent("itemclicked", {
|
||||
this.dispatchEvent(new CustomEvent('itemclicked', {
|
||||
detail: eventData,
|
||||
bubbles: true,
|
||||
cancelable: false
|
||||
}));
|
||||
}
|
||||
document.querySelector(".editPageSidebar").classList.add("editPageSidebar-withcontent");
|
||||
document.querySelector('.editPageSidebar').classList.add('editPageSidebar-withcontent');
|
||||
} else {
|
||||
document.querySelector(".editPageSidebar").classList.remove("editPageSidebar-withcontent");
|
||||
document.querySelector('.editPageSidebar').classList.remove('editPageSidebar-withcontent');
|
||||
}
|
||||
}
|
||||
|
||||
function onNodeOpen(event, data) {
|
||||
var page = $(this).parents(".page")[0];
|
||||
var page = $(this).parents('.page')[0];
|
||||
var node = data.node;
|
||||
if (node.children && node.children) {
|
||||
loadNodesToLoad(page, node);
|
||||
}
|
||||
if (node.li_attr && node.id != "#" && !node.li_attr.loadedFromServer) {
|
||||
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
|
||||
node.li_attr.loadedFromServer = true;
|
||||
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
||||
$.jstree.reference('.libraryTree', page).load_node(node.id, loadNodeCallback);
|
||||
}
|
||||
}
|
||||
|
||||
function onNodeLoad(event, data) {
|
||||
var page = $(this).parents(".page")[0];
|
||||
var page = $(this).parents('.page')[0];
|
||||
var node = data.node;
|
||||
if (node.children && node.children) {
|
||||
loadNodesToLoad(page, node);
|
||||
}
|
||||
if (node.li_attr && node.id != "#" && !node.li_attr.loadedFromServer) {
|
||||
if (node.li_attr && node.id != '#' && !node.li_attr.loadedFromServer) {
|
||||
node.li_attr.loadedFromServer = true;
|
||||
$.jstree.reference(".libraryTree", page).load_node(node.id, loadNodeCallback);
|
||||
$.jstree.reference('.libraryTree', page).load_node(node.id, loadNodeCallback);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -234,18 +234,18 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
nodesToLoad = [];
|
||||
selectedNodeId = null;
|
||||
$.jstree.destroy();
|
||||
$(".libraryTree", page).jstree({
|
||||
"plugins": ["wholerow"],
|
||||
$('.libraryTree', page).jstree({
|
||||
'plugins': ['wholerow'],
|
||||
core: {
|
||||
check_callback: true,
|
||||
data: function (node, callback) {
|
||||
loadNode(page, this, node, openItems, selectedId, currentUser, callback);
|
||||
},
|
||||
themes: {
|
||||
variant: "large"
|
||||
variant: 'large'
|
||||
}
|
||||
}
|
||||
}).off("select_node.jstree", onNodeSelect).on("select_node.jstree", onNodeSelect).off("open_node.jstree", onNodeOpen).on("open_node.jstree", onNodeOpen).off("load_node.jstree", onNodeLoad).on("load_node.jstree", onNodeLoad);
|
||||
}).off('select_node.jstree', onNodeSelect).on('select_node.jstree', onNodeSelect).off('open_node.jstree', onNodeOpen).on('open_node.jstree', onNodeOpen).off('load_node.jstree', onNodeLoad).on('load_node.jstree', onNodeLoad);
|
||||
}
|
||||
|
||||
function loadNodesToLoad(page, node) {
|
||||
|
@ -256,7 +256,7 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
nodesToLoad = nodesToLoad.filter(function (n) {
|
||||
return n != child;
|
||||
});
|
||||
$.jstree.reference(".libraryTree", page).load_node(child, loadNodeCallback);
|
||||
$.jstree.reference('.libraryTree', page).load_node(child, loadNodeCallback);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -270,14 +270,14 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
}
|
||||
|
||||
function updateEditorNode(page, item) {
|
||||
var elem = $("#" + item.Id + ">a", page)[0];
|
||||
var elem = $('#' + item.Id + '>a', page)[0];
|
||||
if (elem == null) {
|
||||
return;
|
||||
}
|
||||
$(".editorNode", elem).remove();
|
||||
$('.editorNode', elem).remove();
|
||||
$(elem).append(getNodeInnerHtml(item));
|
||||
if (item.IsFolder) {
|
||||
var tree = jQuery.jstree._reference(".libraryTree");
|
||||
var tree = jQuery.jstree._reference('.libraryTree');
|
||||
var currentNode = tree._get_node(null, false);
|
||||
tree.refresh(currentNode);
|
||||
}
|
||||
|
@ -292,15 +292,15 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
return itemId;
|
||||
}
|
||||
var url = window.location.hash || window.location.href;
|
||||
return getParameterByName("id", url);
|
||||
return getParameterByName('id', url);
|
||||
}
|
||||
var nodesToLoad = [];
|
||||
var selectedNodeId;
|
||||
$(document).on("itemsaved", ".metadataEditorPage", function (e, item) {
|
||||
$(document).on('itemsaved', '.metadataEditorPage', function (e, item) {
|
||||
updateEditorNode(this, item);
|
||||
}).on("pagebeforeshow", ".metadataEditorPage", function () {
|
||||
require(["css!assets/css/metadataeditor.css"]);
|
||||
}).on("pagebeforeshow", ".metadataEditorPage", function () {
|
||||
}).on('pagebeforeshow', '.metadataEditorPage', function () {
|
||||
require(['css!assets/css/metadataeditor.css']);
|
||||
}).on('pagebeforeshow', '.metadataEditorPage', function () {
|
||||
var page = this;
|
||||
Dashboard.getCurrentUser().then(function (user) {
|
||||
var id = getCurrentItemId();
|
||||
|
@ -315,9 +315,9 @@ define(["datetime", "jQuery", "globalize", "material-icons"], function (datetime
|
|||
initializeTree(page, user, []);
|
||||
}
|
||||
});
|
||||
}).on("pagebeforehide", ".metadataEditorPage", function () {
|
||||
}).on('pagebeforehide', '.metadataEditorPage', function () {
|
||||
var page = this;
|
||||
$(".libraryTree", page).off("select_node.jstree", onNodeSelect).off("open_node.jstree", onNodeOpen).off("load_node.jstree", onNodeLoad);
|
||||
$('.libraryTree', page).off('select_node.jstree', onNodeSelect).off('open_node.jstree', onNodeOpen).off('load_node.jstree', onNodeLoad);
|
||||
});
|
||||
var itemId;
|
||||
window.MetadataEditor = {
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
// # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
// # THE SOFTWARE.
|
||||
require(['apphost'], function (appHost) {
|
||||
"use strict";
|
||||
'use strict';
|
||||
|
||||
var _GAMEPAD_A_BUTTON_INDEX = 0;
|
||||
var _GAMEPAD_B_BUTTON_INDEX = 1;
|
||||
|
@ -28,16 +28,16 @@ require(['apphost'], function (appHost) {
|
|||
var _GAMEPAD_DPAD_DOWN_BUTTON_INDEX = 13;
|
||||
var _GAMEPAD_DPAD_LEFT_BUTTON_INDEX = 14;
|
||||
var _GAMEPAD_DPAD_RIGHT_BUTTON_INDEX = 15;
|
||||
var _GAMEPAD_A_KEY = "GamepadA";
|
||||
var _GAMEPAD_B_KEY = "GamepadB";
|
||||
var _GAMEPAD_DPAD_UP_KEY = "GamepadDPadUp";
|
||||
var _GAMEPAD_DPAD_DOWN_KEY = "GamepadDPadDown";
|
||||
var _GAMEPAD_DPAD_LEFT_KEY = "GamepadDPadLeft";
|
||||
var _GAMEPAD_DPAD_RIGHT_KEY = "GamepadDPadRight";
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_UP_KEY = "GamepadLeftThumbStickUp";
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_DOWN_KEY = "GamepadLeftThumbStickDown";
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_LEFT_KEY = "GamepadLeftThumbStickLeft";
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_RIGHT_KEY = "GamepadLeftThumbStickRight";
|
||||
var _GAMEPAD_A_KEY = 'GamepadA';
|
||||
var _GAMEPAD_B_KEY = 'GamepadB';
|
||||
var _GAMEPAD_DPAD_UP_KEY = 'GamepadDPadUp';
|
||||
var _GAMEPAD_DPAD_DOWN_KEY = 'GamepadDPadDown';
|
||||
var _GAMEPAD_DPAD_LEFT_KEY = 'GamepadDPadLeft';
|
||||
var _GAMEPAD_DPAD_RIGHT_KEY = 'GamepadDPadRight';
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_UP_KEY = 'GamepadLeftThumbStickUp';
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_DOWN_KEY = 'GamepadLeftThumbStickDown';
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_LEFT_KEY = 'GamepadLeftThumbStickLeft';
|
||||
var _GAMEPAD_LEFT_THUMBSTICK_RIGHT_KEY = 'GamepadLeftThumbStickRight';
|
||||
var _GAMEPAD_A_KEYCODE = 0;
|
||||
var _GAMEPAD_B_KEYCODE = 27;
|
||||
var _GAMEPAD_DPAD_UP_KEYCODE = 38;
|
||||
|
@ -234,7 +234,7 @@ require(['apphost'], function (appHost) {
|
|||
}
|
||||
|
||||
if (fire && keyCode) {
|
||||
raiseEvent("keydown", key, keyCode);
|
||||
raiseEvent('keydown', key, keyCode);
|
||||
}
|
||||
|
||||
} else if (newPressedState === false && oldPressedState === true) {
|
||||
|
@ -243,7 +243,7 @@ require(['apphost'], function (appHost) {
|
|||
|
||||
// button up
|
||||
if (keyCode) {
|
||||
raiseEvent("keyup", key, keyCode);
|
||||
raiseEvent('keyup', key, keyCode);
|
||||
}
|
||||
if (clickonKeyUp) {
|
||||
clickElement(document.activeElement || window);
|
||||
|
@ -375,7 +375,7 @@ require(['apphost'], function (appHost) {
|
|||
function onFocusOrGamepadAttach(e) {
|
||||
/* eslint-disable-next-line compat/compat */
|
||||
if (isGamepadConnected() && document.hasFocus()) {
|
||||
console.log("Gamepad connected! Starting input loop");
|
||||
console.log('Gamepad connected! Starting input loop');
|
||||
startInputLoop();
|
||||
}
|
||||
}
|
||||
|
@ -383,28 +383,28 @@ require(['apphost'], function (appHost) {
|
|||
function onFocusOrGamepadDetach(e) {
|
||||
/* eslint-disable-next-line compat/compat */
|
||||
if (!isGamepadConnected() || !document.hasFocus()) {
|
||||
console.log("Gamepad disconnected! No other gamepads are connected, stopping input loop");
|
||||
console.log('Gamepad disconnected! No other gamepads are connected, stopping input loop');
|
||||
stopInputLoop();
|
||||
} else {
|
||||
console.log("Gamepad disconnected! There are gamepads still connected.");
|
||||
console.log('Gamepad disconnected! There are gamepads still connected.');
|
||||
}
|
||||
}
|
||||
|
||||
// Event listeners for any change in gamepads' state.
|
||||
window.addEventListener("gamepaddisconnected", onFocusOrGamepadDetach);
|
||||
window.addEventListener("gamepadconnected", onFocusOrGamepadAttach);
|
||||
window.addEventListener("blur", onFocusOrGamepadDetach);
|
||||
window.addEventListener("focus", onFocusOrGamepadAttach);
|
||||
window.addEventListener('gamepaddisconnected', onFocusOrGamepadDetach);
|
||||
window.addEventListener('gamepadconnected', onFocusOrGamepadAttach);
|
||||
window.addEventListener('blur', onFocusOrGamepadDetach);
|
||||
window.addEventListener('focus', onFocusOrGamepadAttach);
|
||||
|
||||
onFocusOrGamepadAttach();
|
||||
|
||||
// The gamepadInputEmulation is a string property that exists in JavaScript UWAs and in WebViews in UWAs.
|
||||
// It won't exist in Win8.1 style apps or browsers.
|
||||
if (window.navigator && typeof window.navigator.gamepadInputEmulation === "string") {
|
||||
if (window.navigator && typeof window.navigator.gamepadInputEmulation === 'string') {
|
||||
// We want the gamepad to provide gamepad VK keyboard events rather than moving a
|
||||
// mouse like cursor. Set to "keyboard", the gamepad will provide such keyboard events
|
||||
// and provide input to the DOM navigator.getGamepads API.
|
||||
window.navigator.gamepadInputEmulation = "gamepad";
|
||||
window.navigator.gamepadInputEmulation = 'gamepad';
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -3,73 +3,73 @@
|
|||
import browser from 'browser';
|
||||
|
||||
export function getDeviceIcon(device) {
|
||||
var baseUrl = "assets/img/devices/";
|
||||
var baseUrl = 'assets/img/devices/';
|
||||
switch (device.AppName || device.Client) {
|
||||
case "Samsung Smart TV":
|
||||
return baseUrl + "samsung.svg";
|
||||
case "Xbox One":
|
||||
return baseUrl + "xbox.svg";
|
||||
case "Sony PS4":
|
||||
return baseUrl + "playstation.svg";
|
||||
case "Kodi":
|
||||
return baseUrl + "kodi.svg";
|
||||
case "Jellyfin Android":
|
||||
case "Android TV":
|
||||
return baseUrl + "android.svg";
|
||||
case "Jellyfin Web":
|
||||
case 'Samsung Smart TV':
|
||||
return baseUrl + 'samsung.svg';
|
||||
case 'Xbox One':
|
||||
return baseUrl + 'xbox.svg';
|
||||
case 'Sony PS4':
|
||||
return baseUrl + 'playstation.svg';
|
||||
case 'Kodi':
|
||||
return baseUrl + 'kodi.svg';
|
||||
case 'Jellyfin Android':
|
||||
case 'Android TV':
|
||||
return baseUrl + 'android.svg';
|
||||
case 'Jellyfin Web':
|
||||
switch (device.Name || device.DeviceName) {
|
||||
case "Opera":
|
||||
case "Opera TV":
|
||||
case "Opera Android":
|
||||
return baseUrl + "opera.svg";
|
||||
case "Chrome":
|
||||
case "Chrome Android":
|
||||
return baseUrl + "chrome.svg";
|
||||
case "Firefox":
|
||||
case "Firefox Android":
|
||||
return baseUrl + "firefox.svg";
|
||||
case "Safari":
|
||||
case "Safari iPad":
|
||||
case "Safari iPhone":
|
||||
return baseUrl + "safari.svg";
|
||||
case "Edge":
|
||||
return baseUrl + "edge.svg";
|
||||
case "Internet Explorer":
|
||||
return baseUrl + "msie.svg";
|
||||
case 'Opera':
|
||||
case 'Opera TV':
|
||||
case 'Opera Android':
|
||||
return baseUrl + 'opera.svg';
|
||||
case 'Chrome':
|
||||
case 'Chrome Android':
|
||||
return baseUrl + 'chrome.svg';
|
||||
case 'Firefox':
|
||||
case 'Firefox Android':
|
||||
return baseUrl + 'firefox.svg';
|
||||
case 'Safari':
|
||||
case 'Safari iPad':
|
||||
case 'Safari iPhone':
|
||||
return baseUrl + 'safari.svg';
|
||||
case 'Edge':
|
||||
return baseUrl + 'edge.svg';
|
||||
case 'Internet Explorer':
|
||||
return baseUrl + 'msie.svg';
|
||||
default:
|
||||
return baseUrl + "html5.svg";
|
||||
return baseUrl + 'html5.svg';
|
||||
}
|
||||
default:
|
||||
return baseUrl + "other.svg";
|
||||
return baseUrl + 'other.svg';
|
||||
}
|
||||
}
|
||||
|
||||
export function getLibraryIcon(library) {
|
||||
switch (library) {
|
||||
case "movies":
|
||||
return "video_library";
|
||||
case "music":
|
||||
return "library_music";
|
||||
case "photos":
|
||||
return "photo_library";
|
||||
case "livetv":
|
||||
return "live_tv";
|
||||
case "tvshows":
|
||||
return "tv";
|
||||
case "trailers":
|
||||
return "local_movies";
|
||||
case "homevideos":
|
||||
return "photo_library";
|
||||
case "musicvideos":
|
||||
return "music_video";
|
||||
case "books":
|
||||
return "library_books";
|
||||
case "channels":
|
||||
return "videocam";
|
||||
case "playlists":
|
||||
return "view_list";
|
||||
case 'movies':
|
||||
return 'video_library';
|
||||
case 'music':
|
||||
return 'library_music';
|
||||
case 'photos':
|
||||
return 'photo_library';
|
||||
case 'livetv':
|
||||
return 'live_tv';
|
||||
case 'tvshows':
|
||||
return 'tv';
|
||||
case 'trailers':
|
||||
return 'local_movies';
|
||||
case 'homevideos':
|
||||
return 'photo_library';
|
||||
case 'musicvideos':
|
||||
return 'music_video';
|
||||
case 'books':
|
||||
return 'library_books';
|
||||
case 'channels':
|
||||
return 'videocam';
|
||||
case 'playlists':
|
||||
return 'view_list';
|
||||
default:
|
||||
return "folder";
|
||||
return 'folder';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -74,7 +74,7 @@ import appHost from 'apphost';
|
|||
}
|
||||
|
||||
if (eventListenerCount) {
|
||||
const customEvent = new CustomEvent("command", {
|
||||
const customEvent = new CustomEvent('command', {
|
||||
detail: {
|
||||
command: commandName
|
||||
},
|
||||
|
|
|
@ -1,105 +1,105 @@
|
|||
define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryBrowser", "globalize", "emby-itemscontainer", "emby-button"], function (connectionManager, listView, cardBuilder, imageLoader, libraryBrowser, globalize) {
|
||||
"use strict";
|
||||
define(['connectionManager', 'listView', 'cardBuilder', 'imageLoader', 'libraryBrowser', 'globalize', 'emby-itemscontainer', 'emby-button'], function (connectionManager, listView, cardBuilder, imageLoader, libraryBrowser, globalize) {
|
||||
'use strict';
|
||||
|
||||
function renderItems(page, item) {
|
||||
var sections = [];
|
||||
|
||||
if (item.ArtistCount) {
|
||||
sections.push({
|
||||
name: globalize.translate("TabArtists"),
|
||||
type: "MusicArtist"
|
||||
name: globalize.translate('TabArtists'),
|
||||
type: 'MusicArtist'
|
||||
});
|
||||
}
|
||||
|
||||
if (item.ProgramCount && "Person" == item.Type) {
|
||||
if (item.ProgramCount && 'Person' == item.Type) {
|
||||
sections.push({
|
||||
name: globalize.translate("HeaderUpcomingOnTV"),
|
||||
type: "Program"
|
||||
name: globalize.translate('HeaderUpcomingOnTV'),
|
||||
type: 'Program'
|
||||
});
|
||||
}
|
||||
|
||||
if (item.MovieCount) {
|
||||
sections.push({
|
||||
name: globalize.translate("TabMovies"),
|
||||
type: "Movie"
|
||||
name: globalize.translate('TabMovies'),
|
||||
type: 'Movie'
|
||||
});
|
||||
}
|
||||
|
||||
if (item.SeriesCount) {
|
||||
sections.push({
|
||||
name: globalize.translate("TabShows"),
|
||||
type: "Series"
|
||||
name: globalize.translate('TabShows'),
|
||||
type: 'Series'
|
||||
});
|
||||
}
|
||||
|
||||
if (item.EpisodeCount) {
|
||||
sections.push({
|
||||
name: globalize.translate("TabEpisodes"),
|
||||
type: "Episode"
|
||||
name: globalize.translate('TabEpisodes'),
|
||||
type: 'Episode'
|
||||
});
|
||||
}
|
||||
|
||||
if (item.TrailerCount) {
|
||||
sections.push({
|
||||
name: globalize.translate("TabTrailers"),
|
||||
type: "Trailer"
|
||||
name: globalize.translate('TabTrailers'),
|
||||
type: 'Trailer'
|
||||
});
|
||||
}
|
||||
|
||||
if (item.AlbumCount) {
|
||||
sections.push({
|
||||
name: globalize.translate("TabAlbums"),
|
||||
type: "MusicAlbum"
|
||||
name: globalize.translate('TabAlbums'),
|
||||
type: 'MusicAlbum'
|
||||
});
|
||||
}
|
||||
|
||||
if (item.MusicVideoCount) {
|
||||
sections.push({
|
||||
name: globalize.translate("TabMusicVideos"),
|
||||
type: "MusicVideo"
|
||||
name: globalize.translate('TabMusicVideos'),
|
||||
type: 'MusicVideo'
|
||||
});
|
||||
}
|
||||
|
||||
var elem = page.querySelector("#childrenContent");
|
||||
var elem = page.querySelector('#childrenContent');
|
||||
elem.innerHTML = sections.map(function (section) {
|
||||
var html = "";
|
||||
var sectionClass = "verticalSection";
|
||||
var html = '';
|
||||
var sectionClass = 'verticalSection';
|
||||
|
||||
if ("Audio" === section.type) {
|
||||
sectionClass += " verticalSection-extrabottompadding";
|
||||
if ('Audio' === section.type) {
|
||||
sectionClass += ' verticalSection-extrabottompadding';
|
||||
}
|
||||
|
||||
html += '<div class="' + sectionClass + '" data-type="' + section.type + '">';
|
||||
html += '<div class="sectionTitleContainer sectionTitleContainer-cards">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">';
|
||||
html += section.name;
|
||||
html += "</h2>";
|
||||
html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + globalize.translate("ButtonMore") + "</button></a>";
|
||||
html += "</div>";
|
||||
html += '</h2>';
|
||||
html += '<a is="emby-linkbutton" href="#" class="clearLink hide" style="margin-left:1em;vertical-align:middle;"><button is="emby-button" type="button" class="raised more raised-mini noIcon">' + globalize.translate('ButtonMore') + '</button></a>';
|
||||
html += '</div>';
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer padded-left padded-right">';
|
||||
html += "</div>";
|
||||
return html += "</div>";
|
||||
}).join("");
|
||||
var sectionElems = elem.querySelectorAll(".verticalSection");
|
||||
html += '</div>';
|
||||
return html += '</div>';
|
||||
}).join('');
|
||||
var sectionElems = elem.querySelectorAll('.verticalSection');
|
||||
|
||||
for (var i = 0, length = sectionElems.length; i < length; i++) {
|
||||
renderSection(page, item, sectionElems[i], sectionElems[i].getAttribute("data-type"));
|
||||
renderSection(page, item, sectionElems[i], sectionElems[i].getAttribute('data-type'));
|
||||
}
|
||||
}
|
||||
|
||||
function renderSection(page, item, element, type) {
|
||||
switch (type) {
|
||||
case "Program":
|
||||
case 'Program':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "Program",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'Program',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 10,
|
||||
SortBy: "StartDate"
|
||||
SortBy: 'StartDate'
|
||||
}, {
|
||||
shape: "overflowBackdrop",
|
||||
shape: 'overflowBackdrop',
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
overlayMoreButton: true,
|
||||
|
@ -111,17 +111,17 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
});
|
||||
break;
|
||||
|
||||
case "Movie":
|
||||
case 'Movie':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "Movie",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'Movie',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 10,
|
||||
SortBy: "SortName"
|
||||
SortBy: 'SortName'
|
||||
}, {
|
||||
shape: "overflowPortrait",
|
||||
shape: 'overflowPortrait',
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
overlayMoreButton: true,
|
||||
|
@ -130,68 +130,68 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
});
|
||||
break;
|
||||
|
||||
case "MusicVideo":
|
||||
case 'MusicVideo':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "MusicVideo",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'MusicVideo',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 10,
|
||||
SortBy: "SortName"
|
||||
SortBy: 'SortName'
|
||||
}, {
|
||||
shape: "overflowPortrait",
|
||||
shape: 'overflowPortrait',
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
overlayPlayButton: true
|
||||
});
|
||||
break;
|
||||
|
||||
case "Trailer":
|
||||
case 'Trailer':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "Trailer",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'Trailer',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 10,
|
||||
SortBy: "SortName"
|
||||
SortBy: 'SortName'
|
||||
}, {
|
||||
shape: "overflowPortrait",
|
||||
shape: 'overflowPortrait',
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
overlayPlayButton: true
|
||||
});
|
||||
break;
|
||||
|
||||
case "Series":
|
||||
case 'Series':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "Series",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'Series',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 10,
|
||||
SortBy: "SortName"
|
||||
SortBy: 'SortName'
|
||||
}, {
|
||||
shape: "overflowPortrait",
|
||||
shape: 'overflowPortrait',
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
overlayMoreButton: true
|
||||
});
|
||||
break;
|
||||
|
||||
case "MusicAlbum":
|
||||
case 'MusicAlbum':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "MusicAlbum",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
SortOrder: "Descending",
|
||||
SortBy: "ProductionYear,Sortname"
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'MusicAlbum',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
SortOrder: 'Descending',
|
||||
SortBy: 'ProductionYear,Sortname'
|
||||
}, {
|
||||
shape: "overflowSquare",
|
||||
shape: 'overflowSquare',
|
||||
playFromHere: true,
|
||||
showTitle: true,
|
||||
showYear: true,
|
||||
|
@ -201,17 +201,17 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
});
|
||||
break;
|
||||
|
||||
case "MusicArtist":
|
||||
case 'MusicArtist':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "MusicArtist",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'MusicArtist',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 8,
|
||||
SortBy: "SortName"
|
||||
SortBy: 'SortName'
|
||||
}, {
|
||||
shape: "overflowSquare",
|
||||
shape: 'overflowSquare',
|
||||
playFromHere: true,
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
|
@ -221,17 +221,17 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
});
|
||||
break;
|
||||
|
||||
case "Episode":
|
||||
case 'Episode':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "Episode",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'Episode',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
Limit: 6,
|
||||
SortBy: "SortName"
|
||||
SortBy: 'SortName'
|
||||
}, {
|
||||
shape: "overflowBackdrop",
|
||||
shape: 'overflowBackdrop',
|
||||
showTitle: true,
|
||||
showParentTitle: true,
|
||||
centerText: true,
|
||||
|
@ -239,17 +239,17 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
});
|
||||
break;
|
||||
|
||||
case "Audio":
|
||||
case 'Audio':
|
||||
loadItems(element, item, type, {
|
||||
MediaTypes: "",
|
||||
IncludeItemTypes: "Audio",
|
||||
PersonTypes: "",
|
||||
ArtistIds: "",
|
||||
AlbumArtistIds: "",
|
||||
SortBy: "AlbumArtist,Album,SortName"
|
||||
MediaTypes: '',
|
||||
IncludeItemTypes: 'Audio',
|
||||
PersonTypes: '',
|
||||
ArtistIds: '',
|
||||
AlbumArtistIds: '',
|
||||
SortBy: 'AlbumArtist,Album,SortName'
|
||||
}, {
|
||||
playFromHere: true,
|
||||
action: "playallfromhere",
|
||||
action: 'playallfromhere',
|
||||
smallIcon: true,
|
||||
artist: true
|
||||
});
|
||||
|
@ -259,27 +259,27 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
function loadItems(element, item, type, query, listOptions) {
|
||||
query = getQuery(query, item);
|
||||
getItemsFunction(query, item)(query.StartIndex, query.Limit, query.Fields).then(function (result) {
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
if (query.Limit && result.TotalRecordCount > query.Limit) {
|
||||
var link = element.querySelector("a");
|
||||
link.classList.remove("hide");
|
||||
link.setAttribute("href", getMoreItemsHref(item, type));
|
||||
var link = element.querySelector('a');
|
||||
link.classList.remove('hide');
|
||||
link.setAttribute('href', getMoreItemsHref(item, type));
|
||||
} else {
|
||||
element.querySelector("a").classList.add("hide");
|
||||
element.querySelector('a').classList.add('hide');
|
||||
}
|
||||
|
||||
listOptions.items = result.Items;
|
||||
var itemsContainer = element.querySelector(".itemsContainer");
|
||||
var itemsContainer = element.querySelector('.itemsContainer');
|
||||
|
||||
if ("Audio" == type) {
|
||||
if ('Audio' == type) {
|
||||
html = listView.getListViewHtml(listOptions);
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
} else {
|
||||
html = cardBuilder.getCardsHtml(listOptions);
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = html;
|
||||
|
@ -288,51 +288,51 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
}
|
||||
|
||||
function getMoreItemsHref(item, type) {
|
||||
if ("Genre" == item.Type) {
|
||||
return "list.html?type=" + type + "&genreId=" + item.Id + "&serverId=" + item.ServerId;
|
||||
if ('Genre' == item.Type) {
|
||||
return 'list.html?type=' + type + '&genreId=' + item.Id + '&serverId=' + item.ServerId;
|
||||
}
|
||||
|
||||
if ("MusicGenre" == item.Type) {
|
||||
return "list.html?type=" + type + "&musicGenreId=" + item.Id + "&serverId=" + item.ServerId;
|
||||
if ('MusicGenre' == item.Type) {
|
||||
return 'list.html?type=' + type + '&musicGenreId=' + item.Id + '&serverId=' + item.ServerId;
|
||||
}
|
||||
|
||||
if ("Studio" == item.Type) {
|
||||
return "list.html?type=" + type + "&studioId=" + item.Id + "&serverId=" + item.ServerId;
|
||||
if ('Studio' == item.Type) {
|
||||
return 'list.html?type=' + type + '&studioId=' + item.Id + '&serverId=' + item.ServerId;
|
||||
}
|
||||
|
||||
if ("MusicArtist" == item.Type) {
|
||||
return "list.html?type=" + type + "&artistId=" + item.Id + "&serverId=" + item.ServerId;
|
||||
if ('MusicArtist' == item.Type) {
|
||||
return 'list.html?type=' + type + '&artistId=' + item.Id + '&serverId=' + item.ServerId;
|
||||
}
|
||||
|
||||
if ("Person" == item.Type) {
|
||||
return "list.html?type=" + type + "&personId=" + item.Id + "&serverId=" + item.ServerId;
|
||||
if ('Person' == item.Type) {
|
||||
return 'list.html?type=' + type + '&personId=' + item.Id + '&serverId=' + item.ServerId;
|
||||
}
|
||||
|
||||
return "list.html?type=" + type + "&parentId=" + item.Id + "&serverId=" + item.ServerId;
|
||||
return 'list.html?type=' + type + '&parentId=' + item.Id + '&serverId=' + item.ServerId;
|
||||
}
|
||||
|
||||
function addCurrentItemToQuery(query, item) {
|
||||
if (item.Type == "Person") {
|
||||
if (item.Type == 'Person') {
|
||||
query.PersonIds = item.Id;
|
||||
} else if (item.Type == "Genre") {
|
||||
} else if (item.Type == 'Genre') {
|
||||
query.Genres = item.Name;
|
||||
} else if (item.Type == "MusicGenre") {
|
||||
} else if (item.Type == 'MusicGenre') {
|
||||
query.Genres = item.Name;
|
||||
} else if (item.Type == "GameGenre") {
|
||||
} else if (item.Type == 'GameGenre') {
|
||||
query.Genres = item.Name;
|
||||
} else if (item.Type == "Studio") {
|
||||
} else if (item.Type == 'Studio') {
|
||||
query.StudioIds = item.Id;
|
||||
} else if (item.Type == "MusicArtist") {
|
||||
} else if (item.Type == 'MusicArtist') {
|
||||
query.AlbumArtistIds = item.Id;
|
||||
}
|
||||
}
|
||||
|
||||
function getQuery(options, item) {
|
||||
var query = {
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "",
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: '',
|
||||
Recursive: true,
|
||||
Fields: "AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio,BasicSyncInfo",
|
||||
Fields: 'AudioInfo,SeriesInfo,ParentId,PrimaryImageAspectRatio,BasicSyncInfo',
|
||||
Limit: 100,
|
||||
StartIndex: 0,
|
||||
CollapseBoxSetItems: false
|
||||
|
@ -349,12 +349,12 @@ define(["connectionManager", "listView", "cardBuilder", "imageLoader", "libraryB
|
|||
query.Limit = limit;
|
||||
|
||||
if (fields) {
|
||||
query.Fields += "," + fields;
|
||||
query.Fields += ',' + fields;
|
||||
}
|
||||
|
||||
var apiClient = connectionManager.getApiClient(item.ServerId);
|
||||
|
||||
if ("MusicArtist" === query.IncludeItemTypes) {
|
||||
if ('MusicArtist' === query.IncludeItemTypes) {
|
||||
query.IncludeItemTypes = null;
|
||||
return apiClient.getAlbumArtists(apiClient.getCurrentUserId(), query);
|
||||
}
|
||||
|
|
|
@ -3,49 +3,49 @@
|
|||
* @module components/input/keyboardnavigation
|
||||
*/
|
||||
|
||||
import inputManager from "inputManager";
|
||||
import layoutManager from "layoutManager";
|
||||
import inputManager from 'inputManager';
|
||||
import layoutManager from 'layoutManager';
|
||||
|
||||
/**
|
||||
* Key name mapping.
|
||||
*/
|
||||
const KeyNames = {
|
||||
13: "Enter",
|
||||
19: "Pause",
|
||||
27: "Escape",
|
||||
32: "Space",
|
||||
37: "ArrowLeft",
|
||||
38: "ArrowUp",
|
||||
39: "ArrowRight",
|
||||
40: "ArrowDown",
|
||||
13: 'Enter',
|
||||
19: 'Pause',
|
||||
27: 'Escape',
|
||||
32: 'Space',
|
||||
37: 'ArrowLeft',
|
||||
38: 'ArrowUp',
|
||||
39: 'ArrowRight',
|
||||
40: 'ArrowDown',
|
||||
// MediaRewind (Tizen/WebOS)
|
||||
412: "MediaRewind",
|
||||
412: 'MediaRewind',
|
||||
// MediaStop (Tizen/WebOS)
|
||||
413: "MediaStop",
|
||||
413: 'MediaStop',
|
||||
// MediaPlay (Tizen/WebOS)
|
||||
415: "MediaPlay",
|
||||
415: 'MediaPlay',
|
||||
// MediaFastForward (Tizen/WebOS)
|
||||
417: "MediaFastForward",
|
||||
417: 'MediaFastForward',
|
||||
// Back (WebOS)
|
||||
461: "Back",
|
||||
461: 'Back',
|
||||
// Back (Tizen)
|
||||
10009: "Back",
|
||||
10009: 'Back',
|
||||
// MediaTrackPrevious (Tizen)
|
||||
10232: "MediaTrackPrevious",
|
||||
10232: 'MediaTrackPrevious',
|
||||
// MediaTrackNext (Tizen)
|
||||
10233: "MediaTrackNext",
|
||||
10233: 'MediaTrackNext',
|
||||
// MediaPlayPause (Tizen)
|
||||
10252: "MediaPlayPause"
|
||||
10252: 'MediaPlayPause'
|
||||
};
|
||||
|
||||
/**
|
||||
* Keys used for keyboard navigation.
|
||||
*/
|
||||
const NavigationKeys = ["ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"];
|
||||
const NavigationKeys = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown'];
|
||||
|
||||
let hasFieldKey = false;
|
||||
try {
|
||||
hasFieldKey = "key" in new KeyboardEvent("keydown");
|
||||
hasFieldKey = 'key' in new KeyboardEvent('keydown');
|
||||
} catch (e) {
|
||||
console.error("error checking 'key' field");
|
||||
}
|
||||
|
@ -78,7 +78,7 @@ export function isNavigationKey(key) {
|
|||
}
|
||||
|
||||
export function enable() {
|
||||
document.addEventListener("keydown", function (e) {
|
||||
document.addEventListener('keydown', function (e) {
|
||||
const key = getKeyName(e);
|
||||
|
||||
// Ignore navigation keys for non-TV
|
||||
|
@ -89,54 +89,54 @@ export function enable() {
|
|||
let capture = true;
|
||||
|
||||
switch (key) {
|
||||
case "ArrowLeft":
|
||||
inputManager.handle("left");
|
||||
case 'ArrowLeft':
|
||||
inputManager.handle('left');
|
||||
break;
|
||||
case "ArrowUp":
|
||||
inputManager.handle("up");
|
||||
case 'ArrowUp':
|
||||
inputManager.handle('up');
|
||||
break;
|
||||
case "ArrowRight":
|
||||
inputManager.handle("right");
|
||||
case 'ArrowRight':
|
||||
inputManager.handle('right');
|
||||
break;
|
||||
case "ArrowDown":
|
||||
inputManager.handle("down");
|
||||
case 'ArrowDown':
|
||||
inputManager.handle('down');
|
||||
break;
|
||||
|
||||
case "Back":
|
||||
inputManager.handle("back");
|
||||
case 'Back':
|
||||
inputManager.handle('back');
|
||||
break;
|
||||
|
||||
case "Escape":
|
||||
case 'Escape':
|
||||
if (layoutManager.tv) {
|
||||
inputManager.handle("back");
|
||||
inputManager.handle('back');
|
||||
} else {
|
||||
capture = false;
|
||||
}
|
||||
break;
|
||||
|
||||
case "MediaPlay":
|
||||
inputManager.handle("play");
|
||||
case 'MediaPlay':
|
||||
inputManager.handle('play');
|
||||
break;
|
||||
case "Pause":
|
||||
inputManager.handle("pause");
|
||||
case 'Pause':
|
||||
inputManager.handle('pause');
|
||||
break;
|
||||
case "MediaPlayPause":
|
||||
inputManager.handle("playpause");
|
||||
case 'MediaPlayPause':
|
||||
inputManager.handle('playpause');
|
||||
break;
|
||||
case "MediaRewind":
|
||||
inputManager.handle("rewind");
|
||||
case 'MediaRewind':
|
||||
inputManager.handle('rewind');
|
||||
break;
|
||||
case "MediaFastForward":
|
||||
inputManager.handle("fastforward");
|
||||
case 'MediaFastForward':
|
||||
inputManager.handle('fastforward');
|
||||
break;
|
||||
case "MediaStop":
|
||||
inputManager.handle("stop");
|
||||
case 'MediaStop':
|
||||
inputManager.handle('stop');
|
||||
break;
|
||||
case "MediaTrackPrevious":
|
||||
inputManager.handle("previoustrack");
|
||||
case 'MediaTrackPrevious':
|
||||
inputManager.handle('previoustrack');
|
||||
break;
|
||||
case "MediaTrackNext":
|
||||
inputManager.handle("nexttrack");
|
||||
case 'MediaTrackNext':
|
||||
inputManager.handle('nexttrack');
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -144,7 +144,7 @@ export function enable() {
|
|||
}
|
||||
|
||||
if (capture) {
|
||||
console.debug("disabling default event handling");
|
||||
console.debug('disabling default event handling');
|
||||
e.preventDefault();
|
||||
}
|
||||
});
|
||||
|
@ -153,14 +153,14 @@ export function enable() {
|
|||
// Gamepad initialisation. No script is required if no gamepads are present at init time, saving a bit of resources.
|
||||
// Whenever the gamepad is connected, we hand all the control of the gamepad to gamepadtokey.js by removing the event handler
|
||||
function attachGamepadScript(e) {
|
||||
console.log("Gamepad connected! Attaching gamepadtokey.js script");
|
||||
window.removeEventListener("gamepadconnected", attachGamepadScript);
|
||||
require(["scripts/gamepadtokey"]);
|
||||
console.log('Gamepad connected! Attaching gamepadtokey.js script');
|
||||
window.removeEventListener('gamepadconnected', attachGamepadScript);
|
||||
require(['scripts/gamepadtokey']);
|
||||
}
|
||||
|
||||
// No need to check for gamepads manually at load time, the eventhandler will be fired for that
|
||||
if (navigator.getGamepads) { /* eslint-disable-line compat/compat */
|
||||
window.addEventListener("gamepadconnected", attachGamepadScript);
|
||||
window.addEventListener('gamepadconnected', attachGamepadScript);
|
||||
}
|
||||
|
||||
export default {
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
define(["userSettings", "globalize"], function (userSettings, globalize) {
|
||||
"use strict";
|
||||
define(['userSettings', 'globalize'], function (userSettings, globalize) {
|
||||
'use strict';
|
||||
|
||||
var libraryBrowser = {
|
||||
getSavedQueryKey: function (modifier) {
|
||||
return window.location.href.split("#")[0] + (modifier || "");
|
||||
return window.location.href.split('#')[0] + (modifier || '');
|
||||
},
|
||||
loadSavedQueryValues: function (key, query) {
|
||||
var values = userSettings.get(key);
|
||||
|
@ -29,34 +29,34 @@ define(["userSettings", "globalize"], function (userSettings, globalize) {
|
|||
userSettings.set(key, JSON.stringify(values));
|
||||
},
|
||||
saveViewSetting: function (key, value) {
|
||||
userSettings.set(key + "-_view", value);
|
||||
userSettings.set(key + '-_view', value);
|
||||
},
|
||||
getSavedView: function (key) {
|
||||
return userSettings.get(key + "-_view");
|
||||
return userSettings.get(key + '-_view');
|
||||
},
|
||||
showLayoutMenu: function (button, currentLayout, views) {
|
||||
var dispatchEvent = true;
|
||||
|
||||
if (!views) {
|
||||
dispatchEvent = false;
|
||||
views = button.getAttribute("data-layouts");
|
||||
views = views ? views.split(",") : ["List", "Poster", "PosterCard", "Thumb", "ThumbCard"];
|
||||
views = button.getAttribute('data-layouts');
|
||||
views = views ? views.split(',') : ['List', 'Poster', 'PosterCard', 'Thumb', 'ThumbCard'];
|
||||
}
|
||||
|
||||
var menuItems = views.map(function (v) {
|
||||
return {
|
||||
name: globalize.translate("Option" + v),
|
||||
name: globalize.translate('Option' + v),
|
||||
id: v,
|
||||
selected: currentLayout == v
|
||||
};
|
||||
});
|
||||
|
||||
require(["actionsheet"], function (actionsheet) {
|
||||
require(['actionsheet'], function (actionsheet) {
|
||||
actionsheet.show({
|
||||
items: menuItems,
|
||||
positionTo: button,
|
||||
callback: function (id) {
|
||||
button.dispatchEvent(new CustomEvent("layoutchange", {
|
||||
button.dispatchEvent(new CustomEvent('layoutchange', {
|
||||
detail: {
|
||||
viewStyle: id
|
||||
},
|
||||
|
@ -66,7 +66,7 @@ define(["userSettings", "globalize"], function (userSettings, globalize) {
|
|||
|
||||
if (!dispatchEvent) {
|
||||
if (window.$) {
|
||||
$(button).trigger("layoutchange", [id]);
|
||||
$(button).trigger('layoutchange', [id]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -77,49 +77,49 @@ define(["userSettings", "globalize"], function (userSettings, globalize) {
|
|||
var startIndex = options.startIndex;
|
||||
var limit = options.limit;
|
||||
var totalRecordCount = options.totalRecordCount;
|
||||
var html = "";
|
||||
var html = '';
|
||||
var recordsEnd = Math.min(startIndex + limit, totalRecordCount);
|
||||
var showControls = limit < totalRecordCount;
|
||||
|
||||
if (html += '<div class="listPaging">', showControls) {
|
||||
html += '<span style="vertical-align:middle;">';
|
||||
html += globalize.translate("ListPaging", (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount);
|
||||
html += "</span>";
|
||||
html += globalize.translate('ListPaging', (totalRecordCount ? startIndex + 1 : 0), recordsEnd, totalRecordCount);
|
||||
html += '</span>';
|
||||
}
|
||||
|
||||
if (showControls || options.viewButton || options.filterButton || options.sortButton || options.addLayoutButton) {
|
||||
html += '<div style="display:inline-block;">';
|
||||
|
||||
if (showControls) {
|
||||
html += '<button is="paper-icon-button-light" class="btnPreviousPage autoSize" ' + (startIndex ? "" : "disabled") + '><i class="material-icons arrow_back"></i></button>';
|
||||
html += '<button is="paper-icon-button-light" class="btnNextPage autoSize" ' + (startIndex + limit >= totalRecordCount ? "disabled" : "") + '><i class="material-icons arrow_forward"></i></button>';
|
||||
html += '<button is="paper-icon-button-light" class="btnPreviousPage autoSize" ' + (startIndex ? '' : 'disabled') + '><span class="material-icons arrow_back"></span></button>';
|
||||
html += '<button is="paper-icon-button-light" class="btnNextPage autoSize" ' + (startIndex + limit >= totalRecordCount ? 'disabled' : '') + '><span class="material-icons arrow_forward"></span></button>';
|
||||
}
|
||||
|
||||
if (options.addLayoutButton) {
|
||||
html += '<button is="paper-icon-button-light" title="' + globalize.translate("ButtonSelectView") + '" class="btnChangeLayout autoSize" data-layouts="' + (options.layouts || "") + '" onclick="LibraryBrowser.showLayoutMenu(this, \'' + (options.currentLayout || "") + '\');"><i class="material-icons view_comfy"></i></button>';
|
||||
html += '<button is="paper-icon-button-light" title="' + globalize.translate('ButtonSelectView') + '" class="btnChangeLayout autoSize" data-layouts="' + (options.layouts || '') + '" onclick="LibraryBrowser.showLayoutMenu(this, \'' + (options.currentLayout || '') + '\');"><span class="material-icons view_comfy"></span></button>';
|
||||
}
|
||||
|
||||
if (options.sortButton) {
|
||||
html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + globalize.translate("ButtonSort") + '"><i class="material-icons sort_by_alpha"></i></button>';
|
||||
html += '<button is="paper-icon-button-light" class="btnSort autoSize" title="' + globalize.translate('ButtonSort') + '"><span class="material-icons sort_by_alpha"></span></button>';
|
||||
}
|
||||
|
||||
if (options.filterButton) {
|
||||
html += '<button is="paper-icon-button-light" class="btnFilter autoSize" title="' + globalize.translate("ButtonFilter") + '"><i class="material-icons filter_list"></i></button>';
|
||||
html += '<button is="paper-icon-button-light" class="btnFilter autoSize" title="' + globalize.translate('ButtonFilter') + '"><span class="material-icons filter_list"></span></button>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
|
||||
return html += "</div>";
|
||||
return html += '</div>';
|
||||
},
|
||||
showSortMenu: function (options) {
|
||||
require(["dialogHelper", "emby-radio"], function (dialogHelper) {
|
||||
require(['dialogHelper', 'emby-radio'], function (dialogHelper) {
|
||||
function onSortByChange() {
|
||||
var newValue = this.value;
|
||||
|
||||
if (this.checked) {
|
||||
var changed = options.query.SortBy != newValue;
|
||||
options.query.SortBy = newValue.replace("_", ",");
|
||||
options.query.SortBy = newValue.replace('_', ',');
|
||||
options.query.StartIndex = 0;
|
||||
|
||||
if (options.callback && changed) {
|
||||
|
@ -148,48 +148,48 @@ define(["userSettings", "globalize"], function (userSettings, globalize) {
|
|||
entryAnimationDuration: 160,
|
||||
exitAnimationDuration: 200
|
||||
});
|
||||
dlg.classList.add("ui-body-a");
|
||||
dlg.classList.add("background-theme-a");
|
||||
dlg.classList.add("formDialog");
|
||||
var html = "";
|
||||
dlg.classList.add('ui-body-a');
|
||||
dlg.classList.add('background-theme-a');
|
||||
dlg.classList.add('formDialog');
|
||||
var html = '';
|
||||
html += '<div style="margin:0;padding:1.25em 1.5em 1.5em;">';
|
||||
html += '<h2 style="margin:0 0 .5em;">';
|
||||
html += globalize.translate("HeaderSortBy");
|
||||
html += "</h2>";
|
||||
html += globalize.translate('HeaderSortBy');
|
||||
html += '</h2>';
|
||||
var i;
|
||||
var length;
|
||||
var isChecked;
|
||||
html += '<div>';
|
||||
for (i = 0, length = options.items.length; i < length; i++) {
|
||||
var option = options.items[i];
|
||||
var radioValue = option.id.replace(",", "_");
|
||||
isChecked = (options.query.SortBy || "").replace(",", "_") == radioValue ? " checked" : "";
|
||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortBy" data-id="' + option.id + '" value="' + radioValue + '" class="menuSortBy" ' + isChecked + " /><span>" + option.name + "</span></label>";
|
||||
var radioValue = option.id.replace(',', '_');
|
||||
isChecked = (options.query.SortBy || '').replace(',', '_') == radioValue ? ' checked' : '';
|
||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortBy" data-id="' + option.id + '" value="' + radioValue + '" class="menuSortBy" ' + isChecked + ' /><span>' + option.name + '</span></label>';
|
||||
}
|
||||
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
html += '<h2 style="margin: 1em 0 .5em;">';
|
||||
html += globalize.translate("HeaderSortOrder");
|
||||
html += "</h2>";
|
||||
html += "<div>";
|
||||
isChecked = "Ascending" == options.query.SortOrder ? " checked" : "";
|
||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Ascending" class="menuSortOrder" ' + isChecked + " /><span>" + globalize.translate("OptionAscending") + "</span></label>";
|
||||
isChecked = "Descending" == options.query.SortOrder ? " checked" : "";
|
||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Descending" class="menuSortOrder" ' + isChecked + " /><span>" + globalize.translate("OptionDescending") + "</span></label>";
|
||||
html += "</div>";
|
||||
html += "</div>";
|
||||
html += globalize.translate('HeaderSortOrder');
|
||||
html += '</h2>';
|
||||
html += '<div>';
|
||||
isChecked = 'Ascending' == options.query.SortOrder ? ' checked' : '';
|
||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Ascending" class="menuSortOrder" ' + isChecked + ' /><span>' + globalize.translate('OptionAscending') + '</span></label>';
|
||||
isChecked = 'Descending' == options.query.SortOrder ? ' checked' : '';
|
||||
html += '<label class="radio-label-block"><input type="radio" is="emby-radio" name="SortOrder" value="Descending" class="menuSortOrder" ' + isChecked + ' /><span>' + globalize.translate('OptionDescending') + '</span></label>';
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
dlg.innerHTML = html;
|
||||
dialogHelper.open(dlg);
|
||||
var sortBys = dlg.querySelectorAll(".menuSortBy");
|
||||
var sortBys = dlg.querySelectorAll('.menuSortBy');
|
||||
|
||||
for (i = 0, length = sortBys.length; i < length; i++) {
|
||||
sortBys[i].addEventListener("change", onSortByChange);
|
||||
sortBys[i].addEventListener('change', onSortByChange);
|
||||
}
|
||||
|
||||
var sortOrders = dlg.querySelectorAll(".menuSortOrder");
|
||||
var sortOrders = dlg.querySelectorAll('.menuSortOrder');
|
||||
|
||||
for (i = 0, length = sortOrders.length; i < length; i++) {
|
||||
sortOrders[i].addEventListener("change", onSortOrderChange);
|
||||
sortOrders[i].addEventListener('change', onSortOrderChange);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,12 +1,12 @@
|
|||
define(["layoutManager", "datetime", "cardBuilder", "apphost"], function (layoutManager, datetime, cardBuilder, appHost) {
|
||||
"use strict";
|
||||
define(['layoutManager', 'datetime', 'cardBuilder', 'apphost'], function (layoutManager, datetime, cardBuilder, appHost) {
|
||||
'use strict';
|
||||
|
||||
function enableScrollX() {
|
||||
return !layoutManager.desktop;
|
||||
}
|
||||
|
||||
function getBackdropShape() {
|
||||
return enableScrollX() ? "overflowBackdrop" : "backdrop";
|
||||
return enableScrollX() ? 'overflowBackdrop' : 'backdrop';
|
||||
}
|
||||
|
||||
function getTimersHtml(timers, options) {
|
||||
|
@ -14,27 +14,27 @@ define(["layoutManager", "datetime", "cardBuilder", "apphost"], function (layout
|
|||
var i;
|
||||
var length;
|
||||
var items = timers.map(function (t) {
|
||||
t.Type = "Timer";
|
||||
t.Type = 'Timer';
|
||||
return t;
|
||||
});
|
||||
var groups = [];
|
||||
var currentGroupName = "";
|
||||
var currentGroupName = '';
|
||||
var currentGroup = [];
|
||||
|
||||
for (i = 0, length = items.length; i < length; i++) {
|
||||
var item = items[i];
|
||||
var dateText = "";
|
||||
var dateText = '';
|
||||
|
||||
if (options.indexByDate !== false && item.StartDate) {
|
||||
try {
|
||||
var premiereDate = datetime.parseISO8601Date(item.StartDate, true);
|
||||
dateText = datetime.toLocaleDateString(premiereDate, {
|
||||
weekday: "long",
|
||||
month: "short",
|
||||
day: "numeric"
|
||||
weekday: 'long',
|
||||
month: 'short',
|
||||
day: 'numeric'
|
||||
});
|
||||
} catch (err) {
|
||||
console.error("error parsing premiereDate:" + item.StartDate + "; error: " + err);
|
||||
console.error('error parsing premiereDate:' + item.StartDate + '; error: ' + err);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -60,23 +60,23 @@ define(["layoutManager", "datetime", "cardBuilder", "apphost"], function (layout
|
|||
});
|
||||
}
|
||||
|
||||
var html = "";
|
||||
var html = '';
|
||||
|
||||
for (i = 0, length = groups.length; i < length; i++) {
|
||||
var group = groups[i];
|
||||
var supportsImageAnalysis = appHost.supports("imageanalysis");
|
||||
var supportsImageAnalysis = appHost.supports('imageanalysis');
|
||||
var cardLayout = appHost.preferVisualCards || supportsImageAnalysis;
|
||||
|
||||
cardLayout = true;
|
||||
if (group.name) {
|
||||
html += '<div class="verticalSection">';
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + "</h2>";
|
||||
html += '<h2 class="sectionTitle sectionTitle-cards padded-left">' + group.name + '</h2>';
|
||||
}
|
||||
if (enableScrollX()) {
|
||||
var scrollXClass = "scrollX hiddenScrollX";
|
||||
var scrollXClass = 'scrollX hiddenScrollX';
|
||||
|
||||
if (layoutManager.tv) {
|
||||
scrollXClass += " smoothScrollX";
|
||||
scrollXClass += ' smoothScrollX';
|
||||
}
|
||||
|
||||
html += '<div is="emby-itemscontainer" class="itemsContainer ' + scrollXClass + ' padded-left padded-right">';
|
||||
|
@ -86,26 +86,26 @@ define(["layoutManager", "datetime", "cardBuilder", "apphost"], function (layout
|
|||
|
||||
html += cardBuilder.getCardsHtml({
|
||||
items: group.items,
|
||||
shape: cardLayout ? getBackdropShape() : enableScrollX() ? "autoOverflow" : "autoVertical",
|
||||
shape: cardLayout ? getBackdropShape() : enableScrollX() ? 'autoOverflow' : 'autoVertical',
|
||||
showParentTitleOrTitle: true,
|
||||
showAirTime: true,
|
||||
showAirEndTime: true,
|
||||
showChannelName: !cardLayout,
|
||||
cardLayout: cardLayout,
|
||||
centerText: !cardLayout,
|
||||
action: "edit",
|
||||
cardFooterAside: "none",
|
||||
preferThumb: !!cardLayout || "auto",
|
||||
defaultShape: cardLayout ? null : "portrait",
|
||||
action: 'edit',
|
||||
cardFooterAside: 'none',
|
||||
preferThumb: !!cardLayout || 'auto',
|
||||
defaultShape: cardLayout ? null : 'portrait',
|
||||
coverImage: true,
|
||||
allowBottomPadding: false,
|
||||
overlayText: false,
|
||||
showChannelLogo: cardLayout
|
||||
});
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
|
||||
if (group.name) {
|
||||
html += "</div>";
|
||||
html += '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ define(['inputManager', 'focusManager', 'browser', 'layoutManager', 'events', 'd
|
|||
var eventY = e.screenY;
|
||||
|
||||
// if coord don't exist how could it move
|
||||
if (typeof eventX === "undefined" && typeof eventY === "undefined") {
|
||||
if (typeof eventX === 'undefined' && typeof eventY === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
define(["listView"], function (listView) {
|
||||
"use strict";
|
||||
define(['listView'], function (listView) {
|
||||
'use strict';
|
||||
|
||||
function getFetchPlaylistItemsFn(itemId) {
|
||||
return function () {
|
||||
var query = {
|
||||
Fields: "PrimaryImageAspectRatio,UserData",
|
||||
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||
Fields: 'PrimaryImageAspectRatio,UserData',
|
||||
EnableImageTypes: 'Primary,Backdrop,Banner,Thumb',
|
||||
UserId: ApiClient.getCurrentUserId()
|
||||
};
|
||||
return ApiClient.getJSON(ApiClient.getUrl(`Playlists/${itemId}/Items`, query));
|
||||
|
@ -19,7 +19,7 @@ define(["listView"], function (listView) {
|
|||
showIndex: false,
|
||||
showRemoveFromPlaylist: true,
|
||||
playFromHere: true,
|
||||
action: "playallfromhere",
|
||||
action: 'playallfromhere',
|
||||
smallIcon: true,
|
||||
dragHandle: true,
|
||||
playlistId: itemId
|
||||
|
@ -28,9 +28,9 @@ define(["listView"], function (listView) {
|
|||
}
|
||||
|
||||
function init(page, item) {
|
||||
var elem = page.querySelector("#childrenContent .itemsContainer");
|
||||
elem.classList.add("vertical-list");
|
||||
elem.classList.remove("vertical-wrap");
|
||||
var elem = page.querySelector('#childrenContent .itemsContainer');
|
||||
elem.classList.add('vertical-list');
|
||||
elem.classList.remove('vertical-wrap');
|
||||
elem.enableDragReordering(true);
|
||||
elem.fetchData = getFetchPlaylistItemsFn(item.Id);
|
||||
elem.getItemsHtml = getItemsHtmlFn(item.Id);
|
||||
|
@ -43,8 +43,8 @@ define(["listView"], function (listView) {
|
|||
init(page, item);
|
||||
}
|
||||
|
||||
page.querySelector("#childrenContent").classList.add("verticalSection-extrabottompadding");
|
||||
page.querySelector("#childrenContent .itemsContainer").refreshItems();
|
||||
page.querySelector('#childrenContent').classList.add('verticalSection-extrabottompadding');
|
||||
page.querySelector('#childrenContent .itemsContainer').refreshItems();
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "apphost", "imageLoader", "userSettings", "emby-itemscontainer"], function (loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader, userSettings) {
|
||||
"use strict";
|
||||
define(['loading', 'listView', 'cardBuilder', 'libraryMenu', 'libraryBrowser', 'apphost', 'imageLoader', 'userSettings', 'emby-itemscontainer'], function (loading, listView, cardBuilder, libraryMenu, libraryBrowser, appHost, imageLoader, userSettings) {
|
||||
'use strict';
|
||||
|
||||
return function (view, params) {
|
||||
function getPageData(context) {
|
||||
|
@ -9,14 +9,14 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
if (!pageData) {
|
||||
pageData = data[key] = {
|
||||
query: {
|
||||
SortBy: "SortName",
|
||||
SortOrder: "Ascending",
|
||||
IncludeItemTypes: "Playlist",
|
||||
SortBy: 'SortName',
|
||||
SortOrder: 'Ascending',
|
||||
IncludeItemTypes: 'Playlist',
|
||||
Recursive: true,
|
||||
Fields: "PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete",
|
||||
Fields: 'PrimaryImageAspectRatio,SortName,CumulativeRunTimeTicks,CanDelete',
|
||||
StartIndex: 0
|
||||
},
|
||||
view: libraryBrowser.getSavedView(key) || "Poster"
|
||||
view: libraryBrowser.getSavedView(key) || 'Poster'
|
||||
};
|
||||
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
|
@ -52,17 +52,17 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
|
||||
function onViewStyleChange() {
|
||||
var viewStyle = getPageData(view).view;
|
||||
var itemsContainer = view.querySelector(".itemsContainer");
|
||||
var itemsContainer = view.querySelector('.itemsContainer');
|
||||
|
||||
if ("List" == viewStyle) {
|
||||
itemsContainer.classList.add("vertical-list");
|
||||
itemsContainer.classList.remove("vertical-wrap");
|
||||
if ('List' == viewStyle) {
|
||||
itemsContainer.classList.add('vertical-list');
|
||||
itemsContainer.classList.remove('vertical-wrap');
|
||||
} else {
|
||||
itemsContainer.classList.remove("vertical-list");
|
||||
itemsContainer.classList.add("vertical-wrap");
|
||||
itemsContainer.classList.remove('vertical-list');
|
||||
itemsContainer.classList.add('vertical-wrap');
|
||||
}
|
||||
|
||||
itemsContainer.innerHTML = "";
|
||||
itemsContainer.innerHTML = '';
|
||||
}
|
||||
|
||||
function reloadItems() {
|
||||
|
@ -74,9 +74,9 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
var result = responses[0];
|
||||
responses[1];
|
||||
window.scrollTo(0, 0);
|
||||
var html = "";
|
||||
var html = '';
|
||||
var viewStyle = getPageData(view).view;
|
||||
view.querySelector(".listTopPaging").innerHTML = libraryBrowser.getQueryPagingHtml({
|
||||
view.querySelector('.listTopPaging').innerHTML = libraryBrowser.getQueryPagingHtml({
|
||||
startIndex: query.StartIndex,
|
||||
limit: query.Limit,
|
||||
totalRecordCount: result.TotalRecordCount,
|
||||
|
@ -84,37 +84,37 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
showLimit: false,
|
||||
updatePageSizeSetting: false,
|
||||
addLayoutButton: true,
|
||||
layouts: "List,Poster,PosterCard,Thumb,ThumbCard",
|
||||
layouts: 'List,Poster,PosterCard,Thumb,ThumbCard',
|
||||
currentLayout: viewStyle
|
||||
});
|
||||
|
||||
if (result.TotalRecordCount) {
|
||||
if (viewStyle == "List") {
|
||||
if (viewStyle == 'List') {
|
||||
html = listView.getListViewHtml({
|
||||
items: result.Items,
|
||||
sortBy: query.SortBy
|
||||
});
|
||||
} else if (viewStyle == "PosterCard") {
|
||||
} else if (viewStyle == 'PosterCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "square",
|
||||
shape: 'square',
|
||||
coverImage: true,
|
||||
showTitle: true,
|
||||
cardLayout: true
|
||||
});
|
||||
} else if (viewStyle == "Thumb") {
|
||||
} else if (viewStyle == 'Thumb') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
showTitle: true,
|
||||
centerText: true,
|
||||
preferThumb: true,
|
||||
overlayPlayButton: true
|
||||
});
|
||||
} else if (viewStyle == "ThumbCard") {
|
||||
} else if (viewStyle == 'ThumbCard') {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "backdrop",
|
||||
shape: 'backdrop',
|
||||
showTitle: true,
|
||||
preferThumb: true,
|
||||
cardLayout: true
|
||||
|
@ -122,25 +122,25 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
} else {
|
||||
html = cardBuilder.getCardsHtml({
|
||||
items: result.Items,
|
||||
shape: "square",
|
||||
shape: 'square',
|
||||
showTitle: true,
|
||||
coverImage: true,
|
||||
centerText: true,
|
||||
overlayPlayButton: true
|
||||
});
|
||||
}
|
||||
view.querySelector(".noItemsMessage").classList.add("hide");
|
||||
view.querySelector('.noItemsMessage').classList.add('hide');
|
||||
} else {
|
||||
view.querySelector(".noItemsMessage").classList.remove("hide");
|
||||
view.querySelector('.noItemsMessage').classList.remove('hide');
|
||||
}
|
||||
|
||||
var elem = view.querySelector(".itemsContainer");
|
||||
var elem = view.querySelector('.itemsContainer');
|
||||
elem.innerHTML = html;
|
||||
imageLoader.lazyChildren(elem);
|
||||
var btnNextPage = view.querySelector(".btnNextPage");
|
||||
var btnNextPage = view.querySelector('.btnNextPage');
|
||||
|
||||
if (btnNextPage) {
|
||||
btnNextPage.addEventListener("click", function () {
|
||||
btnNextPage.addEventListener('click', function () {
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex += query.Limit;
|
||||
}
|
||||
|
@ -148,10 +148,10 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
});
|
||||
}
|
||||
|
||||
var btnPreviousPage = view.querySelector(".btnPreviousPage");
|
||||
var btnPreviousPage = view.querySelector('.btnPreviousPage');
|
||||
|
||||
if (btnPreviousPage) {
|
||||
btnPreviousPage.addEventListener("click", function () {
|
||||
btnPreviousPage.addEventListener('click', function () {
|
||||
if (userSettings.libraryPageSize() > 0) {
|
||||
query.StartIndex = Math.max(0, query.StartIndex - query.Limit);
|
||||
}
|
||||
|
@ -159,10 +159,10 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
});
|
||||
}
|
||||
|
||||
var btnChangeLayout = view.querySelector(".btnChangeLayout");
|
||||
var btnChangeLayout = view.querySelector('.btnChangeLayout');
|
||||
|
||||
if (btnChangeLayout) {
|
||||
btnChangeLayout.addEventListener("layoutchange", function (e) {
|
||||
btnChangeLayout.addEventListener('layoutchange', function (e) {
|
||||
var layout = e.detail.viewStyle;
|
||||
getPageData(view).view = layout;
|
||||
libraryBrowser.saveViewSetting(getSavedQueryKey(view), layout);
|
||||
|
@ -177,11 +177,11 @@ define(["loading", "listView", "cardBuilder", "libraryMenu", "libraryBrowser", "
|
|||
}
|
||||
|
||||
var data = {};
|
||||
view.addEventListener("viewbeforeshow", function () {
|
||||
view.addEventListener('viewbeforeshow', function () {
|
||||
reloadItems();
|
||||
});
|
||||
view.querySelector(".btnNewPlaylist").addEventListener("click", function () {
|
||||
require(["playlistEditor"], function (playlistEditor) {
|
||||
view.querySelector('.btnNewPlaylist').addEventListener('click', function () {
|
||||
require(['playlistEditor'], function (playlistEditor) {
|
||||
var serverId = ApiClient.serverInfo().Id;
|
||||
new playlistEditor().show({
|
||||
items: [],
|
||||
|
|
|
@ -1,433 +1,433 @@
|
|||
define([
|
||||
"jQuery",
|
||||
"emby-button",
|
||||
"emby-input",
|
||||
"scripts/livetvcomponents",
|
||||
"paper-icon-button-light",
|
||||
"emby-itemscontainer",
|
||||
"emby-collapse",
|
||||
"emby-select",
|
||||
"livetvcss",
|
||||
"emby-checkbox",
|
||||
"emby-slider",
|
||||
"listViewStyle",
|
||||
"dashboardcss",
|
||||
"detailtablecss"], function () {
|
||||
'jQuery',
|
||||
'emby-button',
|
||||
'emby-input',
|
||||
'scripts/livetvcomponents',
|
||||
'paper-icon-button-light',
|
||||
'emby-itemscontainer',
|
||||
'emby-collapse',
|
||||
'emby-select',
|
||||
'livetvcss',
|
||||
'emby-checkbox',
|
||||
'emby-slider',
|
||||
'listViewStyle',
|
||||
'dashboardcss',
|
||||
'detailtablecss'], function () {
|
||||
|
||||
function defineRoute(newRoute) {
|
||||
var path = newRoute.path;
|
||||
console.debug("defining route: " + path);
|
||||
newRoute.dictionary = "core";
|
||||
console.debug('defining route: ' + path);
|
||||
newRoute.dictionary = 'core';
|
||||
Emby.Page.addRoute(path, newRoute);
|
||||
}
|
||||
|
||||
console.debug("defining core routes");
|
||||
console.debug('defining core routes');
|
||||
|
||||
defineRoute({
|
||||
path: "/addserver.html",
|
||||
path: '/addserver.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
startup: true,
|
||||
controller: "auth/addserver"
|
||||
controller: 'auth/addserver'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/selectserver.html",
|
||||
path: '/selectserver.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
startup: true,
|
||||
controller: "auth/selectserver",
|
||||
type: "selectserver"
|
||||
controller: 'auth/selectserver',
|
||||
type: 'selectserver'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/forgotpassword.html",
|
||||
path: '/forgotpassword.html',
|
||||
anonymous: true,
|
||||
startup: true,
|
||||
controller: "auth/forgotpassword"
|
||||
controller: 'auth/forgotpassword'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/forgotpasswordpin.html",
|
||||
path: '/forgotpasswordpin.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
startup: true,
|
||||
controller: "auth/forgotpasswordpin"
|
||||
controller: 'auth/forgotpasswordpin'
|
||||
});
|
||||
|
||||
defineRoute({
|
||||
path: "/addplugin.html",
|
||||
path: '/addplugin.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/plugins/add"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/plugins/add'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencesmenu.html",
|
||||
path: '/mypreferencesmenu.html',
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/menu"
|
||||
transition: 'fade',
|
||||
controller: 'user/menu'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/myprofile.html",
|
||||
path: '/myprofile.html',
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/profile"
|
||||
transition: 'fade',
|
||||
controller: 'user/profile'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencesdisplay.html",
|
||||
path: '/mypreferencesdisplay.html',
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/display"
|
||||
transition: 'fade',
|
||||
controller: 'user/display'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferenceshome.html",
|
||||
path: '/mypreferenceshome.html',
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/home"
|
||||
transition: 'fade',
|
||||
controller: 'user/home'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencesplayback.html",
|
||||
path: '/mypreferencesplayback.html',
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/playback"
|
||||
transition: 'fade',
|
||||
controller: 'user/playback'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/mypreferencessubtitles.html",
|
||||
path: '/mypreferencessubtitles.html',
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
controller: "user/subtitles"
|
||||
transition: 'fade',
|
||||
controller: 'user/subtitles'
|
||||
});
|
||||
|
||||
defineRoute({
|
||||
path: "/dashboard.html",
|
||||
path: '/dashboard.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/dashboard"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/dashboard'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/dashboardgeneral.html",
|
||||
controller: "dashboard/general",
|
||||
path: '/dashboardgeneral.html',
|
||||
controller: 'dashboard/general',
|
||||
autoFocus: false,
|
||||
roles: "admin"
|
||||
roles: 'admin'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/networking.html",
|
||||
path: '/networking.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/networking"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/networking'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/devices.html",
|
||||
path: '/devices.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/devices/devices"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/devices/devices'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/device.html",
|
||||
path: '/device.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/devices/device"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/devices/device'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/dlnaprofile.html",
|
||||
path: '/dlnaprofile.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/dlna/dlnaprofile"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/dlna/dlnaprofile'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/dlnaprofiles.html",
|
||||
path: '/dlnaprofiles.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/dlna/dlnaprofiles"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/dlna/dlnaprofiles'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/dlnasettings.html",
|
||||
path: '/dlnasettings.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/dlna/dlnasettings"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/dlna/dlnasettings'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/edititemmetadata.html",
|
||||
controller: "edititemmetadata",
|
||||
path: '/edititemmetadata.html',
|
||||
controller: 'edititemmetadata',
|
||||
autoFocus: false
|
||||
});
|
||||
defineRoute({
|
||||
path: "/encodingsettings.html",
|
||||
path: '/encodingsettings.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/encodingsettings"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/encodingsettings'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/home.html",
|
||||
path: '/home.html',
|
||||
autoFocus: false,
|
||||
controller: "home",
|
||||
transition: "fade",
|
||||
type: "home"
|
||||
controller: 'home',
|
||||
transition: 'fade',
|
||||
type: 'home'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/list.html",
|
||||
path: '/list.html',
|
||||
autoFocus: false,
|
||||
controller: "list",
|
||||
transition: "fade"
|
||||
controller: 'list',
|
||||
transition: 'fade'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/itemdetails.html",
|
||||
controller: "itemdetailpage",
|
||||
path: '/itemdetails.html',
|
||||
controller: 'itemdetailpage',
|
||||
autoFocus: false,
|
||||
transition: "fade"
|
||||
transition: 'fade'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/library.html",
|
||||
path: '/library.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/medialibrarypage"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/medialibrarypage'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/librarydisplay.html",
|
||||
path: '/librarydisplay.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/librarydisplay"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/librarydisplay'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/livetv.html",
|
||||
controller: "livetv/livetvsuggested",
|
||||
path: '/livetv.html',
|
||||
controller: 'livetv/livetvsuggested',
|
||||
autoFocus: false,
|
||||
transition: "fade"
|
||||
transition: 'fade'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/livetvguideprovider.html",
|
||||
path: '/livetvguideprovider.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "livetvguideprovider"
|
||||
roles: 'admin',
|
||||
controller: 'livetvguideprovider'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/livetvsettings.html",
|
||||
path: '/livetvsettings.html',
|
||||
autoFocus: false,
|
||||
controller: "livetvsettings"
|
||||
controller: 'livetvsettings'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/livetvstatus.html",
|
||||
path: '/livetvstatus.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "livetvstatus"
|
||||
roles: 'admin',
|
||||
controller: 'livetvstatus'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/livetvtuner.html",
|
||||
path: '/livetvtuner.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "livetvtuner"
|
||||
roles: 'admin',
|
||||
controller: 'livetvtuner'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/log.html",
|
||||
roles: "admin",
|
||||
controller: "dashboard/logs"
|
||||
path: '/log.html',
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/logs'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/login.html",
|
||||
path: '/login.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
startup: true,
|
||||
controller: "auth/login",
|
||||
type: "login"
|
||||
controller: 'auth/login',
|
||||
type: 'login'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/metadataimages.html",
|
||||
path: '/metadataimages.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/metadataimagespage"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/metadataimagespage'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/metadatanfo.html",
|
||||
path: '/metadatanfo.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/metadatanfo"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/metadatanfo'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/movies.html",
|
||||
path: '/movies.html',
|
||||
autoFocus: false,
|
||||
controller: "movies/moviesrecommended",
|
||||
transition: "fade"
|
||||
controller: 'movies/moviesrecommended',
|
||||
transition: 'fade'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/music.html",
|
||||
controller: "music/musicrecommended",
|
||||
path: '/music.html',
|
||||
controller: 'music/musicrecommended',
|
||||
autoFocus: false,
|
||||
transition: "fade"
|
||||
transition: 'fade'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/notificationsetting.html",
|
||||
path: '/notificationsetting.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/notifications/notification"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/notifications/notification'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/notificationsettings.html",
|
||||
controller: "dashboard/notifications/notifications",
|
||||
path: '/notificationsettings.html',
|
||||
controller: 'dashboard/notifications/notifications',
|
||||
autoFocus: false,
|
||||
roles: "admin"
|
||||
roles: 'admin'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/playbackconfiguration.html",
|
||||
path: '/playbackconfiguration.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/playbackconfiguration"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/playbackconfiguration'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/availableplugins.html",
|
||||
path: '/availableplugins.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/plugins/available"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/plugins/available'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/installedplugins.html",
|
||||
path: '/installedplugins.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/plugins/installed"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/plugins/installed'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/scheduledtask.html",
|
||||
path: '/scheduledtask.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/scheduledtasks/scheduledtask"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/scheduledtasks/scheduledtask'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/scheduledtasks.html",
|
||||
path: '/scheduledtasks.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/scheduledtasks/scheduledtasks"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/scheduledtasks/scheduledtasks'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/search.html",
|
||||
controller: "searchpage"
|
||||
path: '/search.html',
|
||||
controller: 'searchpage'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/serveractivity.html",
|
||||
path: '/serveractivity.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/serveractivity"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/serveractivity'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/apikeys.html",
|
||||
path: '/apikeys.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/apikeys"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/apikeys'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/streamingsettings.html",
|
||||
path: '/streamingsettings.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "dashboard/streamingsettings"
|
||||
roles: 'admin',
|
||||
controller: 'dashboard/streamingsettings'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/tv.html",
|
||||
path: '/tv.html',
|
||||
autoFocus: false,
|
||||
controller: "shows/tvrecommended",
|
||||
transition: "fade"
|
||||
controller: 'shows/tvrecommended',
|
||||
transition: 'fade'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/useredit.html",
|
||||
path: '/useredit.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "useredit"
|
||||
roles: 'admin',
|
||||
controller: 'useredit'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/userlibraryaccess.html",
|
||||
path: '/userlibraryaccess.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "userlibraryaccess"
|
||||
roles: 'admin',
|
||||
controller: 'userlibraryaccess'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/usernew.html",
|
||||
path: '/usernew.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "usernew"
|
||||
roles: 'admin',
|
||||
controller: 'usernew'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/userparentalcontrol.html",
|
||||
path: '/userparentalcontrol.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "userparentalcontrol"
|
||||
roles: 'admin',
|
||||
controller: 'userparentalcontrol'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/userpassword.html",
|
||||
path: '/userpassword.html',
|
||||
autoFocus: false,
|
||||
controller: "userpasswordpage"
|
||||
controller: 'userpasswordpage'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/userprofiles.html",
|
||||
path: '/userprofiles.html',
|
||||
autoFocus: false,
|
||||
roles: "admin",
|
||||
controller: "userprofilespage"
|
||||
roles: 'admin',
|
||||
controller: 'userprofilespage'
|
||||
});
|
||||
|
||||
defineRoute({
|
||||
path: "/wizardremoteaccess.html",
|
||||
path: '/wizardremoteaccess.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
controller: "wizard/remoteaccess"
|
||||
controller: 'wizard/remoteaccess'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/wizardfinish.html",
|
||||
path: '/wizardfinish.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
controller: "wizard/finish"
|
||||
controller: 'wizard/finish'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/wizardlibrary.html",
|
||||
path: '/wizardlibrary.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
controller: "medialibrarypage"
|
||||
controller: 'medialibrarypage'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/wizardsettings.html",
|
||||
path: '/wizardsettings.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
controller: "wizard/settings"
|
||||
controller: 'wizard/settings'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/wizardstart.html",
|
||||
path: '/wizardstart.html',
|
||||
autoFocus: false,
|
||||
anonymous: true,
|
||||
controller: "wizard/start"
|
||||
controller: 'wizard/start'
|
||||
});
|
||||
defineRoute({
|
||||
path: "/wizarduser.html",
|
||||
controller: "wizard/user",
|
||||
path: '/wizarduser.html',
|
||||
controller: 'wizard/user',
|
||||
autoFocus: false,
|
||||
anonymous: true
|
||||
});
|
||||
|
||||
defineRoute({
|
||||
path: "/videoosd.html",
|
||||
transition: "fade",
|
||||
controller: "playback/videoosd",
|
||||
path: '/videoosd.html',
|
||||
transition: 'fade',
|
||||
controller: 'playback/videoosd',
|
||||
autoFocus: false,
|
||||
type: "video-osd",
|
||||
type: 'video-osd',
|
||||
supportsThemeMedia: true,
|
||||
fullscreen: true,
|
||||
enableMediaControl: false
|
||||
});
|
||||
defineRoute({
|
||||
path: "/nowplaying.html",
|
||||
controller: "playback/nowplaying",
|
||||
path: '/nowplaying.html',
|
||||
controller: 'playback/nowplaying',
|
||||
autoFocus: false,
|
||||
transition: "fade",
|
||||
transition: 'fade',
|
||||
fullscreen: true,
|
||||
supportsThemeMedia: true,
|
||||
enableMediaControl: false
|
||||
});
|
||||
defineRoute({
|
||||
path: "/configurationpage",
|
||||
path: '/configurationpage',
|
||||
autoFocus: false,
|
||||
enableCache: false,
|
||||
enableContentQueryString: true,
|
||||
roles: "admin"
|
||||
roles: 'admin'
|
||||
});
|
||||
|
||||
defineRoute({
|
||||
path: "/",
|
||||
path: '/',
|
||||
isDefaultRoute: true,
|
||||
autoFocus: false
|
||||
});
|
||||
defineRoute({
|
||||
path: "/index.html",
|
||||
path: '/index.html',
|
||||
autoFocus: false,
|
||||
isDefaultRoute: true
|
||||
});
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
define(["searchFields", "searchResults", "events"], function (SearchFields, SearchResults, events) {
|
||||
"use strict";
|
||||
define(['searchFields', 'searchResults', 'events'], function (SearchFields, SearchResults, events) {
|
||||
'use strict';
|
||||
|
||||
function init(instance, tabContent, options) {
|
||||
tabContent.innerHTML = '<div class="padded-left padded-right searchFields"></div><div class="searchResults padded-top" style="padding-top:1.5em;"></div>';
|
||||
instance.searchFields = new SearchFields({
|
||||
element: tabContent.querySelector(".searchFields")
|
||||
element: tabContent.querySelector('.searchFields')
|
||||
});
|
||||
instance.searchResults = new SearchResults({
|
||||
element: tabContent.querySelector(".searchResults"),
|
||||
element: tabContent.querySelector('.searchResults'),
|
||||
serverId: ApiClient.serverId(),
|
||||
parentId: options.parentId,
|
||||
collectionType: options.collectionType
|
||||
});
|
||||
events.on(instance.searchFields, "search", function (e, value) {
|
||||
events.on(instance.searchFields, 'search', function (e, value) {
|
||||
instance.searchResults.search(value);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ let data;
|
|||
|
||||
function getConfig() {
|
||||
if (data) return Promise.resolve(data);
|
||||
return fetch("/config.json?nocache=" + new Date().getUTCMilliseconds()).then(function (response) {
|
||||
return fetch('/config.json?nocache=' + new Date().getUTCMilliseconds()).then(function (response) {
|
||||
data = response.json();
|
||||
return data;
|
||||
});
|
||||
|
@ -12,7 +12,7 @@ export function enableMultiServer() {
|
|||
return getConfig().then(config => {
|
||||
return config.multiserver;
|
||||
}).catch(error => {
|
||||
console.log("cannot get web config:", error);
|
||||
console.log('cannot get web config:', error);
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,5 +1,5 @@
|
|||
define(["events", "userSettings", "serverNotifications", "connectionManager", "globalize", "emby-button"], function (events, userSettings, serverNotifications, connectionManager, globalize) {
|
||||
"use strict";
|
||||
define(['events', 'userSettings', 'serverNotifications', 'connectionManager', 'globalize', 'emby-button'], function (events, userSettings, serverNotifications, connectionManager, globalize) {
|
||||
'use strict';
|
||||
|
||||
return function (options) {
|
||||
function pollTasks() {
|
||||
|
@ -26,12 +26,12 @@ define(["events", "userSettings", "serverNotifications", "connectionManager", "g
|
|||
}
|
||||
|
||||
if (task.State == 'Idle') {
|
||||
button.removeAttribute("disabled");
|
||||
button.removeAttribute('disabled');
|
||||
} else {
|
||||
button.setAttribute("disabled", "disabled");
|
||||
button.setAttribute('disabled', 'disabled');
|
||||
}
|
||||
|
||||
button.setAttribute("data-taskid", task.Id);
|
||||
button.setAttribute('data-taskid', task.Id);
|
||||
var progress = (task.CurrentProgressPercentage || 0).toFixed(1);
|
||||
|
||||
if (options.progressElem) {
|
||||
|
@ -47,11 +47,11 @@ define(["events", "userSettings", "serverNotifications", "connectionManager", "g
|
|||
if (options.lastResultElem) {
|
||||
var lastResult = task.LastExecutionResult ? task.LastExecutionResult.Status : '';
|
||||
|
||||
if (lastResult == "Failed") {
|
||||
if (lastResult == 'Failed') {
|
||||
options.lastResultElem.html('<span style="color:#FF0000;">(' + globalize.translate('LabelFailed') + ')</span>');
|
||||
} else if (lastResult == "Cancelled") {
|
||||
} else if (lastResult == 'Cancelled') {
|
||||
options.lastResultElem.html('<span style="color:#0026FF;">(' + globalize.translate('LabelCancelled') + ')</span>');
|
||||
} else if (lastResult == "Aborted") {
|
||||
} else if (lastResult == 'Aborted') {
|
||||
options.lastResultElem.html('<span style="color:#FF0000;">' + globalize.translate('LabelAbortedByServerShutdown') + '</span>');
|
||||
} else {
|
||||
options.lastResultElem.html(lastResult);
|
||||
|
@ -64,7 +64,7 @@ define(["events", "userSettings", "serverNotifications", "connectionManager", "g
|
|||
}
|
||||
|
||||
function onButtonClick() {
|
||||
onScheduledTaskMessageConfirmed(this.getAttribute("data-taskid"));
|
||||
onScheduledTaskMessageConfirmed(this.getAttribute('data-taskid'));
|
||||
}
|
||||
|
||||
function onScheduledTasksUpdate(e, apiClient, info) {
|
||||
|
@ -89,12 +89,12 @@ define(["events", "userSettings", "serverNotifications", "connectionManager", "g
|
|||
if (pollInterval) {
|
||||
clearInterval(pollInterval);
|
||||
}
|
||||
apiClient.sendMessage("ScheduledTasksInfoStart", "1000,1000");
|
||||
apiClient.sendMessage('ScheduledTasksInfoStart', '1000,1000');
|
||||
pollInterval = setInterval(onPollIntervalFired, 5000);
|
||||
}
|
||||
|
||||
function stopInterval() {
|
||||
connectionManager.getApiClient(serverId).sendMessage("ScheduledTasksInfoStop");
|
||||
connectionManager.getApiClient(serverId).sendMessage('ScheduledTasksInfoStop');
|
||||
|
||||
if (pollInterval) {
|
||||
clearInterval(pollInterval);
|
||||
|
@ -102,18 +102,18 @@ define(["events", "userSettings", "serverNotifications", "connectionManager", "g
|
|||
}
|
||||
|
||||
if (options.panel) {
|
||||
options.panel.classList.add("hide");
|
||||
options.panel.classList.add('hide');
|
||||
}
|
||||
|
||||
if (options.mode == 'off') {
|
||||
button.removeEventListener("click", onButtonClick);
|
||||
events.off(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||
button.removeEventListener('click', onButtonClick);
|
||||
events.off(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate);
|
||||
stopInterval();
|
||||
} else {
|
||||
button.addEventListener("click", onButtonClick);
|
||||
button.addEventListener('click', onButtonClick);
|
||||
pollTasks();
|
||||
startInterval();
|
||||
events.on(serverNotifications, "ScheduledTasksInfo", onScheduledTasksUpdate);
|
||||
events.on(serverNotifications, 'ScheduledTasksInfo', onScheduledTasksUpdate);
|
||||
}
|
||||
};
|
||||
});
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
define(["userSettings", "skinManager", "connectionManager", "events"], function (userSettings, skinManager, connectionManager, events) {
|
||||
"use strict";
|
||||
define(['userSettings', 'skinManager', 'connectionManager', 'events'], function (userSettings, skinManager, connectionManager, events) {
|
||||
'use strict';
|
||||
|
||||
var currentViewType;
|
||||
pageClassOn("viewbeforeshow", "page", function () {
|
||||
pageClassOn('viewbeforeshow', 'page', function () {
|
||||
var classList = this.classList;
|
||||
var viewType = classList.contains("type-interior") || classList.contains("wizardPage") ? "a" : "b";
|
||||
var viewType = classList.contains('type-interior') || classList.contains('wizardPage') ? 'a' : 'b';
|
||||
|
||||
if (viewType !== currentViewType) {
|
||||
currentViewType = viewType;
|
||||
var theme;
|
||||
var context;
|
||||
|
||||
if ("a" === viewType) {
|
||||
if ('a' === viewType) {
|
||||
theme = userSettings.dashboardTheme();
|
||||
context = "serverdashboard";
|
||||
context = 'serverdashboard';
|
||||
} else {
|
||||
theme = userSettings.theme();
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ define(["userSettings", "skinManager", "connectionManager", "events"], function
|
|||
skinManager.setTheme(theme, context);
|
||||
}
|
||||
});
|
||||
events.on(connectionManager, "localusersignedin", function (e, user) {
|
||||
events.on(connectionManager, 'localusersignedin', function (e, user) {
|
||||
currentViewType = null;
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue