mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
rework hosting options
This commit is contained in:
parent
1509f3805d
commit
0f142fff89
10 changed files with 222 additions and 167 deletions
|
@ -11,6 +11,7 @@
|
|||
|
||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||
<a href="#" data-role="button" class="ui-btn-active">${TabGeneral}</a>
|
||||
<a href="dashboardhosting.html" data-role="button">${TabHosting}</a>
|
||||
<a href="serversecurity.html" data-role="button">${TabSecurity}</a>
|
||||
</div>
|
||||
<form id="advancedConfigurationForm">
|
||||
|
|
|
@ -347,7 +347,7 @@ h1 .imageLink {
|
|||
padding-bottom: 50px;
|
||||
}
|
||||
|
||||
.sidebarLinks a {
|
||||
.sidebarLink {
|
||||
display: block;
|
||||
padding: .6em 20px .6em 0;
|
||||
text-decoration: none;
|
||||
|
@ -356,26 +356,26 @@ h1 .imageLink {
|
|||
font-weight: 500 !important;
|
||||
font-size: 14px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebarLinks a:hover {
|
||||
.sidebarLink:hover {
|
||||
background: #f2f2f2;
|
||||
}
|
||||
|
||||
.sidebarLinks a.selectedSidebarLink {
|
||||
.sidebarLink.selectedSidebarLink {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
.ui-page-theme-a .sidebarLinks a.selectedSidebarLink {
|
||||
.ui-page-theme-a .selectedSidebarLink {
|
||||
background: #f2f2f2 !important;
|
||||
}
|
||||
|
||||
.ui-page-theme-b .sidebarLinks a.selectedSidebarLink {
|
||||
.ui-page-theme-b .selectedSidebarLink {
|
||||
background: #38c !important;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.sidebarLinks .sidebarLinkIcon {
|
||||
.sidebarLinkIcon {
|
||||
font-size: 17px;
|
||||
width: 66px;
|
||||
text-align: center;
|
||||
|
@ -393,9 +393,6 @@ h1 .imageLink {
|
|||
border-radius: 0;
|
||||
}
|
||||
|
||||
.sidebarLinkText, .sidebarLinkIcon {
|
||||
}
|
||||
|
||||
.sidebarHeader {
|
||||
padding-left: 20px;
|
||||
margin: 1em 0;
|
||||
|
@ -413,42 +410,14 @@ h1 .imageLink {
|
|||
|
||||
/* Tabs (e.g. advanced metadata page) */
|
||||
.localnav {
|
||||
margin-bottom: 40px !important;
|
||||
margin-bottom: 30px !important;
|
||||
}
|
||||
|
||||
.localnav + form {
|
||||
margin-top: -10px;
|
||||
}
|
||||
|
||||
.page > .ui-content {
|
||||
/* Need this so that the audio player doesn't cover content, but also for unveil lazy loading. */
|
||||
padding-bottom: 160px;
|
||||
}
|
||||
|
||||
.dashboardPanelDivider {
|
||||
height: 1px;
|
||||
background: #ddd;
|
||||
margin: .25em 0;
|
||||
}
|
||||
|
||||
.dashboardPanelLink {
|
||||
padding: .7em .5em .7em 1.25em;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
color: #000 !important;
|
||||
font-weight: normal !important;
|
||||
}
|
||||
|
||||
.dashboardPanelLink:hover {
|
||||
background: #52B54B;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.selectedDashboardPanelLink {
|
||||
background: #38c;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
.dashboardPanel .ui-panel-inner {
|
||||
padding: 0;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,9 @@
|
|||
</p>
|
||||
</div>
|
||||
|
||||
<p class="supporterIconContainer">
|
||||
</p>
|
||||
|
||||
<div class="readOnlyContent dashboardHomeLeftColumn">
|
||||
|
||||
<div data-role="collapsible" data-collapsed="false">
|
||||
|
@ -46,9 +49,8 @@
|
|||
<p id="ports"></p>
|
||||
<div id="pPluginUpdates"></div>
|
||||
|
||||
<p class="localUrl"></p>
|
||||
<p class="externalUrl"></p>
|
||||
<p class="supporterIconContainer">
|
||||
</p>
|
||||
<div style="margin-top: 1em;">
|
||||
<button class="btnRestartContainer hide" id="btnRestartServer" type="button" data-icon="refresh" data-mini="true" data-inline="true" onclick="DashboardPage.restart();">${ButtonRestart}</button>
|
||||
<button id="btnShutdown" type="button" data-icon="delete" data-mini="true" data-inline="true" onclick="DashboardPage.shutdown();">${ButtonShutdown}</button>
|
||||
|
|
|
@ -39,43 +39,6 @@
|
|||
<h2>${HeaderAdvanced}</h2>
|
||||
<div>
|
||||
<br />
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtPortNumber">${LabelLocalHttpServerPortNumber}</label>
|
||||
<input type="number" id="txtPortNumber" name="txtPortNumber" pattern="[0-9]*" required="required" min="1" />
|
||||
<div class="fieldDescription">${LabelLocalHttpServerPortNumberHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtPublicPort">${LabelPublicPort}</label>
|
||||
<input type="number" id="txtPublicPort" pattern="[0-9]*" required="required" min="1" />
|
||||
<div class="fieldDescription">${LabelPublicPortHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="chkEnableUpnp">${LabelEnableAutomaticPortMap}</label>
|
||||
<input type="checkbox" id="chkEnableUpnp" data-mini="true" />
|
||||
<div class="fieldDescription">${LabelEnableAutomaticPortMapHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtDdns">${LabelExternalDDNS}</label>
|
||||
<input id="txtDdns"/>
|
||||
<div class="fieldDescription">${LabelExternalDDNSHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="chkUseHttps">${LabelUseHttps}</label>
|
||||
<input type="checkbox" id="chkUseHttps" data-mini="false" />
|
||||
<div class="fieldDescription">${LabelUseHttpsHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtHttpsPort">${LabelHttpsPort}</label>
|
||||
<input type="number" id="txtHttpsPort" pattern="[0-9]*" required="required" min="1" />
|
||||
<div class="fieldDescription">${LabelHttpsPortHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtCertificatePath">${LabelCertificatePath}</label>
|
||||
<input type="text" id="txtCertificatePath" />
|
||||
<div class="fieldDescription">${LabelCertificatePathHelp}</div>
|
||||
</li>
|
||||
</ul>
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtCachePath">${LabelCachePath}</label>
|
||||
|
|
79
dashboard-ui/dashboardhosting.html
Normal file
79
dashboard-ui/dashboardhosting.html
Normal file
|
@ -0,0 +1,79 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>${TitleAdvanced}</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="dashboardHostingPage" data-role="page" class="page type-interior advancedConfigurationPage" data-helpurl="https://github.com/MediaBrowser/Wiki/wiki/Server%20Settings">
|
||||
|
||||
<div data-role="content">
|
||||
<div class="content-primary">
|
||||
|
||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||
<a href="advanced.html" data-role="button">${TabGeneral}</a>
|
||||
<a href="#" data-role="button" class="ui-btn-active">${TabHosting}</a>
|
||||
<a href="serversecurity.html" data-role="button">${TabSecurity}</a>
|
||||
</div>
|
||||
|
||||
<form class="dashboardHostingForm">
|
||||
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtPortNumber">${LabelLocalHttpServerPortNumber}</label>
|
||||
<input type="number" id="txtPortNumber" name="txtPortNumber" pattern="[0-9]*" required="required" min="1" />
|
||||
<div class="fieldDescription">${LabelLocalHttpServerPortNumberHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtPublicPort">${LabelPublicPort}</label>
|
||||
<input type="number" id="txtPublicPort" pattern="[0-9]*" required="required" min="1" />
|
||||
<div class="fieldDescription">${LabelPublicPortHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="chkEnableUpnp">${LabelEnableAutomaticPortMap}</label>
|
||||
<input type="checkbox" id="chkEnableUpnp" data-mini="true" />
|
||||
<div class="fieldDescription">${LabelEnableAutomaticPortMapHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtDdns">${LabelExternalDDNS}</label>
|
||||
<input id="txtDdns" />
|
||||
<div class="fieldDescription">${LabelExternalDDNSHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="chkEnableHttps" data-mini="true">${LabelEnableHttps}</label>
|
||||
<input type="checkbox" id="chkEnableHttps" data-mini="true" />
|
||||
<div class="fieldDescription">${LabelEnableHttpsHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtHttpsPort">${LabelHttpsPort}</label>
|
||||
<input type="number" id="txtHttpsPort" pattern="[0-9]*" required="required" min="1" />
|
||||
<div class="fieldDescription">${LabelHttpsPortHelp}</div>
|
||||
</li>
|
||||
<li>
|
||||
<label for="txtCertificatePath">${LabelCertificatePath}</label>
|
||||
<input type="text" id="txtCertificatePath" />
|
||||
<div class="fieldDescription">${LabelCertificatePathHelp}</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
|
||||
${ButtonSave}
|
||||
</button>
|
||||
<button type="button" onclick="Dashboard.navigate('dashboard.html');" data-icon="delete" data-mini="true">
|
||||
${ButtonCancel}
|
||||
</button>
|
||||
</li>
|
||||
|
||||
</ul>
|
||||
</form>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$('.dashboardHostingForm').off('submit', DashboardHostingPage.onSubmit).on('submit', DashboardHostingPage.onSubmit);
|
||||
</script>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -8,10 +8,7 @@
|
|||
Dashboard.setPageTitle(Dashboard.lastSystemInfo.ServerName);
|
||||
}
|
||||
|
||||
ApiClient.getSystemInfo().done(function (systemInfo) {
|
||||
|
||||
Dashboard.setPageTitle(systemInfo.ServerName);
|
||||
});
|
||||
refreshPageTitle(page);
|
||||
|
||||
$('#txtServerName', page).val(config.ServerName || '');
|
||||
|
||||
|
@ -21,21 +18,19 @@
|
|||
|
||||
})).val(config.UICulture).selectmenu('refresh');
|
||||
|
||||
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
|
||||
$('#txtPublicPort', page).val(config.PublicPort);
|
||||
|
||||
$('#chkUseHttps', page).checked(config.UseHttps).checkboxradio('refresh');
|
||||
$('#txtHttpsPort', page).val(config.HttpsPortNumber);
|
||||
$('#txtCertificatePath', page).val(config.CertificatePath);
|
||||
|
||||
$('#txtDdns', page).val(config.WanDdns || '');
|
||||
|
||||
$('#chkEnableUpnp', page).checked(config.EnableUPnP).checkboxradio('refresh');
|
||||
$('#txtCachePath', page).val(config.CachePath || '');
|
||||
|
||||
Dashboard.hideLoadingMsg();
|
||||
}
|
||||
|
||||
function refreshPageTitle(page) {
|
||||
|
||||
ApiClient.getSystemInfo().done(function (systemInfo) {
|
||||
|
||||
Dashboard.setPageTitle(systemInfo.ServerName);
|
||||
});
|
||||
}
|
||||
|
||||
$(document).on('pageshow', "#dashboardGeneralPage", function () {
|
||||
|
||||
Dashboard.showLoadingMsg();
|
||||
|
@ -88,27 +83,19 @@
|
|||
Dashboard.showLoadingMsg();
|
||||
|
||||
var form = this;
|
||||
var page = $(form).parents('.page');
|
||||
|
||||
ApiClient.getServerConfiguration().done(function (config) {
|
||||
|
||||
config.ServerName = $('#txtServerName', form).val();
|
||||
config.UICulture = $('#selectLocalizationLanguage', form).val();
|
||||
|
||||
config.HttpServerPortNumber = $('#txtPortNumber', form).val();
|
||||
config.PublicPort = $('#txtPublicPort', form).val();
|
||||
|
||||
config.UseHttps = $('#chkUseHttps', form).checked();
|
||||
config.HttpsPortNumber = $('#txtHttpsPort', form).val();
|
||||
config.CertificatePath = $('#txtCertificatePath', form).val();
|
||||
|
||||
|
||||
config.EnableUPnP = $('#chkEnableUpnp', form).checked();
|
||||
|
||||
config.WanDdns = $('#txtDdns', form).val();
|
||||
config.CachePath = $('#txtCachePath', form).val();
|
||||
|
||||
ApiClient.updateServerConfiguration(config).done(function () {
|
||||
|
||||
refreshPageTitle(page);
|
||||
|
||||
ApiClient.getNamedConfiguration(brandingConfigKey).done(function (brandingConfig) {
|
||||
|
||||
brandingConfig.LoginDisclaimer = $('#txtLoginDisclaimer', form).val();
|
||||
|
|
62
dashboard-ui/scripts/dashboardhosting.js
Normal file
62
dashboard-ui/scripts/dashboardhosting.js
Normal file
|
@ -0,0 +1,62 @@
|
|||
(function ($, document, window) {
|
||||
|
||||
function loadPage(page, config) {
|
||||
|
||||
$('#txtPortNumber', page).val(config.HttpServerPortNumber);
|
||||
$('#txtPublicPort', page).val(config.PublicPort);
|
||||
|
||||
$('#chkEnableHttps', page).checked(config.EnableHttps).checkboxradio('refresh');
|
||||
$('#txtHttpsPort', page).val(config.HttpsPortNumber);
|
||||
$('#txtCertificatePath', page).val(config.CertificatePath);
|
||||
|
||||
$('#txtDdns', page).val(config.WanDdns || '');
|
||||
|
||||
$('#chkEnableUpnp', page).checked(config.EnableUPnP).checkboxradio('refresh');
|
||||
|
||||
Dashboard.hideLoadingMsg();
|
||||
}
|
||||
|
||||
$(document).on('pageshow', "#dashboardHostingPage", function () {
|
||||
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
var page = this;
|
||||
|
||||
ApiClient.getServerConfiguration().done(function (config) {
|
||||
|
||||
loadPage(page, config);
|
||||
|
||||
});
|
||||
|
||||
}).on('pageinit', "#dashboardHostingPage", function () {
|
||||
|
||||
var page = this;
|
||||
});
|
||||
|
||||
window.DashboardHostingPage = {
|
||||
|
||||
onSubmit: function () {
|
||||
Dashboard.showLoadingMsg();
|
||||
|
||||
var form = this;
|
||||
|
||||
ApiClient.getServerConfiguration().done(function (config) {
|
||||
|
||||
config.HttpServerPortNumber = $('#txtPortNumber', form).val();
|
||||
config.PublicPort = $('#txtPublicPort', form).val();
|
||||
config.EnableHttps = $('#chkEnableHttps', form).checked();
|
||||
config.HttpsPortNumber = $('#txtHttpsPort', form).val();
|
||||
config.CertificatePath = $('#txtCertificatePath', form).val();
|
||||
config.EnableUPnP = $('#chkEnableUpnp', form).checked();
|
||||
config.WanDdns = $('#txtDdns', form).val();
|
||||
|
||||
ApiClient.updateServerConfiguration(config).done(Dashboard.processServerConfigurationUpdateResult);
|
||||
});
|
||||
|
||||
// Disable default form submission
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
})(jQuery, document, window);
|
|
@ -82,18 +82,12 @@
|
|||
|
||||
$('#appVersionNumber', page).html(Globalize.translate('LabelVersionNumber').replace('{0}', systemInfo.Version));
|
||||
|
||||
var httpPort = systemInfo.HttpServerPortNumber;
|
||||
|
||||
var portHtml = Globalize.translate('LabelRunningOnPort', '<b>' + httpPort + '</b>');
|
||||
|
||||
if (systemInfo.UseHttps) {
|
||||
var httpsPort = systemInfo.HttpsPortNumber;
|
||||
portHtml += '<br>';
|
||||
portHtml += Globalize.translate('LabelRunningOnHttpsPort', '<b>' + httpsPort + '</b>');
|
||||
if (systemInfo.EnableHttps) {
|
||||
$('#ports', page).html(Globalize.translate('LabelRunningOnPorts', '<b>' + systemInfo.HttpServerPortNumber + '</b>', '<b>' + systemInfo.HttpsPortNumber + '</b>'));
|
||||
} else {
|
||||
$('#ports', page).html(Globalize.translate('LabelRunningOnPort', '<b>' + systemInfo.HttpServerPortNumber + '</b>'));
|
||||
}
|
||||
|
||||
$('#ports', page).html(portHtml);
|
||||
|
||||
if (systemInfo.CanSelfRestart) {
|
||||
$('.btnRestartContainer', page).removeClass('hide');
|
||||
} else {
|
||||
|
@ -773,11 +767,20 @@
|
|||
|
||||
renderUrls: function (page, systemInfo) {
|
||||
|
||||
if (systemInfo.LocalAddress) {
|
||||
|
||||
var localAccessHtml = Globalize.translate('LabelLocalAccessUrl', '<a href="' + systemInfo.LocalAddress + '" target="_blank">' + systemInfo.LocalAddress + '</a>');
|
||||
|
||||
$('.localUrl', page).html(localAccessHtml).show().trigger('create');
|
||||
} else {
|
||||
$('.externalUrl', page).hide();
|
||||
}
|
||||
|
||||
if (systemInfo.WanAddress) {
|
||||
|
||||
var externalUrl = systemInfo.WanAddress + ApiClient.apiPrefix();
|
||||
var externalUrl = systemInfo.WanAddress;
|
||||
|
||||
var remoteAccessHtml = Globalize.translate('LabelRemoteAccessUrl').replace('{0}', '<a href="' + externalUrl + '" target="_blank">' + externalUrl + '</a>');
|
||||
var remoteAccessHtml = Globalize.translate('LabelRemoteAccessUrl', '<a href="' + externalUrl + '" target="_blank">' + externalUrl + '</a>');
|
||||
|
||||
$('.externalUrl', page).html(remoteAccessHtml).show().trigger('create');
|
||||
} else {
|
||||
|
|
|
@ -668,6 +668,7 @@ var Dashboard = {
|
|||
var items = Dashboard.getToolsMenuLinks(page);
|
||||
|
||||
var i, length, item;
|
||||
var menuHtml = '';
|
||||
|
||||
for (i = 0, length = items.length; i < length; i++) {
|
||||
|
||||
|
@ -678,7 +679,7 @@ var Dashboard = {
|
|||
}
|
||||
|
||||
if (item.divider) {
|
||||
html += "<div class='sidebarDivider ui-bar-inherit'></div>";
|
||||
menuHtml += "<div class='sidebarDivider ui-bar-inherit'></div>";
|
||||
}
|
||||
|
||||
if (item.href) {
|
||||
|
@ -686,26 +687,27 @@ var Dashboard = {
|
|||
var style = item.color ? ' style="color:' + item.color + '"' : '';
|
||||
|
||||
if (item.selected) {
|
||||
html += '<a class="selectedSidebarLink" href="' + item.href + '">';
|
||||
menuHtml += '<a class="sidebarLink selectedSidebarLink" href="' + item.href + '">';
|
||||
} else {
|
||||
html += '<a href="' + item.href + '">';
|
||||
menuHtml += '<a class="sidebarLink" href="' + item.href + '">';
|
||||
}
|
||||
|
||||
html += '<span class="fa ' + item.icon + ' sidebarLinkIcon"' + style + '></span>';
|
||||
menuHtml += '<span class="fa ' + item.icon + ' sidebarLinkIcon"' + style + '></span>';
|
||||
|
||||
html += '<span class="sidebarLinkText">';
|
||||
html += item.name;
|
||||
html += '</span>';
|
||||
html += '</a>';
|
||||
menuHtml += '<span class="sidebarLinkText">';
|
||||
menuHtml += item.name;
|
||||
menuHtml += '</span>';
|
||||
menuHtml += '</a>';
|
||||
} else {
|
||||
|
||||
html += '<div class="sidebarHeader">';
|
||||
html += item.name;
|
||||
html += '</div>';
|
||||
menuHtml += '<div class="sidebarHeader">';
|
||||
menuHtml += item.name;
|
||||
menuHtml += '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
// collapsible
|
||||
html += menuHtml;
|
||||
// sidebarLinks
|
||||
html += '</div>';
|
||||
|
||||
// content-secondary
|
||||
|
@ -715,29 +717,10 @@ var Dashboard = {
|
|||
|
||||
html += '<p class="libraryPanelHeader" style="margin: 15px 0 15px 15px;"><a href="index.html" class="imageLink"><img src="css/images/mblogoicon.png" /><span style="color:#333;">MEDIA</span><span class="mediaBrowserAccent">BROWSER</span></a></p>';
|
||||
|
||||
for (i = 0, length = items.length; i < length; i++) {
|
||||
|
||||
item = items[i];
|
||||
|
||||
if (!user.Policy.IsAdministrator) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (item.divider) {
|
||||
html += "<div class='dashboardPanelDivider'></div>";
|
||||
}
|
||||
|
||||
if (item.href) {
|
||||
|
||||
if (item.selected) {
|
||||
html += '<a class="selectedDashboardPanelLink dashboardPanelLink" href="' + item.href + '">' + item.name + '</a>';
|
||||
} else {
|
||||
html += '<a class="dashboardPanelLink" href="' + item.href + '">' + item.name + '</a>';
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
html += '<div class="sidebarLinks">';
|
||||
html += menuHtml;
|
||||
// sidebarLinks
|
||||
html += '</div>';
|
||||
html += '</div>';
|
||||
|
||||
$('.content-primary', page).before(html);
|
||||
|
@ -1483,6 +1466,11 @@ $(document).on('pagecreate', ".page", function () {
|
|||
|
||||
var page = $(this);
|
||||
|
||||
var current = page.data('theme');
|
||||
if (current) {
|
||||
return;
|
||||
}
|
||||
|
||||
var newTheme;
|
||||
|
||||
if (page.hasClass('libraryPage')) {
|
||||
|
@ -1491,7 +1479,7 @@ $(document).on('pagecreate', ".page", function () {
|
|||
newTheme = 'a';
|
||||
}
|
||||
|
||||
var current = page.page("option", "theme");
|
||||
current = page.page("option", "theme");
|
||||
|
||||
if (current && current != newTheme) {
|
||||
page.page("option", "theme", newTheme);
|
||||
|
|
|
@ -11,10 +11,11 @@
|
|||
|
||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||
<a href="advanced.html" data-role="button">${TabGeneral}</a>
|
||||
<a href="dashboardhosting.html" data-role="button">${TabHosting}</a>
|
||||
<a href="#" data-role="button" class="ui-btn-active">${TabSecurity}</a>
|
||||
</div>
|
||||
|
||||
<h2 style="margin-top: -10px;">
|
||||
<h2>
|
||||
<span>${HeaderApiKeys}</span>
|
||||
<button class="btnNewKey" style="margin: -4px 0 0 2em; vertical-align: top;" data-icon="plus" data-mini="true" data-inline="true" type="button">${ButtonNew}</button>
|
||||
</h2>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue