1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge remote-tracking branch 'upstream/master' into vertical-menu

This commit is contained in:
ferferga 2020-05-16 18:07:20 +02:00
commit dd80697e61
376 changed files with 13120 additions and 15220 deletions

View file

@ -1,31 +1,31 @@
define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "emby-button"], function ($, loading, libraryMenu, globalize, connectionManager) {
"use strict";
define(['jQuery', 'loading', 'libraryMenu', 'globalize', 'connectionManager', 'emby-button'], function ($, loading, libraryMenu, globalize, connectionManager) {
'use strict';
function populateHistory(packageInfo, page) {
var html = "";
var html = '';
var length = Math.min(packageInfo.versions.length, 10);
for (var i = 0; i < length; i++) {
var version = packageInfo.versions[i];
html += '<h2 style="margin:.5em 0;">' + version.version + "</h2>";
html += '<div style="margin-bottom:1.5em;">' + version.changelog + "</div>";
html += '<h2 style="margin:.5em 0;">' + version.version + '</h2>';
html += '<div style="margin-bottom:1.5em;">' + version.changelog + '</div>';
}
$("#revisionHistory", page).html(html);
$('#revisionHistory', page).html(html);
}
function populateVersions(packageInfo, page, installedPlugin) {
var html = "";
var html = '';
for (var i = 0; i < packageInfo.versions.length; i++) {
var version = packageInfo.versions[i];
html += '<option value="' + version.version + '">' + version.version + "</option>";
html += '<option value="' + version.version + '">' + version.version + '</option>';
}
var selectmenu = $("#selectVersion", page).html(html);
var selectmenu = $('#selectVersion', page).html(html);
if (!installedPlugin) {
$("#pCurrentVersion", page).hide().html("");
$('#pCurrentVersion', page).hide().html('');
}
var packageVersion = packageInfo.versions[0];
@ -42,56 +42,56 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
populateVersions(pkg, page, installedPlugin);
populateHistory(pkg, page);
$(".pluginName", page).html(pkg.name);
$("#btnInstallDiv", page).removeClass("hide");
$("#pSelectVersion", page).removeClass("hide");
$('.pluginName', page).html(pkg.name);
$('#btnInstallDiv', page).removeClass('hide');
$('#pSelectVersion', page).removeClass('hide');
if (pkg.overview) {
$("#overview", page).show().html(pkg.overview);
$('#overview', page).show().html(pkg.overview);
} else {
$("#overview", page).hide();
$('#overview', page).hide();
}
$("#description", page).html(pkg.description);
$("#developer", page).html(pkg.owner);
$('#description', page).html(pkg.description);
$('#developer', page).html(pkg.owner);
if (installedPlugin) {
var currentVersionText = globalize.translate("MessageYouHaveVersionInstalled", "<strong>" + installedPlugin.Version + "</strong>");
$("#pCurrentVersion", page).show().html(currentVersionText);
var currentVersionText = globalize.translate('MessageYouHaveVersionInstalled', '<strong>' + installedPlugin.Version + '</strong>');
$('#pCurrentVersion', page).show().html(currentVersionText);
} else {
$("#pCurrentVersion", page).hide().html("");
$('#pCurrentVersion', page).hide().html('');
}
loading.hide();
}
function alertText(options) {
require(["alert"], function (alert) {
require(['alert'], function (alert) {
alert(options);
});
}
function performInstallation(page, packageName, guid, updateClass, version) {
var developer = $("#developer", page).html().toLowerCase();
var developer = $('#developer', page).html().toLowerCase();
var alertCallback = function () {
loading.show();
page.querySelector("#btnInstall").disabled = true;
page.querySelector('#btnInstall').disabled = true;
ApiClient.installPlugin(packageName, guid, updateClass, version).then(function () {
loading.hide();
alertText(globalize.translate("PluginInstalledMessage"));
alertText(globalize.translate('PluginInstalledMessage'));
});
};
if (developer !== 'jellyfin') {
loading.hide();
var msg = globalize.translate("MessagePluginInstallDisclaimer");
msg += "<br/>";
msg += "<br/>";
msg += globalize.translate("PleaseConfirmPluginInstallation");
var msg = globalize.translate('MessagePluginInstallDisclaimer');
msg += '<br/>';
msg += '<br/>';
msg += globalize.translate('PleaseConfirmPluginInstallation');
require(["confirm"], function (confirm) {
confirm(msg, globalize.translate("HeaderConfirmPluginInstallation")).then(function () {
require(['confirm'], function (confirm) {
confirm(msg, globalize.translate('HeaderConfirmPluginInstallation')).then(function () {
alertCallback();
}, function () {
console.debug('plugin not installed');
@ -103,24 +103,24 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
}
return function (view, params) {
$(".addPluginForm", view).on("submit", function () {
$('.addPluginForm', view).on('submit', function () {
loading.show();
var page = $(this).parents("#addPluginPage")[0];
var page = $(this).parents('#addPluginPage')[0];
var name = params.name;
var guid = params.guid;
ApiClient.getInstalledPlugins().then(function (plugins) {
var installedPlugin = plugins.filter(function (plugin) {
return plugin.Name == name;
})[0];
var vals = $("#selectVersion", page).val().split("|");
var vals = $('#selectVersion', page).val().split('|');
var version = vals[0];
if (installedPlugin) {
if (installedPlugin.Version === version) {
loading.hide();
Dashboard.alert({
message: globalize.translate("MessageAlreadyInstalled"),
title: globalize.translate("HeaderPluginInstallation")
message: globalize.translate('MessageAlreadyInstalled'),
title: globalize.translate('HeaderPluginInstallation')
});
}
} else {
@ -129,7 +129,7 @@ define(["jQuery", "loading", "libraryMenu", "globalize", "connectionManager", "e
});
return false;
});
view.addEventListener("viewshow", function () {
view.addEventListener('viewshow', function () {
var page = this;
loading.show();
var name = params.name;

View file

@ -1,5 +1,5 @@
define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby-checkbox", "emby-select"], function (loading, libraryMenu, globalize) {
"use strict";
define(['loading', 'libraryMenu', 'globalize', 'cardStyle', 'emby-button', 'emby-checkbox', 'emby-select'], function (loading, libraryMenu, globalize) {
'use strict';
function reloadList(page) {
loading.show();
@ -7,8 +7,8 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
var promise2 = ApiClient.getInstalledPlugins();
Promise.all([promise1, promise2]).then(function (responses) {
populateList({
catalogElement: page.querySelector("#pluginTiles"),
noItemsElement: page.querySelector("#noPlugins"),
catalogElement: page.querySelector('#pluginTiles'),
noItemsElement: page.querySelector('#noPlugins'),
availablePlugins: responses[0],
installedPlugins: responses[1]
});
@ -16,15 +16,15 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
}
function getHeaderText(category) {
category = category.replace(" ", "");
if ("Channel" === category) {
category = "Channels";
} else if ("Theme" === category) {
category = "Themes";
} else if ("LiveTV" === category) {
category = "HeaderLiveTV";
} else if ("ScreenSaver" === category) {
category = "HeaderScreenSavers";
category = category.replace(' ', '');
if ('Channel' === category) {
category = 'Channels';
} else if ('Theme' === category) {
category = 'Themes';
} else if ('LiveTV' === category) {
category = 'HeaderLiveTV';
} else if ('ScreenSaver' === category) {
category = 'HeaderScreenSavers';
}
return globalize.translate(category);
@ -56,28 +56,28 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
});
var currentCategory = null;
var html = "";
var html = '';
for (var i = 0; i < availablePlugins.length; i++) {
var plugin = availablePlugins[i];
var category = plugin.categoryDisplayName;
if (category != currentCategory) {
if (currentCategory) {
html += "</div>";
html += "</div>";
html += '</div>';
html += '</div>';
}
html += '<div class="verticalSection">';
html += '<h2 class="sectionTitle sectionTitle-cards">' + category + "</h2>";
html += '<h2 class="sectionTitle sectionTitle-cards">' + category + '</h2>';
html += '<div class="itemsContainer vertical-wrap">';
currentCategory = category;
}
html += getPluginHtml(plugin, options, installedPlugins);
}
html += "</div>";
html += "</div>";
html += '</div>';
html += '</div>';
if (!availablePlugins.length && options.noItemsElement) {
options.noItemsElement.classList.remove("hide");
options.noItemsElement.classList.remove('hide');
}
options.catalogElement.innerHTML = html;
@ -85,44 +85,44 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
}
function getPluginHtml(plugin, options, installedPlugins) {
var html = "";
var href = plugin.externalUrl ? plugin.externalUrl : "addplugin.html?name=" + encodeURIComponent(plugin.name) + "&guid=" + plugin.guid;
var html = '';
var href = plugin.externalUrl ? plugin.externalUrl : 'addplugin.html?name=' + encodeURIComponent(plugin.name) + '&guid=' + plugin.guid;
if (options.context) {
href += "&context=" + options.context;
href += '&context=' + options.context;
}
var target = plugin.externalUrl ? ' target="_blank"' : "";
var target = plugin.externalUrl ? ' target="_blank"' : '';
html += "<div class='card backdropCard'>";
html += '<div class="cardBox visualCardBox">';
html += '<div class="cardScalable visualCardBox-cardScalable">';
html += '<div class="cardPadder cardPadder-backdrop"></div>';
html += '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + href + '"' + target + ">";
html += '<i class="cardImageIcon material-icons">folder</i>';
html += "</a>";
html += "</div>";
html += '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + href + '"' + target + '>';
html += '<span class="cardImageIcon material-icons folder"></span>';
html += '</a>';
html += '</div>';
html += '<div class="cardFooter">';
html += "<div class='cardText'>";
html += plugin.name;
html += "</div>";
html += '</div>';
var installedPlugin = installedPlugins.filter(function (ip) {
return ip.Id == plugin.guid;
})[0];
html += "<div class='cardText cardText-secondary'>";
html += installedPlugin ? globalize.translate("LabelVersionInstalled", installedPlugin.Version) : "&nbsp;";
html += "</div>";
html += "</div>";
html += "</div>";
return html += "</div>";
html += installedPlugin ? globalize.translate('LabelVersionInstalled', installedPlugin.Version) : '&nbsp;';
html += '</div>';
html += '</div>';
html += '</div>';
return html += '</div>';
}
function getTabs() {
return [{
href: "installedplugins.html",
name: globalize.translate("TabMyPlugins")
href: 'installedplugins.html',
name: globalize.translate('TabMyPlugins')
}, {
href: "availableplugins.html",
name: globalize.translate("TabCatalog")
href: 'availableplugins.html',
name: globalize.translate('TabCatalog')
}];
}
@ -131,8 +131,8 @@ define(["loading", "libraryMenu", "globalize", "cardStyle", "emby-button", "emby
};
return function (view, params) {
view.addEventListener("viewshow", function () {
libraryMenu.setTabs("plugins", 1, getTabs);
view.addEventListener('viewshow', function () {
libraryMenu.setTabs('plugins', 1, getTabs);
reloadList(this);
});
};

View file

@ -1,15 +1,15 @@
define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"], function (loading, libraryMenu, dom, globalize) {
"use strict";
define(['loading', 'libraryMenu', 'dom', 'globalize', 'cardStyle', 'emby-button'], function (loading, libraryMenu, dom, globalize) {
'use strict';
function deletePlugin(page, uniqueid, name) {
var msg = globalize.translate("UninstallPluginConfirmation", name);
var msg = globalize.translate('UninstallPluginConfirmation', name);
require(["confirm"], function (confirm) {
require(['confirm'], function (confirm) {
confirm({
title: globalize.translate("UninstallPluginHeader"),
title: globalize.translate('UninstallPluginHeader'),
text: msg,
primary: "delete",
confirmText: globalize.translate("UninstallPluginHeader")
primary: 'delete',
confirmText: globalize.translate('UninstallPluginHeader')
}).then(function () {
loading.show();
ApiClient.uninstallPlugin(uniqueid).then(function () {
@ -21,13 +21,13 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
function showNoConfigurationMessage() {
Dashboard.alert({
message: globalize.translate("NoPluginConfigurationMessage")
message: globalize.translate('NoPluginConfigurationMessage')
});
}
function showConnectMessage() {
Dashboard.alert({
message: globalize.translate("MessagePluginConfigurationRequiresLocalAccess")
message: globalize.translate('MessagePluginConfigurationRequiresLocalAccess')
});
}
@ -36,33 +36,33 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
return pluginConfigurationPage.PluginId == plugin.Id;
})[0];
var configPageUrl = configPage ? Dashboard.getConfigurationPageUrl(configPage.Name) : null;
var html = "";
var html = '';
html += "<div data-id='" + plugin.Id + "' data-name='" + plugin.Name + "' class='card backdropCard'>";
html += '<div class="cardBox visualCardBox">';
html += '<div class="cardScalable">';
html += '<div class="cardPadder cardPadder-backdrop"></div>';
html += configPageUrl ? '<a class="cardContent cardImageContainer" is="emby-linkbutton" href="' + configPageUrl + '">' : '<div class="cardContent noConfigPluginCard noHoverEffect cardImageContainer">';
html += '<i class="cardImageIcon material-icons">folder</i>';
html += configPageUrl ? "</a>" : "</div>";
html += "</div>";
html += '<span class="cardImageIcon material-icons folder"></span>';
html += configPageUrl ? '</a>' : '</div>';
html += '</div>';
html += '<div class="cardFooter">';
html += '<div style="text-align:right; float:right;padding-top:5px;">';
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><i class="material-icons more_vert"></i></button>';
html += "</div>";
html += '<button type="button" is="paper-icon-button-light" class="btnCardMenu autoSize"><span class="material-icons more_vert"></span></button>';
html += '</div>';
html += "<div class='cardText'>";
html += configPage.DisplayName || plugin.Name;
html += "</div>";
html += '</div>';
html += "<div class='cardText cardText-secondary'>";
html += plugin.Version;
html += "</div>";
html += "</div>";
html += "</div>";
html += "</div>";
html += '</div>';
html += '</div>';
html += '</div>';
html += '</div>';
return html;
}
function renderPlugins(page, plugins) {
ApiClient.getJSON(ApiClient.getUrl("web/configurationpages") + "?pageType=PluginConfiguration").then(function (configPages) {
ApiClient.getJSON(ApiClient.getUrl('web/configurationpages') + '?pageType=PluginConfiguration').then(function (configPages) {
populateList(page, plugins, configPages);
});
}
@ -78,22 +78,22 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
var html = plugins.map(function (p) {
return getPluginCardHtml(p, pluginConfigurationPages);
}).join("");
}).join('');
var installedPluginsElement = page.querySelector(".installedPlugins");
installedPluginsElement.removeEventListener("click", onInstalledPluginsClick);
installedPluginsElement.addEventListener("click", onInstalledPluginsClick);
var installedPluginsElement = page.querySelector('.installedPlugins');
installedPluginsElement.removeEventListener('click', onInstalledPluginsClick);
installedPluginsElement.addEventListener('click', onInstalledPluginsClick);
if (plugins.length) {
installedPluginsElement.classList.add("itemsContainer");
installedPluginsElement.classList.add("vertical-wrap");
installedPluginsElement.classList.add('itemsContainer');
installedPluginsElement.classList.add('vertical-wrap');
} else {
html += '<div class="centerMessage">';
html += "<h1>" + globalize.translate("MessageNoPluginsInstalled") + "</h1>";
html += '<h1>' + globalize.translate('MessageNoPluginsInstalled') + '</h1>';
html += '<p><a is="emby-linkbutton" class="button-link" href="availableplugins.html">';
html += globalize.translate("BrowsePluginCatalogMessage");
html += "</a></p>";
html += "</div>";
html += globalize.translate('BrowsePluginCatalogMessage');
html += '</a></p>';
html += '</div>';
}
installedPluginsElement.innerHTML = html;
@ -101,36 +101,36 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
}
function showPluginMenu(page, elem) {
var card = dom.parentWithClass(elem, "card");
var id = card.getAttribute("data-id");
var name = card.getAttribute("data-name");
var configHref = card.querySelector(".cardContent").getAttribute("href");
var card = dom.parentWithClass(elem, 'card');
var id = card.getAttribute('data-id');
var name = card.getAttribute('data-name');
var configHref = card.querySelector('.cardContent').getAttribute('href');
var menuItems = [];
if (configHref) {
menuItems.push({
name: globalize.translate("ButtonSettings"),
id: "open",
icon: "mode_edit"
name: globalize.translate('ButtonSettings'),
id: 'open',
icon: 'mode_edit'
});
}
menuItems.push({
name: globalize.translate("ButtonUninstall"),
id: "delete",
icon: "delete"
name: globalize.translate('ButtonUninstall'),
id: 'delete',
icon: 'delete'
});
require(["actionsheet"], function (actionsheet) {
require(['actionsheet'], function (actionsheet) {
actionsheet.show({
items: menuItems,
positionTo: elem,
callback: function (resultId) {
switch (resultId) {
case "open":
case 'open':
Dashboard.navigate(configHref);
break;
case "delete":
case 'delete':
deletePlugin(page, id, name);
break;
}
@ -148,29 +148,29 @@ define(["loading", "libraryMenu", "dom", "globalize", "cardStyle", "emby-button"
function getTabs() {
return [{
href: "installedplugins.html",
name: globalize.translate("TabMyPlugins")
href: 'installedplugins.html',
name: globalize.translate('TabMyPlugins')
}, {
href: "availableplugins.html",
name: globalize.translate("TabCatalog")
href: 'availableplugins.html',
name: globalize.translate('TabCatalog')
}];
}
function onInstalledPluginsClick(e) {
if (dom.parentWithClass(e.target, "noConfigPluginCard")) {
if (dom.parentWithClass(e.target, 'noConfigPluginCard')) {
showNoConfigurationMessage();
} else if (dom.parentWithClass(e.target, "connectModePluginCard")) {
} else if (dom.parentWithClass(e.target, 'connectModePluginCard')) {
showConnectMessage();
} else {
var btnCardMenu = dom.parentWithClass(e.target, "btnCardMenu");
var btnCardMenu = dom.parentWithClass(e.target, 'btnCardMenu');
if (btnCardMenu) {
showPluginMenu(dom.parentWithClass(btnCardMenu, "page"), btnCardMenu);
showPluginMenu(dom.parentWithClass(btnCardMenu, 'page'), btnCardMenu);
}
}
}
pageIdOn("pageshow", "pluginsPage", function () {
libraryMenu.setTabs("plugins", 0, getTabs);
pageIdOn('pageshow', 'pluginsPage', function () {
libraryMenu.setTabs('plugins', 0, getTabs);
reloadList(this);
});