Force the use of single quotes

This commit is contained in:
MrTimscampi 2020-05-04 12:44:12 +02:00
parent 8b6dc05d64
commit 9e3ca706c4
217 changed files with 8541 additions and 8540 deletions

View file

@ -1,52 +1,52 @@
define(["appSettings", "loading", "browser", "globalize", "emby-button"], function(appSettings, loading, browser, globalize) {
"use strict";
define(['appSettings', 'loading', 'browser', 'globalize', 'emby-button'], function(appSettings, loading, browser, globalize) {
'use strict';
function handleConnectionResult(page, result) {
loading.hide();
switch (result.State) {
case "SignedIn":
case 'SignedIn':
var apiClient = result.ApiClient;
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
Dashboard.navigate("home.html");
Dashboard.navigate('home.html');
break;
case "ServerSignIn":
Dashboard.navigate("login.html?serverid=" + result.Servers[0].Id, false, "none");
case 'ServerSignIn':
Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id, false, 'none');
break;
case "ServerSelection":
Dashboard.navigate("selectserver.html", false, "none");
case 'ServerSelection':
Dashboard.navigate('selectserver.html', false, 'none');
break;
case "ServerUpdateNeeded":
case 'ServerUpdateNeeded':
Dashboard.alert({
message: globalize.translate("ServerUpdateNeeded", '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
message: globalize.translate('ServerUpdateNeeded', '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
});
break;
case "Unavailable":
case 'Unavailable':
Dashboard.alert({
message: globalize.translate("MessageUnableToConnectToServer"),
title: globalize.translate("HeaderConnectionFailure")
message: globalize.translate('MessageUnableToConnectToServer'),
title: globalize.translate('HeaderConnectionFailure')
});
}
}
function submitServer(page) {
loading.show();
var host = page.querySelector("#txtServerHost").value;
var host = page.querySelector('#txtServerHost').value;
ConnectionManager.connectToAddress(host, {
enableAutoLogin: appSettings.enableAutoLogin()
}).then(function(result) {
handleConnectionResult(page, result);
}, function() {
handleConnectionResult(page, {
State: "Unavailable"
State: 'Unavailable'
});
});
}
return function(view, params) {
view.querySelector(".addServerForm").addEventListener("submit", onServerSubmit);
view.querySelector(".btnCancel").addEventListener("click", goBack);
view.querySelector('.addServerForm').addEventListener('submit', onServerSubmit);
view.querySelector('.btnCancel').addEventListener('click', goBack);
require(["autoFocuser"], function (autoFocuser) {
require(['autoFocuser'], function (autoFocuser) {
autoFocuser.autoFocus(view);
});
@ -57,7 +57,7 @@ define(["appSettings", "loading", "browser", "globalize", "emby-button"], functi
}
function goBack() {
require(["appRouter"], function(appRouter) {
require(['appRouter'], function(appRouter) {
appRouter.back();
});
}

View file

@ -1,34 +1,34 @@
define(["globalize"], function (globalize) {
"use strict";
define(['globalize'], function (globalize) {
'use strict';
function processForgotPasswordResult(result) {
if ("ContactAdmin" == result.Action) {
if ('ContactAdmin' == result.Action) {
return void Dashboard.alert({
message: globalize.translate("MessageContactAdminToResetPassword"),
title: globalize.translate("HeaderForgotPassword")
message: globalize.translate('MessageContactAdminToResetPassword'),
title: globalize.translate('HeaderForgotPassword')
});
}
if ("InNetworkRequired" == result.Action) {
if ('InNetworkRequired' == result.Action) {
return void Dashboard.alert({
message: globalize.translate("MessageForgotPasswordInNetworkRequired"),
title: globalize.translate("HeaderForgotPassword")
message: globalize.translate('MessageForgotPasswordInNetworkRequired'),
title: globalize.translate('HeaderForgotPassword')
});
}
if ("PinCode" == result.Action) {
var msg = globalize.translate("MessageForgotPasswordFileCreated");
msg += "<br/>";
msg += "<br/>";
msg += "Enter PIN here to finish Password Reset<br/>";
msg += "<br/>";
if ('PinCode' == result.Action) {
var msg = globalize.translate('MessageForgotPasswordFileCreated');
msg += '<br/>';
msg += '<br/>';
msg += 'Enter PIN here to finish Password Reset<br/>';
msg += '<br/>';
msg += result.PinFile;
msg += "<br/>";
msg += '<br/>';
return void Dashboard.alert({
message: msg,
title: globalize.translate("HeaderForgotPassword"),
title: globalize.translate('HeaderForgotPassword'),
callback: function () {
Dashboard.navigate("forgotpasswordpin.html");
Dashboard.navigate('forgotpasswordpin.html');
}
});
}
@ -37,17 +37,17 @@ define(["globalize"], function (globalize) {
return function (view, params) {
function onSubmit(e) {
ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl("Users/ForgotPassword"),
dataType: "json",
type: 'POST',
url: ApiClient.getUrl('Users/ForgotPassword'),
dataType: 'json',
data: {
EnteredUsername: view.querySelector("#txtName").value
EnteredUsername: view.querySelector('#txtName').value
}
}).then(processForgotPasswordResult);
e.preventDefault();
return false;
}
view.querySelector("form").addEventListener("submit", onSubmit);
view.querySelector('form').addEventListener('submit', onSubmit);
};
});

View file

@ -1,41 +1,41 @@
define(["globalize"], function (globalize) {
"use strict";
define(['globalize'], function (globalize) {
'use strict';
function processForgotPasswordResult(result) {
if (result.Success) {
var msg = globalize.translate("MessagePasswordResetForUsers");
msg += "<br/>";
msg += "<br/>";
msg += result.UsersReset.join("<br/>");
var msg = globalize.translate('MessagePasswordResetForUsers');
msg += '<br/>';
msg += '<br/>';
msg += result.UsersReset.join('<br/>');
return void Dashboard.alert({
message: msg,
title: globalize.translate("HeaderPasswordReset"),
title: globalize.translate('HeaderPasswordReset'),
callback: function () {
window.location.href = "index.html";
window.location.href = 'index.html';
}
});
}
Dashboard.alert({
message: globalize.translate("MessageInvalidForgotPasswordPin"),
title: globalize.translate("HeaderPasswordReset")
message: globalize.translate('MessageInvalidForgotPasswordPin'),
title: globalize.translate('HeaderPasswordReset')
});
}
return function (view, params) {
function onSubmit(e) {
ApiClient.ajax({
type: "POST",
url: ApiClient.getUrl("Users/ForgotPassword/Pin"),
dataType: "json",
type: 'POST',
url: ApiClient.getUrl('Users/ForgotPassword/Pin'),
dataType: 'json',
data: {
Pin: view.querySelector("#txtPin").value
Pin: view.querySelector('#txtPin').value
}
}).then(processForgotPasswordResult);
e.preventDefault();
return false;
}
view.querySelector("form").addEventListener("submit", onSubmit);
view.querySelector('form').addEventListener('submit', onSubmit);
};
});

View file

@ -1,5 +1,5 @@
define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layoutManager", "browser", "globalize", "cardStyle", "emby-checkbox"], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser, globalize) {
"use strict";
define(['apphost', 'appSettings', 'dom', 'connectionManager', 'loading', 'layoutManager', 'browser', 'globalize', 'cardStyle', 'emby-checkbox'], function (appHost, appSettings, dom, connectionManager, loading, layoutManager, browser, globalize) {
'use strict';
var enableFocusTransform = !browser.slow && !browser.edge;
@ -7,58 +7,58 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
loading.show();
apiClient.authenticateUserByName(username, password).then(function (result) {
var user = result.User;
var serverId = getParameterByName("serverid");
var serverId = getParameterByName('serverid');
var newUrl;
if (user.Policy.IsAdministrator && !serverId) {
newUrl = "dashboard.html";
newUrl = 'dashboard.html';
} else {
newUrl = "home.html";
newUrl = 'home.html';
}
loading.hide();
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
Dashboard.navigate(newUrl);
}, function (response) {
page.querySelector("#txtManualName").value = "";
page.querySelector("#txtManualPassword").value = "";
page.querySelector('#txtManualName').value = '';
page.querySelector('#txtManualPassword').value = '';
loading.hide();
const UnauthorizedOrForbidden = [401, 403];
if (UnauthorizedOrForbidden.includes(response.status)) {
require(["toast"], function (toast) {
const messageKey = response.status === 401 ? "MessageInvalidUser" : "MessageUnauthorizedUser";
require(['toast'], function (toast) {
const messageKey = response.status === 401 ? 'MessageInvalidUser' : 'MessageUnauthorizedUser';
toast(globalize.translate(messageKey));
});
} else {
Dashboard.alert({
message: globalize.translate("MessageUnableToConnectToServer"),
title: globalize.translate("HeaderConnectionFailure")
message: globalize.translate('MessageUnableToConnectToServer'),
title: globalize.translate('HeaderConnectionFailure')
});
}
});
}
function showManualForm(context, showCancel, focusPassword) {
context.querySelector(".chkRememberLogin").checked = appSettings.enableAutoLogin();
context.querySelector(".manualLoginForm").classList.remove("hide");
context.querySelector(".visualLoginForm").classList.add("hide");
context.querySelector(".btnManual").classList.add("hide");
context.querySelector('.chkRememberLogin').checked = appSettings.enableAutoLogin();
context.querySelector('.manualLoginForm').classList.remove('hide');
context.querySelector('.visualLoginForm').classList.add('hide');
context.querySelector('.btnManual').classList.add('hide');
if (focusPassword) {
context.querySelector("#txtManualPassword").focus();
context.querySelector('#txtManualPassword').focus();
} else {
context.querySelector("#txtManualName").focus();
context.querySelector('#txtManualName').focus();
}
if (showCancel) {
context.querySelector(".btnCancel").classList.remove("hide");
context.querySelector('.btnCancel').classList.remove('hide');
} else {
context.querySelector(".btnCancel").classList.add("hide");
context.querySelector('.btnCancel').classList.add('hide');
}
}
var metroColors = ["#6FBD45", "#4BB3DD", "#4164A5", "#E12026", "#800080", "#E1B222", "#008040", "#0094FF", "#FF00C7", "#FF870F", "#7F0037"];
var metroColors = ['#6FBD45', '#4BB3DD', '#4164A5', '#E12026', '#800080', '#E1B222', '#008040', '#0094FF', '#FF00C7', '#FF870F', '#7F0037'];
function getRandomMetroColor() {
var index = Math.floor(Math.random() * (metroColors.length - 1));
@ -82,23 +82,23 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
}
function loadUserList(context, apiClient, users) {
var html = "";
var html = '';
for (var i = 0; i < users.length; i++) {
var user = users[i];
// TODO move card creation code to Card component
var cssClass = "card squareCard scalableCard squareCard-scalable";
var cssClass = 'card squareCard scalableCard squareCard-scalable';
if (layoutManager.tv) {
cssClass += " show-focus";
cssClass += ' show-focus';
if (enableFocusTransform) {
cssClass += " show-animation";
cssClass += ' show-animation';
}
}
var cardBoxCssClass = "cardBox cardBox-bottompadded";
var cardBoxCssClass = 'cardBox cardBox-bottompadded';
html += '<button type="button" class="' + cssClass + '">';
html += '<div class="' + cardBoxCssClass + '">';
html += '<div class="cardScalable">';
@ -110,25 +110,25 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
imgUrl = apiClient.getUserImageUrl(user.Id, {
width: 300,
tag: user.PrimaryImageTag,
type: "Primary"
type: 'Primary'
});
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');\"></div>";
} else {
var background = getMetroColor(user.Id);
imgUrl = "assets/img/avatar.png";
imgUrl = 'assets/img/avatar.png';
html += '<div class="cardImageContainer coveredImage coveredImage-noScale" style="background-image:url(\'' + imgUrl + "');background-color:" + background + ';"></div>';
}
html += "</div>";
html += "</div>";
html += '</div>';
html += '</div>';
html += '<div class="cardFooter visualCardBox-cardFooter">';
html += '<div class="cardText singleCardText cardTextCentered">' + user.Name + "</div>";
html += "</div>";
html += "</div>";
html += "</button>";
html += '<div class="cardText singleCardText cardTextCentered">' + user.Name + '</div>';
html += '</div>';
html += '</div>';
html += '</button>';
}
context.querySelector("#divUsers").innerHTML = html;
context.querySelector('#divUsers').innerHTML = html;
}
return function (view, params) {
@ -143,60 +143,60 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
}
function showVisualForm() {
view.querySelector(".visualLoginForm").classList.remove("hide");
view.querySelector(".manualLoginForm").classList.add("hide");
view.querySelector(".btnManual").classList.remove("hide");
view.querySelector('.visualLoginForm').classList.remove('hide');
view.querySelector('.manualLoginForm').classList.add('hide');
view.querySelector('.btnManual').classList.remove('hide');
require(["autoFocuser"], function (autoFocuser) {
require(['autoFocuser'], function (autoFocuser) {
autoFocuser.autoFocus(view);
});
}
view.querySelector("#divUsers").addEventListener("click", function (e) {
var card = dom.parentWithClass(e.target, "card");
var cardContent = card ? card.querySelector(".cardContent") : null;
view.querySelector('#divUsers').addEventListener('click', function (e) {
var card = dom.parentWithClass(e.target, 'card');
var cardContent = card ? card.querySelector('.cardContent') : null;
if (cardContent) {
var context = view;
var id = cardContent.getAttribute("data-userid");
var name = cardContent.getAttribute("data-username");
var haspw = cardContent.getAttribute("data-haspw");
var id = cardContent.getAttribute('data-userid');
var name = cardContent.getAttribute('data-username');
var haspw = cardContent.getAttribute('data-haspw');
if (id === 'manual') {
context.querySelector("#txtManualName").value = "";
context.querySelector('#txtManualName').value = '';
showManualForm(context, true);
} else if (haspw == 'false') {
authenticateUserByName(context, getApiClient(), name, "");
authenticateUserByName(context, getApiClient(), name, '');
} else {
context.querySelector("#txtManualName").value = name;
context.querySelector("#txtManualPassword").value = "";
context.querySelector('#txtManualName').value = name;
context.querySelector('#txtManualPassword').value = '';
showManualForm(context, true, true);
}
}
});
view.querySelector(".manualLoginForm").addEventListener("submit", function (e) {
appSettings.enableAutoLogin(view.querySelector(".chkRememberLogin").checked);
view.querySelector('.manualLoginForm').addEventListener('submit', function (e) {
appSettings.enableAutoLogin(view.querySelector('.chkRememberLogin').checked);
var apiClient = getApiClient();
authenticateUserByName(view, apiClient, view.querySelector("#txtManualName").value, view.querySelector("#txtManualPassword").value);
authenticateUserByName(view, apiClient, view.querySelector('#txtManualName').value, view.querySelector('#txtManualPassword').value);
e.preventDefault();
return false;
});
view.querySelector(".btnForgotPassword").addEventListener("click", function () {
Dashboard.navigate("forgotpassword.html");
view.querySelector('.btnForgotPassword').addEventListener('click', function () {
Dashboard.navigate('forgotpassword.html');
});
view.querySelector(".btnCancel").addEventListener("click", showVisualForm);
view.querySelector(".btnManual").addEventListener("click", function () {
view.querySelector("#txtManualName").value = "";
view.querySelector('.btnCancel').addEventListener('click', showVisualForm);
view.querySelector('.btnManual').addEventListener('click', function () {
view.querySelector('#txtManualName').value = '';
showManualForm(view, true);
});
view.querySelector(".btnSelectServer").addEventListener("click", function () {
view.querySelector('.btnSelectServer').addEventListener('click', function () {
Dashboard.selectServer();
});
view.addEventListener("viewshow", function (e) {
view.addEventListener('viewshow', function (e) {
loading.show();
if (!appHost.supports('multiserver')) {
view.querySelector(".btnSelectServer").classList.add("hide");
view.querySelector('.btnSelectServer').classList.add('hide');
}
var apiClient = getApiClient();
@ -205,14 +205,14 @@ define(["apphost", "appSettings", "dom", "connectionManager", "loading", "layout
showVisualForm();
loadUserList(view, apiClient, users);
} else {
view.querySelector("#txtManualName").value = "";
view.querySelector('#txtManualName').value = '';
showManualForm(view, false, false);
}
}).catch().then(function () {
loading.hide();
});
apiClient.getJSON(apiClient.getUrl("Branding/Configuration")).then(function (options) {
view.querySelector(".disclaimer").textContent = options.LoginDisclaimer || "";
apiClient.getJSON(apiClient.getUrl('Branding/Configuration')).then(function (options) {
view.querySelector('.disclaimer').textContent = options.LoginDisclaimer || '';
});
});
};

View file

@ -1,5 +1,5 @@
define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focusManager", "connectionManager", "globalize", "actionsheet", "dom", "browser", "material-icons", "flexStyles", "emby-scroller", "emby-itemscontainer", "cardStyle", "emby-button"], function (loading, appRouter, layoutManager, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom, browser) {
"use strict";
define(['loading', 'appRouter', 'layoutManager', 'appSettings', 'apphost', 'focusManager', 'connectionManager', 'globalize', 'actionsheet', 'dom', 'browser', 'material-icons', 'flexStyles', 'emby-scroller', 'emby-itemscontainer', 'cardStyle', 'emby-button'], function (loading, appRouter, layoutManager, appSettings, appHost, focusManager, connectionManager, globalize, actionSheet, dom, browser) {
'use strict';
var enableFocusTransform = !browser.slow && !browser.edge;
@ -8,8 +8,8 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
return {
name: server.Name,
showIcon: true,
icon: "cast",
cardType: "",
icon: 'cast',
cardType: '',
id: server.Id,
server: server
};
@ -25,21 +25,21 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
// TODO move card creation code to Card component
var cssClass = "card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable";
var cssClass = 'card overflowSquareCard loginSquareCard scalableCard overflowSquareCard-scalable';
if (layoutManager.tv) {
cssClass += " show-focus";
cssClass += ' show-focus';
if (enableFocusTransform) {
cssClass += " show-animation";
cssClass += ' show-animation';
}
}
var cardBoxCssClass = "cardBox";
var cardBoxCssClass = 'cardBox';
var innerOpening = '<div class="' + cardBoxCssClass + '">';
var cardContainer = '';
cardContainer += '<button raised class="' + cssClass + '" style="display:inline-block;" data-id="' + item.id + '" data-url="' + (item.url || "") + '" data-cardtype="' + item.cardType + '">';
cardContainer += '<button raised class="' + cssClass + '" style="display:inline-block;" data-id="' + item.id + '" data-url="' + (item.url || '') + '" data-cardtype="' + item.cardType + '">';
cardContainer += innerOpening;
cardContainer += '<div class="cardScalable">';
cardContainer += '<div class="cardPadder cardPadder-square">';
@ -54,11 +54,11 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
cardContainer += '<div class="cardText cardTextCentered">' + item.name + '</div>';
cardContainer += '</div></div></button>';
return cardContainer;
}).join("");
var itemsContainer = view.querySelector(".servers");
}).join('');
var itemsContainer = view.querySelector('.servers');
if (!items.length) {
html = '<p>' + globalize.translate("MessageNoServersAvailable") + "</p>";
html = '<p>' + globalize.translate('MessageNoServersAvailable') + '</p>';
}
itemsContainer.innerHTML = html;
@ -66,20 +66,20 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
}
function updatePageStyle(view, params) {
if (params.showuser == "1") {
view.classList.add("libraryPage");
view.classList.remove("standalonePage");
view.classList.add("noSecondaryNavPage");
if (params.showuser == '1') {
view.classList.add('libraryPage');
view.classList.remove('standalonePage');
view.classList.add('noSecondaryNavPage');
} else {
view.classList.add("standalonePage");
view.classList.remove("libraryPage");
view.classList.remove("noSecondaryNavPage");
view.classList.add('standalonePage');
view.classList.remove('libraryPage');
view.classList.remove('noSecondaryNavPage');
}
}
function showGeneralError() {
loading.hide();
alertText(globalize.translate("DefaultErrorMessage"));
alertText(globalize.translate('DefaultErrorMessage'));
}
function alertText(text) {
@ -89,13 +89,13 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
}
function alertTextWithOptions(options) {
require(["alert"], function (alert) {
require(['alert'], function (alert) {
alert(options);
});
}
function showServerConnectionFailure() {
alertText(globalize.translate("MessageUnableToConnectToServer"));
alertText(globalize.translate('MessageUnableToConnectToServer'));
}
return function (view, params) {
@ -108,20 +108,20 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
var apiClient = result.ApiClient;
switch (result.State) {
case "SignedIn":
case 'SignedIn':
Dashboard.onServerChanged(apiClient.getCurrentUserId(), apiClient.accessToken(), apiClient);
Dashboard.navigate("home.html");
Dashboard.navigate('home.html');
break;
case "ServerSignIn":
case 'ServerSignIn':
Dashboard.onServerChanged(null, null, apiClient);
Dashboard.navigate("login.html?serverid=" + result.Servers[0].Id);
Dashboard.navigate('login.html?serverid=' + result.Servers[0].Id);
break;
case "ServerUpdateNeeded":
case 'ServerUpdateNeeded':
alertTextWithOptions({
text: globalize.translate("core#ServerUpdateNeeded", "https://github.com/jellyfin/jellyfin"),
html: globalize.translate("core#ServerUpdateNeeded", '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
text: globalize.translate('core#ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin'),
html: globalize.translate('core#ServerUpdateNeeded', '<a href="https://github.com/jellyfin/jellyfin">https://github.com/jellyfin/jellyfin</a>')
});
break;
@ -142,23 +142,23 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
function onServerClick(server) {
var menuItems = [];
menuItems.push({
name: globalize.translate("Connect"),
id: "connect"
name: globalize.translate('Connect'),
id: 'connect'
});
menuItems.push({
name: globalize.translate("Delete"),
id: "delete"
name: globalize.translate('Delete'),
id: 'delete'
});
actionSheet.show({
items: menuItems,
title: server.Name
}).then(function (id) {
switch (id) {
case "connect":
case 'connect':
connectToServer(server);
break;
case "delete":
case 'delete':
deleteServer(server);
}
});
@ -180,7 +180,7 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
var servers;
updatePageStyle(view, params);
view.addEventListener("viewshow", function (e) {
view.addEventListener('viewshow', function (e) {
var isRestored = e.detail.isRestored;
appRouter.setTitle(null);
@ -188,16 +188,16 @@ define(["loading", "appRouter", "layoutManager", "appSettings", "apphost", "focu
loadServers();
}
});
view.querySelector(".servers").addEventListener("click", function (e) {
var card = dom.parentWithClass(e.target, "card");
view.querySelector('.servers').addEventListener('click', function (e) {
var card = dom.parentWithClass(e.target, 'card');
if (card) {
var url = card.getAttribute("data-url");
var url = card.getAttribute('data-url');
if (url) {
appRouter.show(url);
} else {
var id = card.getAttribute("data-id");
var id = card.getAttribute('data-id');
onServerClick(servers.filter(function (s) {
return s.Id === id;
})[0]);