";
diff --git a/src/components/chromecast/chromecasthelpers.js b/src/components/chromecast/chromecasthelpers.js
index 0beba824c0..9d6f811cb1 100644
--- a/src/components/chromecast/chromecasthelpers.js
+++ b/src/components/chromecast/chromecasthelpers.js
@@ -5,7 +5,7 @@ define(['events'], function (events) {
//
// https://github.com/ravisorg/LinkParser
//
- // Locate and extract almost any URL within a string. Handles protocol-less domains, IPv4 and
+ // Locate and extract almost any URL within a string. Handles protocol-less domains, IPv4 and
// IPv6, unrecognised TLDs, and more.
//
// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.
@@ -14,26 +14,26 @@ define(['events'], function (events) {
// Original URL regex from the Android android.text.util.Linkify function, found here:
// http://stackoverflow.com/a/19696443
- //
- // However there were problems with it, most probably related to the fact it was
+ //
+ // However there were problems with it, most probably related to the fact it was
// written in 2007, and it's been highly modified.
- //
- // 1) I didn't like the fact that it was tied to specific TLDs, since new ones
+ //
+ // 1) I didn't like the fact that it was tied to specific TLDs, since new ones
// are being added all the time it wouldn't be reasonable to expect developer to
// be continually updating their regular expressions.
- //
- // 2) It didn't allow unicode characters in the domains which are now allowed in
+ //
+ // 2) It didn't allow unicode characters in the domains which are now allowed in
// many languages, (including some IDN TLDs). Again these are constantly being
// added to and it doesn't seem reasonable to hard-code them. Note this ended up
// not being possible in standard JS due to the way it handles multibyte strings.
// It is possible using XRegExp, however a big performance hit results. Disabled
// for now.
- //
+ //
// 3) It didn't allow for IPv6 hostnames
// IPv6 regex from http://stackoverflow.com/a/17871737
//
// 4) It was very poorly commented
- //
+ //
// 5) It wasn't as smart as it could have been about what should be part of a
// URL and what should be part of human language.
@@ -102,8 +102,8 @@ define(['events'], function (events) {
+ "|(?:\\%[a-f0-9]{2})"
// some characters are much more likely to be used AFTER a url and
// were not intended to be included in the url itself. Mostly end
- // of sentence type things. It's also likely that the URL would
- // still work if any of these characters were missing from the end
+ // of sentence type things. It's also likely that the URL would
+ // still work if any of these characters were missing from the end
// because we parsed it incorrectly. For these characters to be accepted
// they must be followed by another character that we're reasonably
// sure is part of the url
diff --git a/src/components/chromecast/chromecastplayer.js b/src/components/chromecast/chromecastplayer.js
index f3f7e6b865..7302b74124 100644
--- a/src/components/chromecast/chromecastplayer.js
+++ b/src/components/chromecast/chromecastplayer.js
@@ -479,8 +479,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
TotalRecordCount: 1
};
});
- }
- else {
+ } else {
query.Limit = query.Limit || 100;
query.ExcludeLocationTypes = "Virtual";
@@ -752,8 +751,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
ChromecastPlayer.prototype.volumeDown = function () {
var vol = this._castPlayer.session.receiver.volume.level;
- if (vol == null)
- {
+ if (vol == null) {
vol = 0.5;
}
vol -= 0.05;
@@ -776,8 +774,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', '
ChromecastPlayer.prototype.volumeUp = function () {
var vol = this._castPlayer.session.receiver.volume.level;
- if (vol == null)
- {
+ if (vol == null) {
vol = 0.5;
}
vol += 0.05;
diff --git a/src/components/collectioneditor/collectioneditor.js b/src/components/collectioneditor/collectioneditor.js
index ccb1cdc286..a91594556e 100644
--- a/src/components/collectioneditor/collectioneditor.js
+++ b/src/components/collectioneditor/collectioneditor.js
@@ -243,13 +243,13 @@ define(['dialogHelper', 'loading', 'apphost', 'layoutManager', 'connectionManage
var title = items.length ? globalize.translate('HeaderAddToCollection') : globalize.translate('NewCollection');
html += '
\ No newline at end of file
+
diff --git a/src/components/multiselect/multiselect.js b/src/components/multiselect/multiselect.js
index d706b76b99..6b2906cb0a 100644
--- a/src/components/multiselect/multiselect.js
+++ b/src/components/multiselect/multiselect.js
@@ -1,5 +1,5 @@
-define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'globalize', 'appRouter', 'dom', 'css!./multiselect'], function (browser, appStorage, appHost, loading, connectionManager, globalize, appRouter, dom) {
- 'use strict';
+define(["browser", "appStorage", "apphost", "loading", "connectionManager", "globalize", "appRouter", "dom", "css!./multiselect"], function (browser, appStorage, appHost, loading, connectionManager, globalize, appRouter, dom) {
+ "use strict";
var selectedItems = [];
var selectedElements = [];
@@ -15,12 +15,12 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
selectedItems = [];
selectedElements = [];
- var elems = document.querySelectorAll('.itemSelectionPanel');
+ var elems = document.querySelectorAll(".itemSelectionPanel");
for (var i = 0, length = elems.length; i < length; i++) {
var parent = elems[i].parentNode;
parent.removeChild(elems[i]);
- parent.classList.remove('withMultiSelect');
+ parent.classList.remove("withMultiSelect");
}
}
}
@@ -28,13 +28,13 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
function onItemSelectionPanelClick(e, itemSelectionPanel) {
// toggle the checkbox, if it wasn't clicked on
- if (!dom.parentWithClass(e.target, 'chkItemSelect')) {
- var chkItemSelect = itemSelectionPanel.querySelector('.chkItemSelect');
+ if (!dom.parentWithClass(e.target, "chkItemSelect")) {
+ var chkItemSelect = itemSelectionPanel.querySelector(".chkItemSelect");
if (chkItemSelect) {
- if (chkItemSelect.classList.contains('checkedInitial')) {
- chkItemSelect.classList.remove('checkedInitial');
+ if (chkItemSelect.classList.contains("checkedInitial")) {
+ chkItemSelect.classList.remove("checkedInitial");
} else {
var newValue = !chkItemSelect.checked;
chkItemSelect.checked = newValue;
@@ -50,7 +50,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
function updateItemSelection(chkItemSelect, selected) {
- var id = dom.parentWithAttribute(chkItemSelect, 'data-id').getAttribute('data-id');
+ var id = dom.parentWithAttribute(chkItemSelect, "data-id").getAttribute("data-id");
if (selected) {
@@ -73,7 +73,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
}
if (selectedItems.length) {
- var itemSelectionCount = document.querySelector('.itemSelectionCount');
+ var itemSelectionCount = document.querySelector(".itemSelectionCount");
if (itemSelectionCount) {
itemSelectionCount.innerHTML = selectedItems.length;
}
@@ -88,27 +88,27 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
function showSelection(item, isChecked) {
- var itemSelectionPanel = item.querySelector('.itemSelectionPanel');
+ var itemSelectionPanel = item.querySelector(".itemSelectionPanel");
if (!itemSelectionPanel) {
- itemSelectionPanel = document.createElement('div');
- itemSelectionPanel.classList.add('itemSelectionPanel');
+ itemSelectionPanel = document.createElement("div");
+ itemSelectionPanel.classList.add("itemSelectionPanel");
- var parent = item.querySelector('.cardBox') || item.querySelector('.cardContent');
- parent.classList.add('withMultiSelect');
+ var parent = item.querySelector(".cardBox") || item.querySelector(".cardContent");
+ parent.classList.add("withMultiSelect");
parent.appendChild(itemSelectionPanel);
- var cssClass = 'chkItemSelect';
+ var cssClass = "chkItemSelect";
if (isChecked && !browser.firefox) {
// In firefox, the initial tap hold doesnt' get treated as a click
// In other browsers it does, so we need to make sure that initial click is ignored
- cssClass += ' checkedInitial';
+ cssClass += " checkedInitial";
}
- var checkedAttribute = isChecked ? ' checked' : '';
+ var checkedAttribute = isChecked ? " checked" : "";
itemSelectionPanel.innerHTML = '';
- var chkItemSelect = itemSelectionPanel.querySelector('.chkItemSelect');
- chkItemSelect.addEventListener('change', onSelectionChange);
+ var chkItemSelect = itemSelectionPanel.querySelector(".chkItemSelect");
+ chkItemSelect.addEventListener("change", onSelectionChange);
}
}
@@ -118,27 +118,27 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
if (!selectionCommandsPanel) {
- selectionCommandsPanel = document.createElement('div');
- selectionCommandsPanel.classList.add('selectionCommandsPanel');
+ selectionCommandsPanel = document.createElement("div");
+ selectionCommandsPanel.classList.add("selectionCommandsPanel");
document.body.appendChild(selectionCommandsPanel);
currentSelectionCommandsPanel = selectionCommandsPanel;
- var html = '';
+ var html = "";
html += 'close';
html += '';
- var moreIcon = '';
+ var moreIcon = "more_horiz";
html += '' + moreIcon + '';
selectionCommandsPanel.innerHTML = html;
- selectionCommandsPanel.querySelector('.btnCloseSelectionPanel').addEventListener('click', hideSelections);
+ selectionCommandsPanel.querySelector(".btnCloseSelectionPanel").addEventListener("click", hideSelections);
- var btnSelectionPanelOptions = selectionCommandsPanel.querySelector('.btnSelectionPanelOptions');
+ var btnSelectionPanelOptions = selectionCommandsPanel.querySelector(".btnSelectionPanelOptions");
- dom.addEventListener(btnSelectionPanelOptions, 'click', showMenuForSelectedItems, { passive: true });
+ dom.addEventListener(btnSelectionPanelOptions, "click", showMenuForSelectedItems, { passive: true });
}
}
@@ -146,7 +146,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
return new Promise(function (resolve, reject) {
- require(['alert'], function (alert) {
+ require(["alert"], function (alert) {
alert(options).then(resolve, resolve);
});
});
@@ -156,15 +156,15 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
return new Promise(function (resolve, reject) {
- var msg = globalize.translate('ConfirmDeleteItem');
- var title = globalize.translate('HeaderDeleteItem');
+ var msg = globalize.translate("ConfirmDeleteItem");
+ var title = globalize.translate("HeaderDeleteItem");
if (itemIds.length > 1) {
- msg = globalize.translate('ConfirmDeleteItems');
- title = globalize.translate('HeaderDeleteItems');
+ msg = globalize.translate("ConfirmDeleteItems");
+ title = globalize.translate("HeaderDeleteItems");
}
- require(['confirm'], function (confirm) {
+ require(["confirm"], function (confirm) {
confirm(msg, title).then(function () {
var promises = itemIds.map(function (itemId) {
@@ -173,7 +173,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
Promise.all(promises).then(resolve, function () {
- alertText(globalize.translate('ErrorDeletingItem')).then(reject, reject);
+ alertText(globalize.translate("ErrorDeletingItem")).then(reject, reject);
});
}, reject);
@@ -190,59 +190,60 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
var menuItems = [];
menuItems.push({
- name: globalize.translate('AddToCollection'),
- id: 'addtocollection',
- ironIcon: 'add'
+ name: globalize.translate("AddToCollection"),
+ id: "addtocollection",
+ icon: "add"
});
menuItems.push({
- name: globalize.translate('AddToPlaylist'),
- id: 'playlist',
- ironIcon: 'playlist-add'
+ name: globalize.translate("AddToPlaylist"),
+ id: "playlist",
+ icon: "playlist_add"
});
// TODO: Be more dynamic based on what is selected
if (user.Policy.EnableContentDeletion) {
menuItems.push({
- name: globalize.translate('Delete'),
- id: 'delete',
- ironIcon: 'delete'
+ name: globalize.translate("Delete"),
+ id: "delete",
+ icon: "delete"
});
}
- if (user.Policy.EnableContentDownloading && appHost.supports('filedownload')) {
+ if (user.Policy.EnableContentDownloading && appHost.supports("filedownload")) {
menuItems.push({
- name: Globalize.translate('ButtonDownload'),
- id: 'download',
- ironIcon: 'file-download'
+ name: Globalize.translate("ButtonDownload"),
+ id: "download",
+ icon: "file_download"
});
}
if (user.Policy.IsAdministrator) {
menuItems.push({
- name: globalize.translate('GroupVersions'),
- id: 'groupvideos',
- ironIcon: 'call-merge'
+ name: globalize.translate("GroupVersions"),
+ id: "groupvideos",
+ icon: "call_merge"
});
}
menuItems.push({
- name: globalize.translate('MarkPlayed'),
- id: 'markplayed'
+ name: globalize.translate("MarkPlayed"),
+ id: "markplayed",
+ icon: "check_box"
});
menuItems.push({
- name: globalize.translate('MarkUnplayed'),
- id: 'markunplayed'
+ name: globalize.translate("MarkUnplayed"),
+ id: "markunplayed",
+ icon: "check_box_outline_blank"
});
menuItems.push({
- name: globalize.translate('RefreshMetadata'),
- id: 'refresh'
+ name: globalize.translate("RefreshMetadata"),
+ id: "refresh",
+ icon: "refresh"
});
-
-
require(['actionsheet'], function (actionsheet) {
actionsheet.show({
items: menuItems,
@@ -252,8 +253,8 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
var serverId = apiClient.serverInfo().Id;
switch (id) {
- case 'addtocollection':
- require(['collectionEditor'], function (collectionEditor) {
+ case "addtocollection":
+ require(["collectionEditor"], function (collectionEditor) {
new collectionEditor().show({
items: items,
serverId: serverId
@@ -262,8 +263,8 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
hideSelections();
dispatchNeedsRefresh();
break;
- case 'playlist':
- require(['playlistEditor'], function (playlistEditor) {
+ case "playlist":
+ require(["playlistEditor"], function (playlistEditor) {
new playlistEditor().show({
items: items,
serverId: serverId
@@ -272,30 +273,30 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
hideSelections();
dispatchNeedsRefresh();
break;
- case 'delete':
+ case "delete":
deleteItems(apiClient, items).then(dispatchNeedsRefresh);
hideSelections();
dispatchNeedsRefresh();
break;
- case 'groupvideos':
+ case "groupvideos":
combineVersions(apiClient, items);
break;
- case 'markplayed':
+ case "markplayed":
items.forEach(function (itemId) {
apiClient.markPlayed(apiClient.getCurrentUserId(), itemId);
});
hideSelections();
dispatchNeedsRefresh();
break;
- case 'markunplayed':
+ case "markunplayed":
items.forEach(function (itemId) {
apiClient.markUnplayed(apiClient.getCurrentUserId(), itemId);
});
hideSelections();
dispatchNeedsRefresh();
break;
- case 'refresh':
- require(['refreshDialog'], function (refreshDialog) {
+ case "refresh":
+ require(["refreshDialog"], function (refreshDialog) {
new refreshDialog({
itemIds: items,
serverId: serverId
@@ -320,7 +321,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
[].forEach.call(selectedElements, function (i) {
- var container = dom.parentWithAttribute(i, 'is', 'emby-itemscontainer');
+ var container = dom.parentWithAttribute(i, "is", "emby-itemscontainer");
if (container && elems.indexOf(container) === -1) {
elems.push(container);
@@ -336,9 +337,9 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
if (selection.length < 2) {
- require(['alert'], function (alert) {
+ require(["alert"], function (alert) {
alert({
- text: globalize.translate('PleaseSelectTwoItems')
+ text: globalize.translate("PleaseSelectTwoItems")
});
});
return;
@@ -349,7 +350,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
apiClient.ajax({
type: "POST",
- url: apiClient.getUrl("Videos/MergeVersions", { Ids: selection.join(',') })
+ url: apiClient.getUrl("Videos/MergeVersions", { Ids: selection.join(",") })
}).then(function () {
@@ -361,8 +362,8 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
function showSelections(initialCard) {
- require(['emby-checkbox'], function () {
- var cards = document.querySelectorAll('.card');
+ require(["emby-checkbox"], function () {
+ var cards = document.querySelectorAll(".card");
for (var i = 0, length = cards.length; i < length; i++) {
showSelection(cards[i], initialCard === cards[i]);
}
@@ -378,9 +379,9 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
if (selectedItems.length) {
- var card = dom.parentWithClass(target, 'card');
+ var card = dom.parentWithClass(target, "card");
if (card) {
- var itemSelectionPanel = card.querySelector('.itemSelectionPanel');
+ var itemSelectionPanel = card.querySelector(".itemSelectionPanel");
if (itemSelectionPanel) {
return onItemSelectionPanelClick(e, itemSelectionPanel);
}
@@ -392,7 +393,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
}
}
- document.addEventListener('viewbeforehide', hideSelections);
+ document.addEventListener("viewbeforehide", hideSelections);
return function (options) {
@@ -402,7 +403,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
function onTapHold(e) {
- var card = dom.parentWithClass(e.target, 'card');
+ var card = dom.parentWithClass(e.target, "card");
if (card) {
@@ -439,7 +440,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
var element = touch.target;
if (element) {
- var card = dom.parentWithClass(element, 'card');
+ var card = dom.parentWithClass(element, "card");
if (card) {
@@ -508,7 +509,7 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
return;
}
- var card = dom.parentWithClass(touchTarget, 'card');
+ var card = dom.parentWithClass(touchTarget, "card");
touchTarget = null;
if (card) {
@@ -521,27 +522,27 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
// mobile safari doesn't allow contextmenu override
if (browser.touch && !browser.safari) {
- element.addEventListener('contextmenu', onTapHold);
+ element.addEventListener("contextmenu", onTapHold);
} else {
- dom.addEventListener(element, 'touchstart', onTouchStart, {
+ dom.addEventListener(element, "touchstart", onTouchStart, {
passive: true
});
- dom.addEventListener(element, 'touchmove', onTouchMove, {
+ dom.addEventListener(element, "touchmove", onTouchMove, {
passive: true
});
- dom.addEventListener(element, 'touchend', onTouchEnd, {
+ dom.addEventListener(element, "touchend", onTouchEnd, {
passive: true
});
- dom.addEventListener(element, 'touchcancel', onTouchEnd, {
+ dom.addEventListener(element, "touchcancel", onTouchEnd, {
passive: true
});
- dom.addEventListener(element, 'mousedown', onMouseDown, {
+ dom.addEventListener(element, "mousedown", onMouseDown, {
passive: true
});
- dom.addEventListener(element, 'mouseleave', onMouseOut, {
+ dom.addEventListener(element, "mouseleave", onMouseOut, {
passive: true
});
- dom.addEventListener(element, 'mouseup', onMouseOut, {
+ dom.addEventListener(element, "mouseup", onMouseOut, {
passive: true
});
}
@@ -550,38 +551,38 @@ define(['browser', 'appStorage', 'apphost', 'loading', 'connectionManager', 'glo
initTapHold(container);
if (options.bindOnClick !== false) {
- container.addEventListener('click', onContainerClick);
+ container.addEventListener("click", onContainerClick);
}
self.onContainerClick = onContainerClick;
self.destroy = function () {
- container.removeEventListener('click', onContainerClick);
- container.removeEventListener('contextmenu', onTapHold);
+ container.removeEventListener("click", onContainerClick);
+ container.removeEventListener("contextmenu", onTapHold);
var element = container;
- dom.removeEventListener(element, 'touchstart', onTouchStart, {
+ dom.removeEventListener(element, "touchstart", onTouchStart, {
passive: true
});
- dom.removeEventListener(element, 'touchmove', onTouchMove, {
+ dom.removeEventListener(element, "touchmove", onTouchMove, {
passive: true
});
- dom.removeEventListener(element, 'touchend', onTouchEnd, {
+ dom.removeEventListener(element, "touchend", onTouchEnd, {
passive: true
});
// this fires in safari due to magnifying class
- //dom.removeEventListener(element, 'touchcancel', onTouchEnd, {
+ //dom.removeEventListener(element, "touchcancel", onTouchEnd, {
// passive: true
//});
- dom.removeEventListener(element, 'mousedown', onMouseDown, {
+ dom.removeEventListener(element, "mousedown", onMouseDown, {
passive: true
});
- dom.removeEventListener(element, 'mouseleave', onMouseOut, {
+ dom.removeEventListener(element, "mouseleave", onMouseOut, {
passive: true
});
- dom.removeEventListener(element, 'mouseup', onMouseOut, {
+ dom.removeEventListener(element, "mouseup", onMouseOut, {
passive: true
});
};
diff --git a/src/components/navdrawer/navdrawer.js b/src/components/navdrawer/navdrawer.js
index cbf5c1eebc..69adbd1f5a 100644
--- a/src/components/navdrawer/navdrawer.js
+++ b/src/components/navdrawer/navdrawer.js
@@ -21,13 +21,13 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
}
function onMenuTouchMove(e) {
- var isOpen = self.visible,
- touches = getTouches(e),
- touch = touches[0] || {},
- endX = touch.clientX || 0,
- endY = touch.clientY || 0,
- deltaX = endX - (menuTouchStartX || 0),
- deltaY = endY - (menuTouchStartY || 0);
+ var isOpen = self.visible;
+ var touches = getTouches(e);
+ var touch = touches[0] || {};
+ var endX = touch.clientX || 0;
+ var endY = touch.clientY || 0;
+ var deltaX = endX - (menuTouchStartX || 0);
+ var deltaY = endY - (menuTouchStartY || 0);
setVelocity(deltaX), isOpen && 1 !== dragMode && deltaX > 0 && (dragMode = 2), 0 === dragMode && (!isOpen || Math.abs(deltaX) >= 10) && Math.abs(deltaY) < 5 ? (dragMode = 1, scrollContainer.addEventListener("scroll", disableEvent), self.showMask()) : 0 === dragMode && Math.abs(deltaY) >= 5 && (dragMode = 2), 1 === dragMode && (newPos = currentPos + deltaX, self.changeMenuPos())
}
@@ -36,12 +36,12 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
scrollContainer.removeEventListener("scroll", disableEvent);
dragMode = 0;
- var touches = getTouches(e),
- touch = touches[0] || {},
- endX = touch.clientX || 0,
- endY = touch.clientY || 0,
- deltaX = endX - (menuTouchStartX || 0),
- deltaY = endY - (menuTouchStartY || 0);
+ var touches = getTouches(e);
+ var touch = touches[0] || {};
+ var endX = touch.clientX || 0;
+ var endY = touch.clientY || 0;
+ var deltaX = endX - (menuTouchStartX || 0);
+ var deltaY = endY - (menuTouchStartY || 0);
currentPos = deltaX;
self.checkMenuState(deltaX, deltaY);
@@ -78,15 +78,15 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
}
function onBackgroundTouchStart(e) {
- var touches = getTouches(e),
- touch = touches[0] || {};
+ var touches = getTouches(e);
+ var touch = touches[0] || {};
backgroundTouchStartX = touch.clientX, backgroundTouchStartTime = (new Date).getTime()
}
function onBackgroundTouchMove(e) {
- var touches = getTouches(e),
- touch = touches[0] || {},
- endX = touch.clientX || 0;
+ var touches = getTouches(e);
+ var touch = touches[0] || {};
+ var endX = touch.clientX || 0;
if (endX <= options.width && self.isVisible) {
countStart++;
var deltaX = endX - (backgroundTouchStartX || 0);
@@ -100,10 +100,10 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
}
function onBackgroundTouchEnd(e) {
- var touches = getTouches(e),
- touch = touches[0] || {},
- endX = touch.clientX || 0,
- deltaX = endX - (backgroundTouchStartX || 0);
+ var touches = getTouches(e);
+ var touch = touches[0] || {};
+ var endX = touch.clientX || 0;
+ var deltaX = endX - (backgroundTouchStartX || 0);
self.checkMenuState(deltaX), countStart = 0
}
@@ -111,21 +111,24 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
var classList = mask.classList;
classList.contains("backdrop") || classList.add("hide")
}
- var self, defaults, mask, newPos = 0,
- currentPos = 0,
- startPoint = 0,
- countStart = 0,
- velocity = 0;
+ var self;
+ var defaults;
+ var mask;
+ var newPos = 0;
+ var currentPos = 0;
+ var startPoint = 0;
+ var countStart = 0;
+ var velocity = 0;
options.target.classList.add("transition");
- var dragMode = 0,
- scrollContainer = options.target.querySelector(".mainDrawer-scrollContainer");
+ var dragMode = 0;
+ var scrollContainer = options.target.querySelector(".mainDrawer-scrollContainer");
scrollContainer.classList.add("scrollY");
var TouchMenuLA = function() {
self = this, defaults = {
width: 260,
handleSize: 10,
disableMask: !1,
- maxMaskOpacity: .5
+ maxMaskOpacity: 0.5
}, this.isVisible = !1, this.initialize()
};
TouchMenuLA.prototype.initElements = function() {
@@ -133,8 +136,11 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
passive: !0
}))
};
- var menuTouchStartX, menuTouchStartY, menuTouchStartTime, edgeContainer = document.querySelector(".mainDrawerHandle"),
- isPeeking = !1;
+ var menuTouchStartX;
+ var menuTouchStartY;
+ var menuTouchStartTime;
+ var edgeContainer = document.querySelector(".mainDrawerHandle");
+ var isPeeking = false;
TouchMenuLA.prototype.animateToPosition = function(pos) {
requestAnimationFrame(function() {
options.target.style.transform = pos ? "translateX(" + pos + "px)" : "none"
@@ -146,7 +152,7 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
self.close()
})
}, TouchMenuLA.prototype.checkMenuState = function(deltaX, deltaY) {
- velocity >= .4 ? deltaX >= 0 || Math.abs(deltaY || 0) >= 70 ? self.open() : self.close() : newPos >= 100 ? self.open() : newPos && self.close()
+ velocity >= 0.4 ? deltaX >= 0 || Math.abs(deltaY || 0) >= 70 ? self.open() : self.close() : newPos >= 100 ? self.open() : newPos && self.close()
}, TouchMenuLA.prototype.open = function() {
this.animateToPosition(options.width), currentPos = options.width, this.isVisible = !0, options.target.classList.add("drawer-open"), self.showMask(), self.invoke(options.onChange)
}, TouchMenuLA.prototype.close = function() {
@@ -154,7 +160,8 @@ define(["browser", "dom", "css!./navdrawer", "scrollStyles"], function(browser,
}, TouchMenuLA.prototype.toggle = function() {
self.isVisible ? self.close() : self.open()
};
- var backgroundTouchStartX, backgroundTouchStartTime;
+ var backgroundTouchStartX;
+ var backgroundTouchStartTime;
TouchMenuLA.prototype.showMask = function() {
mask.classList.remove("hide"), mask.offsetWidth, mask.classList.add("backdrop")
}, TouchMenuLA.prototype.hideMask = function() {
diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js
index 304eec7e08..62de365d99 100644
--- a/src/components/notifications/notifications.js
+++ b/src/components/notifications/notifications.js
@@ -21,8 +21,7 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
if (notification.close) {
notification.close();
- }
- else if (notification.cancel) {
+ } else if (notification.cancel) {
notification.cancel();
}
}, timeoutMs);
@@ -180,15 +179,12 @@ define(['serverNotifications', 'playbackManager', 'events', 'globalize', 'requir
if (status === 'completed') {
notification.title = globalize.translate('PackageInstallCompleted').replace('{0}', installation.Name + ' ' + installation.Version);
notification.vibrate = true;
- }
- else if (status === 'cancelled') {
+ } else if (status === 'cancelled') {
notification.title = globalize.translate('PackageInstallCancelled').replace('{0}', installation.Name + ' ' + installation.Version);
- }
- else if (status === 'failed') {
+ } else if (status === 'failed') {
notification.title = globalize.translate('PackageInstallFailed').replace('{0}', installation.Name + ' ' + installation.Version);
notification.vibrate = true;
- }
- else if (status === 'progress') {
+ } else if (status === 'progress') {
notification.title = globalize.translate('InstallingPackage').replace('{0}', installation.Name + ' ' + installation.Version);
notification.actions =
diff --git a/src/components/nowplayingbar/nowplayingbar.js b/src/components/nowplayingbar/nowplayingbar.js
index 9fac61ba1f..37a1a32f56 100644
--- a/src/components/nowplayingbar/nowplayingbar.js
+++ b/src/components/nowplayingbar/nowplayingbar.js
@@ -42,31 +42,31 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
// The onclicks are needed due to the return false above
html += '
';
- html += '';
+ html += 'skip_previous';
- html += '';
+ html += 'pause';
html += 'stop';
- html += '';
+ html += 'skip_next';
html += '';
html += '
';
html += '
';
- html += '';
+ html += 'volume_up';
html += '
';
html += '';
html += '
';
- html += '';
+ html += 'repeat';
html += '
';
html += '
';
- html += '';
- html += '';
+ html += 'pause';
+ html += 'playlist_play';
html += '
';
html += '';
@@ -134,7 +134,8 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
}
});
- var i, length;
+ var i;
+ var length;
playPauseButtons = elem.querySelectorAll('.playPauseButton');
for (i = 0, length = playPauseButtons.length; i < length; i++) {
playPauseButtons[i].addEventListener('click', onPlayPauseClick);
@@ -195,7 +196,6 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
volumeSlider.addEventListener('mousemove', setVolume);
volumeSlider.addEventListener('touchmove', setVolume);
-
positionSlider = elem.querySelector('.nowPlayingBarPositionSlider');
positionSlider.addEventListener('change', function () {
@@ -282,8 +282,8 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
}
function updatePlayPauseState(isPaused) {
-
- var i, length;
+ var i;
+ var length;
if (playPauseButtons) {
if (isPaused) {
@@ -345,8 +345,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
if (repeatMode === 'RepeatAll') {
toggleRepeatButtonIcon.innerHTML = "repeat";
toggleRepeatButton.classList.add('repeatButton-active');
- }
- else if (repeatMode === 'RepeatOne') {
+ } else if (repeatMode === 'RepeatOne') {
toggleRepeatButtonIcon.innerHTML = "repeat_one";
toggleRepeatButton.classList.add('repeatButton-active');
} else {
@@ -401,9 +400,9 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
}
if (isMuted) {
- muteButton.querySelector('i').innerHTML = '';
+ muteButton.querySelector('i').innerHTML = 'volume_off';
} else {
- muteButton.querySelector('i').innerHTML = '';
+ muteButton.querySelector('i').innerHTML = 'volume_up';
}
if (progressElement) {
@@ -572,7 +571,7 @@ define(['require', 'datetime', 'itemHelper', 'events', 'browser', 'imageLoader',
var userData = item.UserData || {};
var likes = userData.Likes == null ? '' : userData.Likes;
- nowPlayingUserData.innerHTML = '';
+ nowPlayingUserData.innerHTML = 'favorite';
});
}
diff --git a/src/components/playback/autoplaydetect.js b/src/components/playback/autoplaydetect.js
index 7a7a73a538..3610eef2ab 100644
--- a/src/components/playback/autoplaydetect.js
+++ b/src/components/playback/autoplaydetect.js
@@ -48,9 +48,7 @@ define([], function () {
}
timeout = setTimeout(testAutoplay, 500);
- }
-
- catch (e) {
+ } catch (e) {
reject();
return;
}
diff --git a/src/components/playback/brightnessosd.js b/src/components/playback/brightnessosd.js
index 1797463f29..b2bf9d4106 100644
--- a/src/components/playback/brightnessosd.js
+++ b/src/components/playback/brightnessosd.js
@@ -11,7 +11,7 @@ define(['events', 'playbackManager', 'dom', 'browser', 'css!./iconosd', 'materia
function getOsdElementHtml() {
var html = '';
- html += '';
+ html += 'brightness_high';
html += '
';
@@ -102,12 +102,11 @@ define(['events', 'playbackManager', 'dom', 'browser', 'css!./iconosd', 'materia
if (iconElement) {
if (brightness >= 80) {
- iconElement.innerHTML = '';
- }
- else if (brightness >= 20) {
- iconElement.innerHTML = '';
+ iconElement.innerHTML = 'brightness_high';
+ } else if (brightness >= 20) {
+ iconElement.innerHTML = 'brightness_medium';
} else {
- iconElement.innerHTML = '';
+ iconElement.innerHTML = 'brightness_low';
}
}
if (progressElement) {
@@ -162,4 +161,4 @@ define(['events', 'playbackManager', 'dom', 'browser', 'css!./iconosd', 'materia
bindToPlayer(playbackManager.getCurrentPlayer());
-});
\ No newline at end of file
+});
diff --git a/src/components/playback/mediasession.js b/src/components/playback/mediasession.js
index 63e0bde6c1..7f4b9f519e 100644
--- a/src/components/playback/mediasession.js
+++ b/src/components/playback/mediasession.js
@@ -158,7 +158,7 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f
lastUpdateTime = now;
- if (navigator.mediaSession){
+ if (navigator.mediaSession) {
navigator.mediaSession.metadata = new MediaMetadata({
title: title,
artist: artist,
@@ -278,7 +278,6 @@ define(['playbackManager', 'nowPlayingHelper', 'events', 'connectionManager'], f
}
if (navigator.mediaSession) {
-
navigator.mediaSession.setActionHandler('previoustrack', function () {
execute('previousTrack');
});
diff --git a/src/components/playback/nowplayinghelper.js b/src/components/playback/nowplayinghelper.js
index d5803b426f..b1af977ab0 100644
--- a/src/components/playback/nowplayinghelper.js
+++ b/src/components/playback/nowplayinghelper.js
@@ -43,8 +43,7 @@ define([], function () {
} else if (nowPlayingItem.Artists && nowPlayingItem.Artists.length) {
bottomText = nowPlayingItem.Artists.join(', ');
- }
- else if (nowPlayingItem.SeriesName || nowPlayingItem.Album) {
+ } else if (nowPlayingItem.SeriesName || nowPlayingItem.Album) {
bottomText = topText;
topText = nowPlayingItem.SeriesName || nowPlayingItem.Album;
@@ -60,8 +59,7 @@ define([], function () {
} else {
topItem = null;
}
- }
- else if (nowPlayingItem.ProductionYear && includeNonNameInfo !== false) {
+ } else if (nowPlayingItem.ProductionYear && includeNonNameInfo !== false) {
bottomText = nowPlayingItem.ProductionYear;
}
diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js
index 13497e1912..23f0d4572e 100644
--- a/src/components/playback/playbackmanager.js
+++ b/src/components/playback/playbackmanager.js
@@ -107,8 +107,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
TotalRecordCount: 1
};
});
- }
- else {
+ } else {
query.Limit = query.Limit || 300;
query.Fields = "Chapters";
@@ -182,8 +181,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
if (container === 'm4a') {
return 'audio/mp4';
}
- }
- else if (type === 'video') {
+ } else if (type === 'video') {
if (container === 'mkv') {
return 'video/x-matroska';
}
@@ -212,8 +210,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
var results = regex.exec(url);
if (results == null) {
return "";
- }
- else {
+ } else {
return decodeURIComponent(results[1].replace(/\+/g, " "));
}
}
@@ -649,13 +646,10 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
// If this is the only way it can be played, then allow it
if (!mediaSource.SupportsDirectStream && !mediaSource.SupportsTranscoding) {
return Promise.resolve(true);
- }
- else {
+ } else {
return isHostReachable(mediaSource, apiClient);
}
- }
-
- else if (mediaSource.Protocol === 'File') {
+ } else if (mediaSource.Protocol === 'File') {
return new Promise(function (resolve, reject) {
@@ -1272,7 +1266,8 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
var currentMediaSource = self.currentMediaSource(player);
var mediaStreams = [];
- var i, length;
+ var i;
+ var length;
for (i = 0, length = currentMediaSource.MediaStreams.length; i < length; i++) {
if (currentMediaSource.MediaStreams[i].Type === 'Audio') {
mediaStreams.push(currentMediaSource.MediaStreams[i]);
@@ -1316,7 +1311,8 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
var currentMediaSource = self.currentMediaSource(player);
var mediaStreams = [];
- var i, length;
+ var i;
+ var length;
for (i = 0, length = currentMediaSource.MediaStreams.length; i < length; i++) {
if (currentMediaSource.MediaStreams[i].Type === 'Subtitle') {
mediaStreams.push(currentMediaSource.MediaStreams[i]);
@@ -1360,7 +1356,8 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
function isAudioStreamSupported(mediaSource, index, deviceProfile) {
var mediaStream;
- var i, length;
+ var i;
+ var length;
var mediaStreams = mediaSource.MediaStreams;
for (i = 0, length = mediaStreams.length; i < length; i++) {
@@ -1423,8 +1420,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
if (isAudioStreamSupported(self.currentMediaSource(player), index, profile)) {
player.setAudioStreamIndex(index);
getPlayerData(player).audioStreamIndex = index;
- }
- else {
+ } else {
changeStream(player, getCurrentTicks(player), { AudioStreamIndex: index });
getPlayerData(player).audioStreamIndex = index;
}
@@ -1595,8 +1591,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
// Need to change the transcoded stream to remove subs
changeStream(player, getCurrentTicks(player), { SubtitleStreamIndex: -1 });
}
- }
- else if (!currentStream && newStream) {
+ } else if (!currentStream && newStream) {
if (getDeliveryMethod(newStream) === 'External') {
selectedTrackElementIndex = index;
@@ -1607,8 +1602,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
// Need to change the transcoded stream to add subs
changeStream(player, getCurrentTicks(player), { SubtitleStreamIndex: index });
}
- }
- else if (currentStream && newStream) {
+ } else if (currentStream && newStream) {
// Switching tracks
// We can handle this clientside if the new track is external or the new track is embedded and we're not transcoding
@@ -1645,7 +1639,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
player = player || self._currentPlayer;
if (player.disableShowingSubtitleOffset) {
player.disableShowingSubtitleOffset();
- }
+ }
}
self.isShowingSubtitleOffsetEnabled = function(player) {
@@ -1674,7 +1668,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
self.canHandleOffsetOnCurrentSubtitle = function(player) {
var index = self.getSubtitleStreamIndex(player);
- return index !== -1 && self.isSubtitleStreamExternal(index, player);
+ return index !== -1 && self.isSubtitleStreamExternal(index, player);
}
self.seek = function (ticks, player) {
@@ -1865,17 +1859,15 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
if (firstItem.Type === "Program") {
promise = getItemsForPlayback(serverId, {
- Ids: firstItem.ChannelId,
+ Ids: firstItem.ChannelId
});
- }
- else if (firstItem.Type === "Playlist") {
+ } else if (firstItem.Type === "Playlist") {
promise = getItemsForPlayback(serverId, {
ParentId: firstItem.Id,
SortBy: options.shuffle ? 'Random' : null
});
- }
- else if (firstItem.Type === "MusicArtist") {
+ } else if (firstItem.Type === "MusicArtist") {
promise = getItemsForPlayback(serverId, {
ArtistIds: firstItem.Id,
@@ -1885,8 +1877,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
MediaTypes: "Audio"
});
- }
- else if (firstItem.MediaType === "Photo") {
+ } else if (firstItem.MediaType === "Photo") {
promise = getItemsForPlayback(serverId, {
ParentId: firstItem.ParentId,
@@ -1915,8 +1906,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
return Promise.resolve(result);
});
- }
- else if (firstItem.Type === "PhotoAlbum") {
+ } else if (firstItem.Type === "PhotoAlbum") {
promise = getItemsForPlayback(serverId, {
ParentId: firstItem.Id,
@@ -1928,8 +1918,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
Limit: 1000
});
- }
- else if (firstItem.Type === "MusicGenre") {
+ } else if (firstItem.Type === "MusicGenre") {
promise = getItemsForPlayback(serverId, {
GenreIds: firstItem.Id,
@@ -1938,8 +1927,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
SortBy: options.shuffle ? 'Random' : 'SortName',
MediaTypes: "Audio"
});
- }
- else if (firstItem.IsFolder) {
+ } else if (firstItem.IsFolder) {
promise = getItemsForPlayback(serverId, mergePlaybackQueries({
@@ -1951,8 +1939,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
MediaTypes: "Audio,Video"
}, queryOptions));
- }
- else if (firstItem.Type === "Episode" && items.length === 1 && getPlayer(firstItem, options).supportsProgress !== false) {
+ } else if (firstItem.Type === "Episode" && items.length === 1 && getPlayer(firstItem, options).supportsProgress !== false) {
promise = new Promise(function (resolve, reject) {
var apiClient = connectionManager.getApiClient(firstItem.ServerId);
@@ -2537,16 +2524,12 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
playMethod = 'DirectPlay';
- }
-
- else if (mediaSource.StreamUrl) {
+ } else if (mediaSource.StreamUrl) {
// Only used for audio
playMethod = 'Transcode';
mediaUrl = mediaSource.StreamUrl;
- }
-
- else if (mediaSource.SupportsDirectStream) {
+ } else if (mediaSource.SupportsDirectStream) {
directOptions = {
Static: true,
@@ -2706,9 +2689,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
return p.canPlayItem(item, playOptions);
}
return true;
- }
-
- else if (item.Url && p.canPlayUrl) {
+ } else if (item.Url && p.canPlayUrl) {
return p.canPlayUrl(item.Url);
}
}
@@ -3222,8 +3203,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla
if (displayErrorCode && typeof (displayErrorCode) === 'string') {
showPlaybackInfoErrorMessage(self, displayErrorCode, nextItem);
- }
- else if (nextItem) {
+ } else if (nextItem) {
self.nextTrack();
}
}
diff --git a/src/components/playback/playbackorientation.js b/src/components/playback/playbackorientation.js
index 731d9c3c42..3253d8acdf 100644
--- a/src/components/playback/playbackorientation.js
+++ b/src/components/playback/playbackorientation.js
@@ -29,8 +29,7 @@ define(['playbackManager', 'layoutManager', 'events'], function (playbackManager
// returns a boolean
orientationLocked = promise;
}
- }
- catch (err) {
+ } catch (err) {
onOrientationChangeError(err);
}
}
@@ -46,8 +45,7 @@ define(['playbackManager', 'layoutManager', 'events'], function (playbackManager
if (unlockOrientation) {
try {
unlockOrientation();
- }
- catch (err) {
+ } catch (err) {
console.log('error unlocking orientation: ' + err);
}
orientationLocked = false;
diff --git a/src/components/playback/playerSelectionMenu.js b/src/components/playback/playerSelectionMenu.js
index 2102720e9a..97e6e46230 100644
--- a/src/components/playback/playerSelectionMenu.js
+++ b/src/components/playback/playerSelectionMenu.js
@@ -63,17 +63,17 @@ define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'appRo
switch (deviceType) {
case 'smartphone':
- return '';
+ return 'smartphone';
case 'tablet':
- return '';
+ return 'tablet';
case 'tv':
- return '';
+ return 'tv';
case 'cast':
- return '';
+ return 'cast';
case 'desktop':
- return '';
+ return 'computer';
default:
- return '';
+ return 'tv';
}
}
@@ -153,7 +153,6 @@ define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'appRo
});
}
-
function disconnectFromPlayer(currentDeviceName) {
if (playbackManager.getSupportedCommands().indexOf('EndSession') !== -1) {
@@ -193,7 +192,6 @@ define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'appRo
});
-
} else {
playbackManager.setDefaultPlayerActive();
@@ -275,8 +273,7 @@ define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'appRo
dialogHelper.open(dlg).then(function () {
if (destination === 'nowplaying') {
appRouter.showNowPlaying();
- }
- else if (destination === 'disconnectFromPlayer') {
+ } else if (destination === 'disconnectFromPlayer') {
disconnectFromPlayer(currentDeviceName);
}
}, emptyCallback);
@@ -320,4 +317,4 @@ define(['appSettings', 'events', 'browser', 'loading', 'playbackManager', 'appRo
return {
show: showPlayerSelection
};
-});
\ No newline at end of file
+});
diff --git a/src/components/playback/playmethodhelper.js b/src/components/playback/playmethodhelper.js
index 58458aa399..4e85f87093 100644
--- a/src/components/playback/playmethodhelper.js
+++ b/src/components/playback/playmethodhelper.js
@@ -9,14 +9,11 @@ define([], function () {
if (session.TranscodingInfo && session.TranscodingInfo.IsVideoDirect) {
return 'DirectStream';
- }
- else if (session.PlayState.PlayMethod === 'Transcode') {
+ } else if (session.PlayState.PlayMethod === 'Transcode') {
return 'Transcode';
- }
- else if (session.PlayState.PlayMethod === 'DirectStream') {
+ } else if (session.PlayState.PlayMethod === 'DirectStream') {
return 'DirectPlay';
- }
- else if (session.PlayState.PlayMethod === 'DirectPlay') {
+ } else if (session.PlayState.PlayMethod === 'DirectPlay') {
return 'DirectPlay';
}
}
diff --git a/src/components/playback/playqueuemanager.js b/src/components/playback/playqueuemanager.js
index 2cbaf1d9f4..ed2076a814 100644
--- a/src/components/playback/playqueuemanager.js
+++ b/src/components/playback/playqueuemanager.js
@@ -58,15 +58,15 @@ define([], function () {
function arrayInsertAt(destArray, pos, arrayToInsert) {
var args = [];
- args.push(pos); // where to insert
- args.push(0); // nothing to remove
- args = args.concat(arrayToInsert); // add on array to insert
- destArray.splice.apply(destArray, args); // splice it in
+ args.push(pos); // where to insert
+ args.push(0); // nothing to remove
+ args = args.concat(arrayToInsert); // add on array to insert
+ destArray.splice.apply(destArray, args); // splice it in
}
PlayQueueManager.prototype.queueNext = function (items) {
-
- var i, length;
+ var i;
+ var length;
for (i = 0, length = items.length; i < length; i++) {
diff --git a/src/components/playback/volumeosd.js b/src/components/playback/volumeosd.js
index c7a3438d54..b622cc18b1 100644
--- a/src/components/playback/volumeosd.js
+++ b/src/components/playback/volumeosd.js
@@ -11,7 +11,7 @@ define(['events', 'playbackManager', 'dom', 'browser', 'css!./iconosd', 'materia
function getOsdElementHtml() {
var html = '';
- html += '';
+ html += 'volume_up';
html += '
';
@@ -101,7 +101,7 @@ define(['events', 'playbackManager', 'dom', 'browser', 'css!./iconosd', 'materia
function updatePlayerVolumeState(isMuted, volume) {
if (iconElement) {
- iconElement.innerHTML = isMuted ? '' : '';
+ iconElement.innerHTML = isMuted ? 'volume_off' : 'volume_up';
}
if (progressElement) {
progressElement.style.width = (volume || 0) + '%';
@@ -155,4 +155,4 @@ define(['events', 'playbackManager', 'dom', 'browser', 'css!./iconosd', 'materia
bindToPlayer(playbackManager.getCurrentPlayer());
-});
\ No newline at end of file
+});
diff --git a/src/components/playerstats/playerstats.js b/src/components/playerstats/playerstats.js
index 5e097f2fe2..4179192dd2 100644
--- a/src/components/playerstats/playerstats.js
+++ b/src/components/playerstats/playerstats.js
@@ -364,8 +364,7 @@ define(['events', 'globalize', 'playbackManager', 'connectionManager', 'playMeth
var category = playerStats[i];
if (category.type === 'audio') {
category.name = 'Audio Info';
- }
- else if (category.type === 'video') {
+ } else if (category.type === 'video') {
category.name = 'Video Info';
}
categories.push(category);
diff --git a/src/components/playlisteditor/playlisteditor.js b/src/components/playlisteditor/playlisteditor.js
index 0379e56347..4738211a5e 100644
--- a/src/components/playlisteditor/playlisteditor.js
+++ b/src/components/playlisteditor/playlisteditor.js
@@ -258,7 +258,7 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
var title = globalize.translate('HeaderAddToPlaylist');
html += '
';
- html += '';
+ html += 'arrow_back';
html += '
';
html += title;
html += '
';
@@ -295,4 +295,4 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'playbackManager',
};
return PlaylistEditor;
-});
\ No newline at end of file
+});
diff --git a/src/components/prompt/prompt.template.html b/src/components/prompt/prompt.template.html
index 200c98b116..b1e7f580f0 100644
--- a/src/components/prompt/prompt.template.html
+++ b/src/components/prompt/prompt.template.html
@@ -1,6 +1,6 @@
-
+ arrow_back
@@ -22,4 +22,4 @@
-
\ No newline at end of file
+
diff --git a/src/components/recordingcreator/recordingbutton.js b/src/components/recordingcreator/recordingbutton.js
index 0a76d3914c..a32803e107 100644
--- a/src/components/recordingcreator/recordingbutton.js
+++ b/src/components/recordingcreator/recordingbutton.js
@@ -30,7 +30,7 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
this.refresh(options.itemId, options.serverId);
}
var button = options.button;
- button.querySelector('i').innerHTML = '';
+ button.querySelector('i').innerHTML = 'fiber_manual_record';
var clickFn = onRecordingButtonClick.bind(this);
this.clickFn = clickFn;
@@ -45,28 +45,25 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
var status;
if (item.Type === 'SeriesTimer') {
- return '';
- }
- else if (item.TimerId || item.SeriesTimerId) {
+ return 'fiber_smart_record';
+ } else if (item.TimerId || item.SeriesTimerId) {
status = item.Status || 'Cancelled';
- }
- else if (item.Type === 'Timer') {
+ } else if (item.Type === 'Timer') {
status = item.Status;
- }
- else {
- return '';
+ } else {
+ return 'fiber_manual_record';
}
if (item.SeriesTimerId) {
if (status !== 'Cancelled') {
- return '';
+ return 'fiber_smart_record';
}
}
- return '';
+ return 'fiber_manual_record';
}
RecordingButton.prototype.refresh = function (serverId, itemId) {
@@ -113,4 +110,4 @@ define(['globalize', 'connectionManager', 'require', 'loading', 'apphost', 'dom'
};
return RecordingButton;
-});
\ No newline at end of file
+});
diff --git a/src/components/recordingcreator/recordingcreator.js b/src/components/recordingcreator/recordingcreator.js
index b3d16a0dab..614d483b21 100644
--- a/src/components/recordingcreator/recordingcreator.js
+++ b/src/components/recordingcreator/recordingcreator.js
@@ -40,8 +40,7 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
maxHeight: imageHeight,
tag: item.ImageTags.Primary
});
- }
- else if (imageTags.Thumb) {
+ } else if (imageTags.Thumb) {
return apiClient.getScaledImageUrl(item.Id, {
type: "Thumb",
diff --git a/src/components/recordingcreator/recordingcreator.template.html b/src/components/recordingcreator/recordingcreator.template.html
index 386aa149cc..2a2840aecc 100644
--- a/src/components/recordingcreator/recordingcreator.template.html
+++ b/src/components/recordingcreator/recordingcreator.template.html
@@ -1,5 +1,5 @@
-
+ arrow_back
@@ -28,4 +28,4 @@
-
\ No newline at end of file
+
diff --git a/src/components/recordingcreator/recordingeditor.js b/src/components/recordingcreator/recordingeditor.js
index 69b8b1023b..3a1d4ba943 100644
--- a/src/components/recordingcreator/recordingeditor.js
+++ b/src/components/recordingcreator/recordingeditor.js
@@ -95,7 +95,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
currentResolve = resolve;
require(['text!./recordingeditor.template.html'], function (template) {
-
var dialogOptions = {
removeOnClose: true,
scrollY: false
@@ -103,7 +102,6 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
if (layoutManager.tv) {
dialogOptions.size = 'fullscreen';
- } else {
}
var dlg = dialogHelper.createDialog(dialogOptions);
diff --git a/src/components/recordingcreator/recordingeditor.template.html b/src/components/recordingcreator/recordingeditor.template.html
index e36dda3f57..6b853704f3 100644
--- a/src/components/recordingcreator/recordingeditor.template.html
+++ b/src/components/recordingcreator/recordingeditor.template.html
@@ -1,5 +1,5 @@
-
+ arrow_back
${HeaderRecordingOptions}
@@ -43,4 +43,4 @@
-
\ No newline at end of file
+
diff --git a/src/components/recordingcreator/recordingfields.template.html b/src/components/recordingcreator/recordingfields.template.html
index 76ea5cee25..622b0d62e7 100644
--- a/src/components/recordingcreator/recordingfields.template.html
+++ b/src/components/recordingcreator/recordingfields.template.html
@@ -2,7 +2,7 @@
-
+ fiber_smart_record${RecordSeries}
@@ -14,7 +14,7 @@
-
+ fiber_manual_record${Record}
@@ -22,4 +22,4 @@
${Settings}
-
\ No newline at end of file
+
diff --git a/src/components/recordingcreator/recordinghelper.js b/src/components/recordingcreator/recordinghelper.js
index 8c56b578c9..4bfd316c73 100644
--- a/src/components/recordingcreator/recordinghelper.js
+++ b/src/components/recordingcreator/recordinghelper.js
@@ -166,8 +166,7 @@ define(['globalize', 'loading', 'connectionManager'], function (globalize, loadi
loading.show();
cancelTimer(apiClient, timerId, true).then(resolve, reject);
- }
- else if (result === 'cancelseriestimer') {
+ } else if (result === 'cancelseriestimer') {
loading.show();
diff --git a/src/components/recordingcreator/seriesrecordingeditor.js b/src/components/recordingcreator/seriesrecordingeditor.js
index 9878081e67..73a98cf5e7 100644
--- a/src/components/recordingcreator/seriesrecordingeditor.js
+++ b/src/components/recordingcreator/seriesrecordingeditor.js
@@ -139,7 +139,7 @@ define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'c
context.querySelector('.selectKeepUpTo').innerHTML = html;
}
-
+
function onFieldChange(e) {
this.querySelector('.btnSubmit').click();
}
diff --git a/src/components/recordingcreator/seriesrecordingeditor.template.html b/src/components/recordingcreator/seriesrecordingeditor.template.html
index 54133ebbbb..c2e8ebd0ed 100644
--- a/src/components/recordingcreator/seriesrecordingeditor.template.html
+++ b/src/components/recordingcreator/seriesrecordingeditor.template.html
@@ -1,5 +1,5 @@
-
+ arrow_back
${HeaderSeriesOptions}
@@ -75,4 +75,4 @@
-
\ No newline at end of file
+
diff --git a/src/components/refreshdialog/refreshdialog.js b/src/components/refreshdialog/refreshdialog.js
index 6650170960..30074b4d0b 100644
--- a/src/components/refreshdialog/refreshdialog.js
+++ b/src/components/refreshdialog/refreshdialog.js
@@ -123,7 +123,7 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionManager'
var title = globalize.translate('RefreshMetadata');
html += '
';
- html += '';
+ html += 'arrow_back';
html += '
';
html += title;
html += '
';
@@ -172,4 +172,4 @@ define(['shell', 'dialogHelper', 'loading', 'layoutManager', 'connectionManager'
};
return RefreshDialog;
-});
\ No newline at end of file
+});
diff --git a/src/components/remotecontrol/remotecontrol.js b/src/components/remotecontrol/remotecontrol.js
index e586a1e124..59bb2c5cc4 100644
--- a/src/components/remotecontrol/remotecontrol.js
+++ b/src/components/remotecontrol/remotecontrol.js
@@ -135,7 +135,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
apiClient.getItem(apiClient.getCurrentUserId(), item.Id).then(function (fullItem) {
var userData = fullItem.UserData || {};
var likes = null == userData.Likes ? "" : userData.Likes;
- context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = '';
+ context.querySelector(".nowPlayingPageUserDataButtons").innerHTML = 'favorite';
});
} else {
backdrop.clear();
@@ -179,15 +179,15 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
if (player) {
switch (playbackManager.getRepeatMode(player)) {
case "RepeatNone":
- playbackManager.setRepeatMode("RepeatAll", player);
- break;
+ playbackManager.setRepeatMode("RepeatAll", player);
+ break;
case "RepeatAll":
- playbackManager.setRepeatMode("RepeatOne", player);
- break;
+ playbackManager.setRepeatMode("RepeatOne", player);
+ break;
case "RepeatOne":
- playbackManager.setRepeatMode("RepeatNone", player);
+ playbackManager.setRepeatMode("RepeatNone", player);
}
}
}
@@ -291,10 +291,10 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
if (isMuted) {
view.querySelector(".buttonMute").setAttribute("title", globalize.translate("Unmute"));
- view.querySelector(".buttonMute i").innerHTML = "";
+ view.querySelector(".buttonMute i").innerHTML = "volume_off";
} else {
view.querySelector(".buttonMute").setAttribute("title", globalize.translate("Mute"));
- view.querySelector(".buttonMute i").innerHTML = "";
+ view.querySelector(".buttonMute i").innerHTML = "volume_up";
}
if (progressElement) {
@@ -361,7 +361,7 @@ define(["browser", "datetime", "backdrop", "libraryBrowser", "listView", "imageL
action: "setplaylistindex",
enableUserDataButtons: false,
rightButtons: [{
- icon: "",
+ icon: "remove_circle_outline",
title: globalize.translate("ButtonRemove"),
id: "remove"
}],
diff --git a/src/components/sanitizefilename.js b/src/components/sanitizefilename.js
index 843ab31f04..d422a95533 100644
--- a/src/components/sanitizefilename.js
+++ b/src/components/sanitizefilename.js
@@ -34,18 +34,14 @@ define([], function () {
// when parsing previous hi-surrogate, 3 is added to byteLength
if (prevCodePoint != null && isHighSurrogate(prevCodePoint)) {
byteLength += 1;
- }
- else {
+ } else {
byteLength += 3;
}
- }
- else if (codePoint <= 0x7f) {
+ } else if (codePoint <= 0x7f) {
byteLength += 1;
- }
- else if (codePoint >= 0x80 && codePoint <= 0x7ff) {
+ } else if (codePoint >= 0x80 && codePoint <= 0x7ff) {
byteLength += 2;
- }
- else if (codePoint >= 0x800 && codePoint <= 0xffff) {
+ } else if (codePoint >= 0x800 && codePoint <= 0xffff) {
byteLength += 3;
}
prevCodePoint = codePoint;
@@ -77,8 +73,7 @@ define([], function () {
if (curByteLength === byteLength) {
return string.slice(0, i + 1);
- }
- else if (curByteLength > byteLength) {
+ } else if (curByteLength > byteLength) {
return string.slice(0, i - segment.length + 1);
}
}
@@ -89,11 +84,11 @@ define([], function () {
return {
sanitize: function (input, replacement) {
var sanitized = input
- .replace(illegalRe, replacement)
- .replace(controlRe, replacement)
- .replace(reservedRe, replacement)
- .replace(windowsReservedRe, replacement)
- .replace(windowsTrailingRe, replacement);
+ .replace(illegalRe, replacement)
+ .replace(controlRe, replacement)
+ .replace(reservedRe, replacement)
+ .replace(windowsReservedRe, replacement)
+ .replace(windowsTrailingRe, replacement);
return truncate(sanitized, 255);
}
};
diff --git a/src/components/scroller.js b/src/components/scroller.js
index de0ce6b932..65f33b8e8d 100644
--- a/src/components/scroller.js
+++ b/src/components/scroller.js
@@ -82,7 +82,7 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc
intervactive: null, // Selector for special interactive elements.
// Mixed options
- speed: 0, // Animations speed in milliseconds. 0 to disable animations.
+ speed: 0 // Animations speed in milliseconds. 0 to disable animations.
}, options);
@@ -93,17 +93,14 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc
// in cases with firefox, if the smooth scroll api is supported then use that because their implementation is very good
if (options.allowNativeScroll === false) {
options.enableNativeScroll = false;
- }
- else if (isSmoothScrollSupported && ((browser.firefox && !layoutManager.tv) || options.allowNativeSmoothScroll)) {
+ } else if (isSmoothScrollSupported && ((browser.firefox && !layoutManager.tv) || options.allowNativeSmoothScroll)) {
// native smooth scroll
options.enableNativeScroll = true;
- }
- else if (options.requireAnimation && (browser.animate || browser.supportsCssAnimation())) {
+ } else if (options.requireAnimation && (browser.animate || browser.supportsCssAnimation())) {
// transform is the only way to guarantee animation
options.enableNativeScroll = false;
- }
- else if (!layoutManager.tv || !browser.animate) {
+ } else if (!layoutManager.tv || !browser.animate) {
options.enableNativeScroll = true;
}
@@ -211,7 +208,9 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc
self.frameResizeObserver.observe(frame);
}
- self.reload = function () { load(); };
+ self.reload = function () {
+ load();
+ };
self.getScrollEventName = function () {
return transform ? 'scrollanimate' : 'scroll';
@@ -227,7 +226,6 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc
function nativeScrollTo(container, pos, immediate) {
-
if (container.scroll) {
if (o.horizontal) {
@@ -242,8 +240,7 @@ define(['browser', 'layoutManager', 'dom', 'focusManager', 'ResizeObserver', 'sc
behavior: immediate ? 'instant' : 'smooth'
});
}
- }
- else if (!immediate && container.scrollTo) {
+ } else if (!immediate && container.scrollTo) {
if (o.horizontal) {
container.scrollTo(Math.round(pos), 0);
} else {
diff --git a/src/components/search/searchfields.template.html b/src/components/search/searchfields.template.html
index cb6f11499a..bad808cb7e 100644
--- a/src/components/search/searchfields.template.html
+++ b/src/components/search/searchfields.template.html
@@ -1,7 +1,7 @@
-
\ No newline at end of file
+
diff --git a/src/livetv.html b/src/livetv.html
index 2bc99b2b80..2ff8990e4a 100644
--- a/src/livetv.html
+++ b/src/livetv.html
@@ -7,7 +7,7 @@
\ No newline at end of file
+
diff --git a/src/myprofile.html b/src/myprofile.html
index fdb071dde5..d30f905818 100644
--- a/src/myprofile.html
+++ b/src/myprofile.html
@@ -2,8 +2,8 @@
diff --git a/src/scripts/browser.js b/src/scripts/browser.js
index a50eeaa608..66c3051c8c 100644
--- a/src/scripts/browser.js
+++ b/src/scripts/browser.js
@@ -30,7 +30,6 @@ define([], function () {
}
function isMobile(userAgent) {
-
var terms = [
'mobi',
'ipad',
@@ -144,14 +143,16 @@ define([], function () {
}
}
- var animation = false,
- animationstring = 'animation',
- keyframeprefix = '',
- domPrefixes = ['Webkit', 'O', 'Moz'],
- pfx = '',
- elm = document.createElement('div');
+ var animation = false;
+ var animationstring = 'animation';
+ var keyframeprefix = '';
+ var domPrefixes = ['Webkit', 'O', 'Moz'];
+ var pfx = '';
+ var elm = document.createElement('div');
- if (elm.style.animationName !== undefined) { animation = true; }
+ if (elm.style.animationName !== undefined) {
+ animation = true;
+ }
if (animation === false && allowPrefix) {
for (var i = 0; i < domPrefixes.length; i++) {
@@ -204,8 +205,7 @@ define([], function () {
// 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) {
+ } 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";
}
}
diff --git a/src/scripts/browserdeviceprofile.js b/src/scripts/browserdeviceprofile.js
index ad5237fde8..bc7c26769e 100644
--- a/src/scripts/browserdeviceprofile.js
+++ b/src/scripts/browserdeviceprofile.js
@@ -88,18 +88,14 @@ define(['browser'], function (browser) {
if (browser.edgeUwp) {
return true;
}
- }
-
- else if (format === 'wma') {
+ } else if (format === 'wma') {
if (browser.tizen || browser.orsay) {
return true;
}
if (browser.edgeUwp) {
return true;
}
- }
-
- else if (format === 'opus') {
+ } else if (format === 'opus') {
typeString = 'audio/ogg; codecs="opus"';
if (document.createElement('audio').canPlayType(typeString).replace(/no/, '')) {
@@ -107,9 +103,7 @@ define(['browser'], function (browser) {
}
return false;
- }
-
- else if (format === 'mp2') {
+ } else if (format === 'mp2') {
// For now
return false;
@@ -575,9 +569,7 @@ define(['browser'], function (browser) {
Type: 'Audio',
AudioCodec: audioFormat
});
- }
-
- else if (audioFormat === 'mp3') {
+ } else if (audioFormat === 'mp3') {
profile.DirectPlayProfiles.push({
Container: audioFormat,
diff --git a/src/scripts/editorsidebar.js b/src/scripts/editorsidebar.js
index bb35d8f60f..bcb3883755 100644
--- a/src/scripts/editorsidebar.js
+++ b/src/scripts/editorsidebar.js
@@ -2,19 +2,19 @@ define(["datetime", "jQuery", "material-icons"], function (datetime, $) {
"use strict";
function getNode(item, folderState, selected) {
- var htmlName = getNodeInnerHtml(item),
- node = {
- id: item.Id,
- text: htmlName,
- state: {
- opened: item.IsFolder && folderState == "open",
- selected: selected
- },
- li_attr: {
- serveritemtype: item.Type,
- collectiontype: item.CollectionType
- }
- };
+ var htmlName = getNodeInnerHtml(item);
+ var node = {
+ id: item.Id,
+ text: htmlName,
+ state: {
+ opened: item.IsFolder && folderState == "open",
+ selected: selected
+ },
+ li_attr: {
+ serveritemtype: item.Type,
+ collectiontype: item.CollectionType
+ }
+ };
if (item.IsFolder) {
node.children = [{
text: "Loading...",
@@ -44,20 +44,15 @@ define(["datetime", "jQuery", "material-icons"], function (datetime, $) {
var htmlName = "
";
if (item.IsFolder) {
htmlName += 'folder';
- }
- else if (item.MediaType === "Video") {
+ } else if (item.MediaType === "Video") {
htmlName += 'movie';
- }
- else if (item.MediaType === "Audio") {
+ } else if (item.MediaType === "Audio") {
htmlName += 'audiotrack';
- }
- else if (item.Type === "TvChannel") {
+ } else if (item.Type === "TvChannel") {
htmlName += 'live_tv';
- }
- else if (item.MediaType === "Photo") {
+ } else if (item.MediaType === "Photo") {
htmlName += 'photo';
- }
- else if (item.MediaType === "Book") {
+ } else if (item.MediaType === "Book") {
htmlName += 'book';
}
if (item.LockData) {
diff --git a/src/scripts/librarybrowser.js b/src/scripts/librarybrowser.js
index 4f3eaf4144..b9f3b92471 100644
--- a/src/scripts/librarybrowser.js
+++ b/src/scripts/librarybrowser.js
@@ -91,20 +91,20 @@ define(["userSettings"], function (userSettings) {
html += '
';
if (showControls) {
- html += '';
- html += '= totalRecordCount ? "disabled" : "") + '>';
+ html += 'arrow_back';
+ html += '= totalRecordCount ? "disabled" : "") + '>arrow_forward';
}
if (options.addLayoutButton) {
- html += '';
+ html += 'view_comfy';
}
if (options.sortButton) {
- html += '';
+ html += 'sort_by_alpha';
}
if (options.filterButton) {
- html += '';
+ html += 'filter_list';
}
html += "
";
@@ -156,7 +156,8 @@ define(["userSettings"], function (userSettings) {
html += '
';
html += Globalize.translate("HeaderSortBy");
html += "
";
- var i, length;
+ var i;
+ var length;
var isChecked;
html += '
';
- html += '' + (browser.safari ? "chevron_left" : "") + "";
- html += '';
- html += '';
+ html += '' + (browser.safari ? "chevron_left" : "arrow_back") + "";
+ html += 'home';
+ html += 'menu';
html += '';
html += "
";
html += '
';
html += '';
- html += '';
- html += '';
- html += '';
+ html += 'cast';
+ html += 'search';
+ html += 'person';
html += "
";
html += "
";
html += '
';
diff --git a/src/scripts/routes.js b/src/scripts/routes.js
index 680a99a80b..a72e7e0566 100644
--- a/src/scripts/routes.js
+++ b/src/scripts/routes.js
@@ -447,6 +447,6 @@ define([
defineRoute({
path: "/",
isDefaultRoute: true,
- autoFocus: false,
+ autoFocus: false
});
});
diff --git a/src/scripts/site.js b/src/scripts/site.js
index d0dd0eaae3..828b882e7e 100644
--- a/src/scripts/site.js
+++ b/src/scripts/site.js
@@ -478,6 +478,9 @@ var AppInfo = {};
keyboardnavigation.enable();
});
require(["focusPreventScroll"]);
+ require(["autoFocuser"], function(autoFocuser) {
+ autoFocuser.enable();
+ });
});
});
}
@@ -866,6 +869,7 @@ var AppInfo = {};
define("skinManager", [componentsPath + "/skinManager"], returnFirstDependency);
define("keyboardnavigation", [componentsPath + "/keyboardnavigation"], returnFirstDependency);
define("scrollManager", [componentsPath + "/scrollManager"], returnFirstDependency);
+ define("autoFocuser", [componentsPath + "/autoFocuser"], returnFirstDependency);
define("connectionManager", [], function () {
return ConnectionManager;
});
diff --git a/src/strings/bg-bg.json b/src/strings/bg-bg.json
index ce12e70563..c7ce361903 100644
--- a/src/strings/bg-bg.json
+++ b/src/strings/bg-bg.json
@@ -59,7 +59,7 @@
"ButtonPlay": "Пускане",
"ButtonPreviousTrack": "Предишна пътека",
"ButtonProfile": "Профил",
- "ButtonQuickStartGuide": "Ръководство за бързо започване",
+ "ButtonQuickStartGuide": "Първи стъпки",
"ButtonRefresh": "Опресняване",
"ButtonRefreshGuideData": "Обновяване на данните в справочника",
"ButtonRemove": "Премахване",
@@ -78,7 +78,7 @@
"ButtonSignIn": "Вписване",
"ButtonSignOut": "Отписване",
"ButtonSort": "Подреждане",
- "ButtonStop": "Стоп",
+ "ButtonStop": "Спиране",
"ButtonSubmit": "Подаване",
"ButtonSubtitles": "Субтитри",
"ButtonUninstall": "Деинсталиране",
@@ -108,13 +108,13 @@
"Display": "Показване",
"Download": "Изтегляне",
"DownloadsValue": "{0} изтегляния",
- "EasyPasswordHelp": "Вашият лесен пин код е използван за офлайн достъп със съвместими Jellyfin приложения, както и за влизане през същата мрежа.",
+ "EasyPasswordHelp": "Вашият лесен пин-код се използва за достъп извън линия със съвместими приложения, както и за влизане през същата мрежа.",
"Edit": "Редактиране",
"EditImages": "Редактиране на изображенията",
"EditMetadata": "Редактиране на метаданните",
"EditSubtitles": "Редактиране на субтитрите",
"EnableBackdrops": "Фонове",
- "EnableCinemaMode": "Включване на режим \"Киносалон\"",
+ "EnableCinemaMode": "Режим \"Киносалон\"",
"EnableThemeSongs": "Тематични песни",
"Ended": "Приключило",
"EndsAtValue": "Свършва на {0}",
@@ -209,7 +209,7 @@
"HeaderLiveTv": "Телевизия на живо",
"HeaderMedia": "Медия",
"HeaderMediaFolders": "Медийни папки",
- "HeaderMediaInfo": "Данни",
+ "HeaderMediaInfo": "Сведения",
"HeaderMetadataSettings": "Настройки на метаданните",
"HeaderMoreLikeThis": "Подобни",
"HeaderMovies": "Филми",
@@ -248,7 +248,7 @@
"HeaderSecondsValue": "{0} секунди",
"HeaderSelectPath": "Изберете път",
"HeaderSendMessage": "Изпращане на съобщение",
- "HeaderSeries": "Series:",
+ "HeaderSeries": "Сериал",
"HeaderServerSettings": "Настройки на сървъра",
"HeaderSettings": "Настройки",
"HeaderSetupLibrary": "Настройте своите медийни библиотеки",
@@ -256,7 +256,7 @@
"HeaderSortOrder": "Ред на подреждане",
"HeaderSpecialFeatures": "Специални функции",
"HeaderStartNow": "Пускане веднага",
- "HeaderStatus": "Състояние:",
+ "HeaderStatus": "Състояние",
"HeaderSubtitleAppearance": "Облик на субтитрите",
"HeaderSystemDlnaProfiles": "Системни профили",
"HeaderTags": "Етикети",
@@ -289,7 +289,7 @@
"LabelAlbumArtPN": "ПН на албумното изкуство:",
"LabelAlbumArtists": "Изпълнители на албума:",
"LabelAllowServerAutoRestart": "Разрешаване на сървъра автоматично да се пуска повторно за прилагане на обновления",
- "LabelAllowServerAutoRestartHelp": "Сървърът ще се рестартира само през свободното си време, когато няма активни потребители.",
+ "LabelAllowServerAutoRestartHelp": "Сървърът ще се пуска наново само през ненатоварено време, когато няма активни потребители.",
"LabelAppName": "Име",
"LabelArtists": "Изпълнители:",
"LabelArtistsHelp": "Отделете няколко с ;",
@@ -299,7 +299,7 @@
"LabelCertificatePassword": "Парола на сертификата:",
"LabelCertificatePasswordHelp": "Ако сертификатът ви изисква парола, моля, въведете я тук.",
"LabelCollection": "Колекция:",
- "LabelCommunityRating": "Обществена оценка",
+ "LabelCommunityRating": "Обществена оценка:",
"LabelContentType": "Тип на съдържанието:",
"LabelCountry": "Държава:",
"LabelCriticRating": "Оценка на критиците:",
@@ -333,7 +333,7 @@
"LabelEnableDlnaClientDiscoveryIntervalHelp": "Определя времетраенето в секунди между SSDP търсения направени от Jellyfin.",
"LabelEnableDlnaDebugLogging": "Включване на журналите за грешки на ДЛНА",
"LabelEnableDlnaPlayTo": "Включване на функцията \"възпроизвеждане с ДЛНА\"",
- "LabelEnableDlnaPlayToHelp": "Емби може да засича устройства в мрежата ви и да предлага възможност за дистанционен контрол.",
+ "LabelEnableDlnaPlayToHelp": "Засичане на устройства в мрежата ви и предлагане на възможност за дистанционно управление.",
"LabelEnableDlnaServer": "Включване на ДЛНА-сървър",
"LabelEnableDlnaServerHelp": "Разрешава на UPnP устройства в мрежата да разглеждат и пускат Jellyfin съдържание.",
"LabelEnableRealtimeMonitor": "Активиране на наблюдение в реално време",
@@ -414,7 +414,7 @@
"LabelPublicHttpPortHelp": "Публичният порт, който да бъде съпоставен с локалния HTTP порт.",
"LabelPublicHttpsPort": "Публичен HTTPS порт:",
"LabelPublicHttpsPortHelp": "Публичният порт, който да бъде съпоставен с локалния HTTPS порт.",
- "LabelReadHowYouCanContribute": "Научете как можете да допринесете",
+ "LabelReadHowYouCanContribute": "Научете как можете да допринесете.",
"LabelRecordingPath": "Път за запис по подразбиране:",
"LabelReleaseDate": "Дата на издаване:",
"LabelRemoteClientBitrateLimit": "Ограничение на интернетното излъчване (мбит/сек):",
@@ -428,7 +428,7 @@
"LabelSkipIfAudioTrackPresent": "Да се пропусне, ако звуковата пътечка по подразбиране съвпада с езика",
"LabelSkipIfGraphicalSubsPresent": "Да се пропусне, ако файлът съдържа вградени субтитри",
"LabelSortBy": "Подреждане по:",
- "LabelSortOrder": "Ред на подреждане",
+ "LabelSortOrder": "Ред на подреждане:",
"LabelSource": "Източник:",
"LabelSpecialSeasonsDisplayName": "Име на сезона със специални епизоди:",
"LabelStartWhenPossible": "Започвай, когато е възможно:",
@@ -460,7 +460,7 @@
"LabelYoureDone": "Готови сте!",
"Large": "Голям",
"LatestFromLibrary": "Последни {0}",
- "LibraryAccessHelp": "Изберете медийните папки, които да споделите с потребителя. Администраторите ще могат да редактират всички папки, използвайки управлението на метаданни.",
+ "LibraryAccessHelp": "Изберете библиотеките, които да споделите с потребителя. Администраторите ще могат да редактират всички папки, използвайки управлението на метаданни.",
"Like": "Харесване",
"LinksValue": "Препратки: {0}",
"List": "Списък",
@@ -487,7 +487,7 @@
"MessageAlreadyInstalled": "Версията вече е инсталирана.",
"MessageAreYouSureYouWishToRemoveMediaFolder": "Сигурни ли сте, че искате да премахнете медийната папка?",
"MessageConfirmRestart": "Наистина ли искате да пуснете сървъра наново?",
- "MessageConfirmShutdown": "Наистина ли искате да спрете Jellyfin сървърът?",
+ "MessageConfirmShutdown": "Наистина ли искате да загасите сървъра?",
"MessageNoAvailablePlugins": "Няма налични приставки.",
"MessageNoPluginsInstalled": "Нямате инсталирани приставки.",
"MessageNothingHere": "Тук няма нищо.",
@@ -501,7 +501,7 @@
"Mobile": "Мобилно устройство",
"Monday": "Понеделник",
"MoreFromValue": "Още от {0}",
- "MoreUsersCanBeAddedLater": "Повече потребители могат да бъдат добавени по-късно от главния панел.",
+ "MoreUsersCanBeAddedLater": "Можете да добавите още потребители от таблото.",
"Movies": "Филми",
"Mute": "Заглушаване",
"MySubtitles": "Моите субтитри",
@@ -578,7 +578,7 @@
"OptionHasTrailer": "Трейлър",
"OptionHideUser": "Скриване на потребителя от страниците за вход",
"OptionHideUserFromLoginHelp": "Полезно за частни или скрити администраторски профили. Потребителят ще трябва да влезе ръчно чрез въвеждане на потребителско име и парола.",
- "OptionHomeVideos": "Домашни клипове и снимки",
+ "OptionHomeVideos": "Снимки",
"OptionImdbRating": "Оценка в IMDb",
"OptionIsHD": "ВК",
"OptionIsSD": "СК",
@@ -608,7 +608,7 @@
"OptionSpecialEpisode": "Специални",
"OptionSunday": "Неделя",
"OptionThursday": "Четвъртък",
- "OptionTrackName": "Име на песента:",
+ "OptionTrackName": "Име на песента",
"OptionTuesday": "Вторник",
"OptionUnairedEpisode": "Неизлъчени епизоди",
"OptionUnplayed": "Непускано",
@@ -672,7 +672,7 @@
"ShowAdvancedSettings": "Разширени настройки",
"ShowTitle": "Показване на заглавието",
"ShowYear": "Показване на годината",
- "Shows": "Предавания",
+ "Shows": "Сериали",
"Shuffle": "Пускане в разбъркан ред",
"Small": "Малък",
"Smart": "Умни",
@@ -757,7 +757,7 @@
"Unmute": "Без заглушаване",
"Unplayed": "Непускано",
"Upload": "Качване",
- "UserProfilesIntro": "Емби включва вградена поддръжка на потребителски профили, които позволяват на всеки потребител да има свои настройки на картината, място на пускане и родителски настройки.",
+ "UserProfilesIntro": "Джелифин включва поддръжка на потребителски профили със самостоятелни настройки на картината, пускането и родителските настройки.",
"ValueAlbumCount": "{0} албума",
"ValueAudioCodec": "Звуков кодек: {0}",
"ValueCodec": "Кодек: {0}",
@@ -784,9 +784,9 @@
"Watched": "Изгледано",
"Wednesday": "Сряда",
"WelcomeToProject": "Добре дошли в Емби!",
- "WizardCompleted": "Това е всичко от което се нуждаем за момента. Емби започна да събира данни за медийната ви библиотека. Разгледайте някои от нашите приложения, после натиснете Готово, за да видите таблото на сървъра.",
+ "WizardCompleted": "Това е всичко, от което се нуждаем за момента. Джелифин започва да събира данни за библиотеката ви. Разгледайте някои от нашите приложения, после натиснете Готово, за да видите таблото на сървъра.",
"Writer": "Писател",
- "AllowMediaConversion": "Разрешаване на медиини преобразувания",
+ "AllowMediaConversion": "Разрешаване на медийни преобразувания",
"AllLanguages": "Всички езици",
"AllEpisodes": "Всички епизоди",
"AllComplexFormats": "Всички комплексни формати (ASS, SSA, VOBSUB, PGS, SUB/IDX, и т.н.)",
@@ -794,5 +794,44 @@
"Alerts": "Известия",
"AdditionalNotificationServices": "Разгледайте каталога с добавки за допълнителни услуги за известяване.",
"AddToPlayQueue": "Добавяне към опашка",
- "AccessRestrictedTryAgainLater": "Достъпът е временно ограничен. Моля опитайте отново по-късно."
+ "AccessRestrictedTryAgainLater": "Достъпът е временно ограничен. Моля, опитайте отново по-късно.",
+ "HeaderFavoriteSongs": "Любими песни",
+ "HeaderFavoriteShows": "Любими сериали",
+ "HeaderFavoriteEpisodes": "Любими епизоди",
+ "HeaderFavoriteArtists": "Любими изпълнители",
+ "HeaderFavoriteAlbums": "Любими албуми",
+ "Folders": "Папки",
+ "No": "Не",
+ "Yes": "Да",
+ "MediaInfoStreamTypeSubtitle": "Субтитри",
+ "MediaInfoStreamTypeEmbeddedImage": "Вградено изображение",
+ "MediaInfoStreamTypeData": "Данни",
+ "MediaInfoStreamTypeAudio": "Звук",
+ "MediaInfoContainer": "Контейнер",
+ "MediaInfoInterlaced": "Презредово",
+ "MediaInfoForced": "Принудително",
+ "MediaInfoLayout": "Подредба",
+ "MusicVideo": "Музикален клип",
+ "MediaInfoStreamTypeVideo": "Видео",
+ "LabelVideo": "Видео:",
+ "HeaderVideoTypes": "Видове видеа",
+ "HeaderVideoType": "Вид на видеото",
+ "EnableExternalVideoPlayers": "Външни възпроизводители",
+ "HeaderLoginFailure": "Неуспешно вписване",
+ "Metadata": "Метаданни",
+ "ReplaceAllMetadata": "Заменяне на всички метаданни",
+ "ReplaceExistingImages": "Заменяне на текущите изображения",
+ "Channels": "Канали",
+ "Categories": "Категории",
+ "ButtonViewWebsite": "Преглед на сайта",
+ "ButtonUp": "Нагоре",
+ "ButtonTrailer": "Предварителен откъс",
+ "ButtonStart": "Пускане",
+ "ButtonSelectView": "Изберете изглед",
+ "ButtonSelectServer": "Изберете сървър",
+ "ButtonRepeat": "Повтаряне",
+ "ButtonNetwork": "Мрежа",
+ "ButtonFullscreen": "На цял екран",
+ "ButtonDown": "Надолу",
+ "ButtonConnect": "Свързване"
}
diff --git a/src/strings/de.json b/src/strings/de.json
index 6899e251d2..54ed6af1a0 100644
--- a/src/strings/de.json
+++ b/src/strings/de.json
@@ -1,12 +1,12 @@
{
- "Absolute": "Absolut",
+ "Absolute": "Gesamt",
"AccessRestrictedTryAgainLater": "Der Zugriff ist derzeit eingeschränkt. Bitte versuche es später erneut.",
"Actor": "Darsteller(in)",
"Add": "Hinzufügen",
"AddGuideProviderHelp": "Fernsehprogrammquelle hinzufügen",
"AddItemToCollectionHelp": "Fügen Sie Elemente zu Sammlungen hinzu, indem Sie sie suchen und deren Rechtsklick- oder Antippmenü benutzen.",
"AddToCollection": "Zur Sammlung hinzufügen",
- "AddToPlayQueue": "Zur Abspielwarteschlange hinzufügen",
+ "AddToPlayQueue": "Zur Warteschlange hinzufügen",
"AddToPlaylist": "Zur Wiedergabeliste hinzufügen",
"AddUser": "Benutzer anlegen",
"AddUserByManually": "Lege einen lokalen User durch manuelle Eingabe der User-Informationen an.",
@@ -60,7 +60,7 @@
"BoxRear": "Box (Rückseite)",
"Browse": "Blättern",
"BrowsePluginCatalogMessage": "Durchsuche unsere Bibliothek, um alle verfügbaren Plugins anzuzeigen.",
- "BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel basierend auf deren Format einbrennen soll während der Videokonvertierung. Die Vermeidung des Einbrennen von Untertiteln verbessert die Serverperformance. Wähle Auto, um Bildfomate (z.B. VOBSUB, PGS, SUB/IDX, etc.) sowie bestimmte ASS/SSA-Untertitel einbrennen zu lassen.",
+ "BurnSubtitlesHelp": "Legt fest, ob der Server die Untertitel basierend auf deren Format während der Videokonvertierung einbrennen soll. Die Vermeidung des Einbrennen von Untertiteln verbessert die Serverperformance. Wähle Auto, um Bildfomate (z.B. VOBSUB, PGS, SUB/IDX, etc.) sowie bestimmte ASS/SSA-Untertitel einbrennen zu lassen.",
"ButtonAdd": "Hinzufügen",
"ButtonAddMediaLibrary": "Füge Medienbibliothek hinzu",
"ButtonAddScheduledTaskTrigger": "Auslöser hinzufügen",
@@ -171,7 +171,7 @@
"DetectingDevices": "Suche Geräte",
"DeviceAccessHelp": "Dies wird nur auf Geräte angewandt die eindeutig identifiziert werden können und verhindert nicht den Web-Zugriff. Gefilterter Zugriff auf Geräte verhindert die Nutzung neuer Geräte solange, bis der Zugriff für diese freigegeben wird.",
"DirectPlaying": "Direktes Abspielen",
- "DirectStreamHelp1": "Das Medium ist mit dem Abspielgerät kompatibel bzgl. Auflösung und Codecs (H.264, AC3, etc.), besitzt jedoch ein inkompatibles Containerformat (.mkv, .avi, .wmv, etc.). Das Video wird in Echtzeit neuverpackt bevor es zum Abspielgerät gestreamt wird.",
+ "DirectStreamHelp1": "Das Medium ist mit dem Abspielgerät kompatibel bzgl. Auflösung und Codecs (H.264, AC3, etc.), besitzt jedoch ein inkompatibles Containerformat (mkv, avi, wmv, etc.). Das Video wird in Echtzeit neuverpackt bevor es zum Abspielgerät gestreamt wird.",
"DirectStreamHelp2": "Direktes Streaming von Dateien benötigt sehr wenig Rechenleistung ohne Verlust der Videoqualität.",
"DirectStreaming": "Direktes Streaming",
"Director": "Regisseur",
@@ -185,36 +185,36 @@
"DisplayInMyMedia": "Zeige auf Homescreen",
"DisplayInOtherHomeScreenSections": "Zeige auf dem Homescreen Bereiche wie 'Neueste Medien' oder 'Weiterschauen'",
"DisplayMissingEpisodesWithinSeasons": "Zeige fehlende Episoden innerhalb von Staffeln",
- "DisplayMissingEpisodesWithinSeasonsHelp": "Dies sollte auch für Serienbibliotheken in den Jellyfin Server Einstellungen aktiviert sein.",
+ "DisplayMissingEpisodesWithinSeasonsHelp": "Dies muss auch für Serienbibliotheken in den Servereinstellungen aktiviert sein.",
"DisplayModeHelp": "Bitte wähle den Typ des Bildschirms auf dem Du Jellyfin verwendest.",
"DoNotRecord": "Nicht aufnehmen",
"Down": "Runter",
"DownloadsValue": "{0} Downloads",
"DrmChannelsNotImported": "Verschlüsselte Kanäle werden nicht importiert.",
"DropShadow": "Schlagschatten",
- "EasyPasswordHelp": "Die vereinfachte PIN Eingabe wird für offline Zugriffe von unterstützenden Jellyfin Apps verwendet. Sie kann ebenso als erleichterten Zugang aus dem eigenen Netzwerk verwendet werden.",
+ "EasyPasswordHelp": "Die vereinfachte PIN-Eingabe wird für Offline-Zugriffe über unterstützte Clients verwendet. Sie kann ebenso für ein einfaches Einloggen über das eigene Netzwerk verwendet werden.",
"Edit": "Bearbeiten",
"EditImages": "Bearbeite Bilder",
"EditMetadata": "Bearbeite Metadaten",
"EditSubtitles": "Untertitel bearbeiten",
- "EnableBackdrops": "Aktiviere Hintergründe",
- "EnableBackdropsHelp": "Wenn aktiviert, werden während des Browsens durch die Bibliothek auf einigen Seiten passende Hintergründe angezeigt.",
+ "EnableBackdrops": "Hintergründe",
+ "EnableBackdropsHelp": "Zeige während des Browsens durch die Bibliothek auf einigen Seiten passende Hintergründe an",
"EnableCinemaMode": "Kino-Modus",
- "EnableColorCodedBackgrounds": "Aktiviere farbige Hintergründe",
+ "EnableColorCodedBackgrounds": "Farbige Hintergründe",
"EnableDisplayMirroring": "Display-Spiegelung",
"EnableExternalVideoPlayers": "Externe Videoplayer",
"EnableExternalVideoPlayersHelp": "Ein Menü für externe Videoplayer wird beim Start der Videowiedergabe angezeigt.",
"EnableHardwareEncoding": "Aktiviere Hardware-Encoding",
- "EnableNextVideoInfoOverlay": "Aktiviere \"Next-Video-Info\" während der Wiedergabe",
+ "EnableNextVideoInfoOverlay": "Zeige \"Next-Video-Info\" während der Wiedergabe",
"EnableNextVideoInfoOverlayHelp": "Zeige Informationen über das nächste abzuspielende Video in der aktuellen Abspielliste am Ende des laufenden Videos an.",
- "EnablePhotos": "Aktiviere Fotos",
- "EnablePhotosHelp": "Fotos werden erkannt und neben anderen Mediendateien angezeigt.",
+ "EnablePhotos": "Zeige Fotos",
+ "EnablePhotosHelp": "Bilder werden erkannt und neben anderen Mediendateien angezeigt.",
"EnableStreamLooping": "Auto-Schleife Live Streams",
"EnableStreamLoopingHelp": "Aktivieren, wenn Live Streams nur ein paar Sekunden Daten enthalten und ständig angefragt werden müssen. Kann zu Problemen führen wenn aktiviert, obwohl nicht nötig.",
- "EnableThemeSongs": "Aktiviere Titelmelodien",
- "EnableThemeSongsHelp": "Wenn aktiviert, wird Titelmusik während des Browsens durch die Bibliothek im Hintergrund abgespielt.",
- "EnableThemeVideos": "Altiviere Titelvideos",
- "EnableThemeVideosHelp": "Wenn aktiviert, wird ein Titelvideo während dem Durchsuchen durch die Bibliothek im Hintergrund abgespielt.",
+ "EnableThemeSongs": "Titelmelodien",
+ "EnableThemeSongsHelp": "Titelmusik wird während des Blätterns durch die Bibliothek im Hintergrund abgespielt.",
+ "EnableThemeVideos": "Titelvideos",
+ "EnableThemeVideosHelp": "Titelvideos werden während des Blätterns durch die Bibliothek im Hintergrund abgespielt.",
"Ended": "Beendent",
"EndsAtValue": "Endet um {0}",
"Episodes": "Episoden",
@@ -223,7 +223,7 @@
"ErrorAddingTunerDevice": "Es trat ein Fehler beim hinzufügen eines Tuners auf. Bitte stellen Sie sicher das dieser erreichbar ist und versuchen Sie es erneut.",
"ErrorAddingXmlTvFile": "Fehler beim Zugriff auf die XmlTV Datei. Stelle bitte sicher, dass die Datei existiert und versuche es nochmal.",
"ErrorDeletingItem": "Fehler beim Löschen des Mediums vom Jellyfin Server. Bitte stelle sicher dass der Jellyfin Server Schreibzugriff auf den Dateiordner hat und versuche es erneut.",
- "ErrorGettingTvLineups": "Ein Fehler trat beim herunterladen des TV Programs auf. Bitte stellen Sie sicher, dass Ihre Informationen korrekt sind und versuchen Sie es erneut.",
+ "ErrorGettingTvLineups": "Ein Fehler trat beim Herunterladen des Fernsehprogramms auf. Bitte stellen Sie sicher, dass Ihre Informationen korrekt sind und versuchen Sie es erneut.",
"ErrorMessageStartHourGreaterThanEnd": "Die Endzeit muss größer als die Startzeit sein.",
"ErrorPleaseSelectLineup": "Bitte wählen Sie ein TV Programm und versuchen Sie es erneut. Wenn keine Programme verfügbar sind prüfen Sie bitte Benutzername, Passwort und Ihre Postleitzahl.",
"ErrorSavingTvProvider": "Ein Fehler beim speichern des TV Verzeichnisses trat auf. Bitte stellen Sie sicher das dieser erreichbar ist und versuchen Sie es erneut.",
@@ -359,7 +359,7 @@
"HeaderLibraryFolders": "Bibliotheksverzeichnisse",
"HeaderLibraryOrder": "Bibliotheksreihenfolge",
"HeaderLibrarySettings": "Bibliothekseinstellungen",
- "HeaderLiveTV": "Live-TV",
+ "HeaderLiveTV": "Live TV",
"HeaderLiveTv": "Live-TV",
"HeaderLiveTvTunerSetup": "TV Tuner Setup",
"HeaderLoginFailure": "Login Fehler",
@@ -422,7 +422,7 @@
"HeaderSelectServerCachePathHelp": "Suche oder gib den Pfad für die Speicherung von Server Cache Dateien an. Das Verzeichnis muss beschreibbar sein.",
"HeaderSelectTranscodingPath": "Wähle Pfad für temporäre Transkodierdateien",
"HeaderSelectTranscodingPathHelp": "Suche oder gib den Pfad für die Speicherung von temporären Transkodierdateien an. Das Verzeichnis muss beschreibbar sein.",
- "HeaderSendMessage": "sende Nachricht",
+ "HeaderSendMessage": "Nachricht senden",
"HeaderSeries": "Serien",
"HeaderSeriesOptions": "Serienoptionen",
"HeaderSeriesStatus": "Serienstatus",
@@ -495,7 +495,7 @@
"LabelAll": "Alle",
"LabelAllowHWTranscoding": "Erlaube Hardware Transkodierung",
"LabelAllowServerAutoRestart": "Erlaube dem Server sich automatisch neuzustarten, um Updates durchzuführen",
- "LabelAllowServerAutoRestartHelp": "Der Server startet nur in benutzerfreien Leerlaufzeiten neu.",
+ "LabelAllowServerAutoRestartHelp": "Der Server startet nur wenn keine Nutzer aktiv sind neu.",
"LabelAllowedRemoteAddresses": "Remote-IP Adressen Filter:",
"LabelAllowedRemoteAddressesMode": "Remote IP Adressen Filtermodus:",
"LabelAppName": "App Name",
@@ -509,7 +509,7 @@
"LabelBirthDate": "Geburtsdatum:",
"LabelBirthYear": "Geburtsjahr:",
"LabelBlastMessageInterval": "Alive Meldungsintervall (Sekunden)",
- "LabelBlastMessageIntervalHelp": "Legt die Dauer in Sekunden zwischen den Server Alive Meldungen fest.",
+ "LabelBlastMessageIntervalHelp": "Legt die Dauer in Sekunden zwischen den Server-Alive-Meldungen fest.",
"LabelBlockContentWithTags": "Blockiere Inhalte mit Tags:",
"LabelBurnSubtitles": "Untertitel einbrennen:",
"LabelCachePath": "Cache Pfad:",
@@ -1461,5 +1461,13 @@
"MoreMediaInfo": "Medieninformation",
"MessageNoServersAvailable": "Die automatische Serversuche konnte keinen Server finden.",
"LabelPlayer": "Player:",
- "MediaInfoCodecTag": "Codec Tag"
+ "MediaInfoCodecTag": "Codec Tag",
+ "SubtitleOffset": "Untertitelvorlauf",
+ "PlaybackData": "Wiedergabeinformationen",
+ "OptionThumbCard": "Vorschaukarte",
+ "OptionPosterCard": "Posterkarte",
+ "OptionPoster": "Poster",
+ "OptionList": "Liste",
+ "OptionBanner": "Banner",
+ "MusicVideo": "Musikvideo"
}
diff --git a/src/strings/en-us.json b/src/strings/en-us.json
index 4d83b070d1..d72b74971a 100644
--- a/src/strings/en-us.json
+++ b/src/strings/en-us.json
@@ -354,6 +354,7 @@
"HeaderFavoriteShows": "Favorite Shows",
"HeaderFavoriteEpisodes": "Favorite Episodes",
"HeaderFavoriteAlbums": "Favorite Albums",
+ "HeaderFavoritePeople": "Favorite People",
"HeaderFavoriteArtists": "Favorite Artists",
"HeaderFavoriteSongs": "Favorite Songs",
"HeaderFavoriteVideos": "Favorite Videos",
diff --git a/src/strings/fr.json b/src/strings/fr.json
index b89cda0015..05ef432660 100644
--- a/src/strings/fr.json
+++ b/src/strings/fr.json
@@ -51,7 +51,7 @@
"BoxRear": "Dos de boîtier",
"Browse": "Parcourir",
"BrowsePluginCatalogMessage": "Explorer notre catalogue des plugins pour voir les plugins disponibles.",
- "BurnSubtitlesHelp": "Détermine si le serveur doit graver les sous-titres lors de la conversion vidéo en fonction du format de sous-titre. Éviter la gravure des sous-titres améliorera les performances du serveur. Sélectionnez Auto pour graver les formats basés sur l'image (VOBSUB, PGS, SUB/IDX etc) ainsi que certains sous-titres ASS/SSA.",
+ "BurnSubtitlesHelp": "Détermine si le serveur doit incruster les sous-titres lors de la conversion vidéo en fonction du format de sous-titre. Éviter l'incrustation des sous-titres améliorera les performances du serveur. Sélectionnez Auto pour incruster les formats basés sur l'image (VOBSUB, PGS, SUB/IDX etc) ainsi que certains sous-titres ASS/SSA.",
"ButtonAdd": "Ajouter",
"ButtonAddMediaLibrary": "Ajouter une médiathèque",
"ButtonAddScheduledTaskTrigger": "Ajouter un déclencheur",
@@ -172,7 +172,7 @@
"DetectingDevices": "Détection des appareils",
"DeviceAccessHelp": "Ceci ne s'applique qu'aux appareils qui peuvent être identifiés de manière unique et n'empêchera pas l'accès par navigateur. Le filtrage de l'accès aux appareil par utilisateur empêchera l'utilisation de nouveaux appareils jusqu'à ce qu'ils soient approuvés ici.",
"DirectPlaying": "Lecture directe",
- "DirectStreamHelp1": "Le média est compatible avec l'appareil en ce qui concerne la résolution et le type de média (H.264, AC3 etc), mais se trouve dans un conteneur de fichiers incompatible (mkv, avi, wmv, etc). La vidéo sera rempaquetée à la volée avant d'être diffusée à l'appareil.",
+ "DirectStreamHelp1": "Le média est compatible avec l'appareil en ce qui concerne la résolution et le type de média (H.264, AC3,etc), mais se trouve dans un conteneur de fichiers incompatible (mkv, avi, wmv, etc). La vidéo sera rempaquetée à la volée avant d'être diffusée à l'appareil.",
"DirectStreamHelp2": "Le streaming en direct d'un fichier utilise très peu de puissance de traitement sans perte de qualité vidéo.",
"DirectStreaming": "Streaming direct",
"Director": "Réalisateur(trice)",
@@ -1449,6 +1449,7 @@
"LabelAudioChannels": "Canaux audio :",
"HeaderFavoriteBooks": "Livres Favoris",
"FetchingData": "Récupération de données additionnelles",
- "CopyStreamURLSuccess": "Lien copié avec succès.",
- "CopyStreamURL": "Copier le lien du flux"
+ "CopyStreamURLSuccess": "URL copié avec succès.",
+ "CopyStreamURL": "Copier l'URL du flux",
+ "LabelBaseUrlHelp": "Vous pouvez ajouter un sous-répertoire personnalisé pour accéder au serveur à partir d'une URL unique."
}
diff --git a/src/strings/hu.json b/src/strings/hu.json
index ea50446071..df6a4bca4c 100644
--- a/src/strings/hu.json
+++ b/src/strings/hu.json
@@ -1302,7 +1302,7 @@
"TabNetworking": "Hálózat",
"HeaderFavoriteArtists": "Kedvenc előadók",
"SmallCaps": "Kiskapitális",
- "AllowOnTheFlySubtitleExtractionHelp": "A beágyazott feliratokat ki lehet távolítani a videókból és elküldeni a Jellyfin alkalmazásoknak sima szöveg formátumba, hogy ne legyen átkódolás. Néhány eszközön ez hosszú ideig is eltarthat, valamint a videó lejátszás megakadhat az eltávolítási folyamat futása közben. Ezt kikapcsolva a beágyazott feliratok videó átkódolással beégetésre kerülnek azon kliens eszközökre melyek nem támogatják a külső feliratokat.",
+ "AllowOnTheFlySubtitleExtractionHelp": "A beágyazott feliratokat ki lehet nyerni a videókból és elküldeni az alkalmazásoknak sima szöveg formátumba, hogy ne legyen átkódolás. Néhány eszközön ez hosszú ideig is eltarthat, valamint a videó lejátszás megakadhat az eltávolítási folyamat futása közben. Ezt kikapcsolva a beágyazott feliratok videó átkódolással beégetésre kerülnek azon kliens eszközökre melyek nem támogatják a külső feliratokat.",
"Art": "ClearArt",
"AuthProviderHelp": "Válaszd ki az azonosítási szolgáltatást amely ezen felhasználó jelszavának ellenőrzését valósítja meg.",
"BurnSubtitlesHelp": "Meghatározza, hogy a szervernek be kell-e égetnie a feliratot videó átkódolás esetén a felirat típusának függvényében. A beégetés elkerülésével a szerver teljesítménye javul. Válaszd az Auto lehetőséget a kép alapú feliratok (pl. VOBSUB, PGS, SUB/IDX, stb) és bizonyos ASS/SSA feliratok beégetéséhez.",
@@ -1317,7 +1317,7 @@
"H264CrfHelp": "A Constant Rate Factor (CRF) az alapértelmezett minőségi beállítás az x264 enkóderhez. Az értékek 0 és 51 között állíthatók, ahol az alacsonyabb érték jobb minőséget eredményez (nagyobb fájl méret mellett). Az ajánlott érték 18 és 28 között van. Az x264 alapértelmezett beállítása 23, ez lehet kiindulási alap.",
"HeaderAddScheduledTaskTrigger": "Vezérlő Hozzáadása",
"HeaderApiKeysHelp": "A külső alkalmazásoknak egy API kulcsra van szükésge, hogy kommunikáljanak a Jellyfin szerverrel. A kulcsokat egy Jellyfin fiókkal történő belépéssel lehet megkapni, vagy kézileg felvenni egy alkalmazáshoz tartozó kulcsot.",
- "HeaderBranding": "Személyes védjegy",
+ "HeaderBranding": "Személyes arculat",
"HeaderContinueListening": "Folyamatban lévő zenék",
"HeaderDeleteTaskTrigger": "Feladatvezérlő törlése",
"HeaderFavoriteMovies": "Kedvenc Filmek",
diff --git a/src/strings/ro.json b/src/strings/ro.json
index 221dfcbaec..f40c51d0e2 100644
--- a/src/strings/ro.json
+++ b/src/strings/ro.json
@@ -221,5 +221,28 @@
"UserProfilesIntro": "Jellyfin include sprijin pentru profile de utilizator, permițând fiecărui utilizator să își facă propriile setări de afișare, playstate și control parental.",
"Wednesday": "Miercuri",
"WelcomeToProject": "Bine ați venit la Jellyfin!",
- "WizardCompleted": "Asta e tot ce avem nevoie pentru moment. Jellyfin a început colectarea de informații despre biblioteca media. Verifică unele din aplicațiile noastre, și apoi faceți clic pe Finalizare pentru a vizualiza Tabloul de bord al Serverului ."
+ "WizardCompleted": "Asta e tot ce avem nevoie pentru moment. Jellyfin a început colectarea de informații despre biblioteca media. Verifică unele din aplicațiile noastre, și apoi faceți clic pe Finalizare pentru a vizualiza Tabloul de bord al Serverului .",
+ "AllowOnTheFlySubtitleExtraction": "Permite extragerea subtitrărilor în timp real",
+ "AllowMediaConversionHelp": "Permite sau interzice accesul la funcția de conversie media.",
+ "AllowMediaConversion": "Permite coversia media",
+ "AllowHWTranscodingHelp": "Permite tunerului să transcodeze automat. Poate ajuta la reducerea timpului necesar pentru transcodare pe server.",
+ "AllLibraries": "Toate librăriile",
+ "AllLanguages": "Toate limbile",
+ "AllEpisodes": "Toate episoadele",
+ "AllComplexFormats": "Toate formatele complexe (ASS, SSA, VOBSUB, PGS, SUB/IDX, etc.)",
+ "AllChannels": "Toate canalele",
+ "Alerts": "Alerte",
+ "Albums": "Albume",
+ "Aired": "Premiera emisă",
+ "AirDate": "Data premierei",
+ "AdditionalNotificationServices": "Caută în catalogul de extensii pentru alte servicii de notificate.",
+ "AddToCollection": "Adaugă la colecție",
+ "Absolute": "Absolut",
+ "AddedOnValue": "Adăugat la {0}",
+ "AddToPlaylist": "Adaugă la playlist",
+ "AddToPlayQueue": "Adaugă la coada de redare",
+ "AddItemToCollectionHelp": "Adaugă obiectele la colecții căutând-le și folosind meniul de click-dreapta sau apasare pentru a le adăuga la colecție.",
+ "Add": "Adaugă",
+ "Actor": "Actor",
+ "AccessRestrictedTryAgainLater": "Accesul este restricționat. Te rugăm să încerci mai târziu."
}
diff --git a/src/strings/ru.json b/src/strings/ru.json
index 1846e95026..eed91150d2 100644
--- a/src/strings/ru.json
+++ b/src/strings/ru.json
@@ -1450,5 +1450,6 @@
"CopyStreamURLSuccess": "URL скопирован успешно.",
"MusicLibraryHelp": "Просмотрите {0}руководство по именованию музыки{1}.",
"FetchingData": "Выборка дополнительных данных",
- "ButtonAddImage": "Добавить рисунок"
+ "ButtonAddImage": "Добавить рисунок",
+ "HeaderFavoritePeople": "Избранные люди"
}
diff --git a/src/strings/sl-si.json b/src/strings/sl-si.json
index 25f611793a..2840cfb60d 100644
--- a/src/strings/sl-si.json
+++ b/src/strings/sl-si.json
@@ -311,7 +311,7 @@
"HeaderSelectServerCachePath": "Izberite pot predpomnjenih podatkov",
"HeaderSelectServer": "Izberi strežnik",
"HeaderSelectPath": "Izberi pot",
- "HeaderSelectMetadataPathHelp": "Poiščite ali vnesite pot, v kateri bi želeli shranjevati metapodatke. Datoteka mora omogočati pisanje.",
+ "HeaderSelectMetadataPathHelp": "Poiščite ali vnesite pot, v kateri želite shranjevati metapodatke. Datoteka mora omogočati pisanje.",
"HeaderSelectMetadataPath": "Izberi pot metapodatkov",
"HeaderSelectCertificatePath": "Izberi pot certifikata",
"HeaderSecondsValue": "{0} sekund",
@@ -352,7 +352,7 @@
"HeaderMyMediaSmall": "Moja predstavnost (majhno)",
"HeaderMyMedia": "Moja predstavnost",
"HeaderMyDevice": "Moja naprava",
- "HeaderMusicVideos": "Glasbeni videi",
+ "HeaderMusicVideos": "Glasbeni video posnetki",
"HeaderMusicQuality": "Kvaliteta glasbe",
"HeaderMovies": "Filmi",
"HeaderMoreLikeThis": "Več tega",
@@ -607,7 +607,7 @@
"LabelAutomaticallyRefreshInternetMetadataEvery": "Samodejno posodobi metapodatke z interneta:",
"Label3DFormat": "Format 3D:",
"LabelAccessDay": "Dan v tednu:",
- "LabelAccessEnd": "Čas konca:",
+ "LabelAccessEnd": "Ura konca:",
"LabelAccessStart": "Čas začetka:",
"LabelAirDays": "Dnevi predvajanja:",
"LabelAirTime": "Čas predvajanja:",
@@ -653,5 +653,25 @@
"LabelDeathDate": "Datum smrti:",
"LabelBitrate": "Bitna hitrost:",
"LabelBlastMessageInterval": "Interval sporočila o dostopnosti (sekunde)",
- "LabelDefaultUserHelp": "Določi knjižnica katerega uporabnika bo prikazana na povezanih napravah. To lahko preglasite s profili za posamezno napravo."
+ "LabelDefaultUserHelp": "Določi knjižnica katerega uporabnika bo prikazana na povezanih napravah. To lahko preglasite s profili za posamezno napravo.",
+ "LabelEnableDlnaClientDiscoveryIntervalHelp": "Določi trajanje v sekundah med SSDP iskanji, ki jih izvede Jellyfin.",
+ "LabelEnableDlnaClientDiscoveryInterval": "Interval odkrivanja sprejemnikov (sekunde)",
+ "LabelEnableBlastAliveMessagesHelp": "Omogočite, če imajo UPnP naprave težave z zaznavanjem strežnika v omrežju.",
+ "LabelEnableBlastAliveMessages": "Oddajaj sporočila o dostopnosti",
+ "LabelEnableAutomaticPortMapHelp": "Poskuša avtomatično povezati javna vrata z lokalnimi preko UPnP. To ne deluje z nekaterimi usmerjevalniki.",
+ "LabelEnableAutomaticPortMap": "Omogoči avtomatično mapiranje vrat",
+ "LabelEmbedAlbumArtDidl": "Vdelaj grafike albuma v Didl",
+ "LabelEasyPinCode": "Enostavna PIN koda:",
+ "LabelDropImageHere": "Povleci in spusti sliko sem, klikni za brskanje.",
+ "LabelDownloadLanguages": "Jeziki za prenos:",
+ "LabelDownMixAudioScaleHelp": "Ojačaj jakost zvoka pri pretvarjanju v manj kanalov. Vrednost 1 ohrani izvirno glasnost.",
+ "LabelDownMixAudioScale": "Ojačanje zvoka pri pretvarjanju v manj kanalov:",
+ "LabelDisplaySpecialsWithinSeasons": "Prikaži posebne epizode znotraj sezon v katerih so bile predvajane",
+ "LabelDisplayOrder": "Vrstni red prikaza:",
+ "LabelDisplayName": "Prikazano ime:",
+ "LabelDisplayMode": "Način prikaza:",
+ "LabelBindToLocalNetworkAddressHelp": "Neobvezno. Preglasi lokalni IP naslov za povezavo s HTTP strežnikom. V kolikor pustite prazno se strežnik poveže z vsemi možnimi naslovi. Sprememba vrednosti zahteva ponovni zagon Jellyfin strežnika.",
+ "InstallingPackage": "Nameščanje {0}",
+ "ImportMissingEpisodesHelp": "Če je omogočeno, bodo podatki o manjkajočih epizodah dodani v Jellyfin bazo podatkov in prikazani znotraj sezon in serij. To lahko občutno podaljša uvoz v knjižnjico.",
+ "ImportFavoriteChannelsHelp": "Če je omogočeno, bodo uvoženi zgolj kanali, ki so na sprejemniku označeni kot priljubljeni."
}
diff --git a/src/strings/tr.json b/src/strings/tr.json
index f517eb10e9..a9e2f76249 100644
--- a/src/strings/tr.json
+++ b/src/strings/tr.json
@@ -53,7 +53,7 @@
"FolderTypeBooks": "Kitaplar",
"FolderTypeMovies": "Filmler",
"FolderTypeMusic": "Müzik",
- "FolderTypeMusicVideos": "Müzik videoları",
+ "FolderTypeMusicVideos": "Müzik Videoları",
"FolderTypeTvShows": "TV",
"Friday": "Cuma",
"HeaderActiveRecordings": "Aktif Kayıtlar",
@@ -82,7 +82,7 @@
"HeaderRecentlyPlayed": "Son oynatılan",
"HeaderRemoteControl": "Uzaktan Kontrol",
"HeaderResponseProfile": "Profil Görüntüleme",
- "HeaderScenes": "Diziler",
+ "HeaderScenes": "Sahneler",
"HeaderSendMessage": "Mesaj Gönder",
"HeaderSeries": "Series",
"HeaderServerSettings": "Sunucu ayarları",
@@ -102,10 +102,10 @@
"LabelCurrentPassword": "Kullanımdaki şifre:",
"LabelDay": "Gün:",
"LabelDisplayMissingEpisodesWithinSeasons": "Sezondaki kayıp bölümleri göster",
- "LabelEnableDlnaServer": "DLNA Sunucusu etkin",
+ "LabelEnableDlnaServer": "DLNA Sunucusunu Etkinleştir",
"LabelFinish": "Bitir",
- "LabelIconMaxHeight": "İkon Max Genişlik:",
- "LabelIconMaxWidth": "ikon Max Yükseklik:",
+ "LabelIconMaxHeight": "İkon Maksimum Yükseklik:",
+ "LabelIconMaxWidth": "ikon Maksimum Genişlik:",
"LabelLanguage": "Dil:",
"LabelManufacturer": "Üretici",
"LabelMaxParentalRating": "Maksimum izin verilen ebeveyn değerlendirmesi:",
@@ -132,7 +132,7 @@
"LabelYear": "Yıl:",
"LabelYourFirstName": "İlk Ad:",
"LabelYoureDone": "Bitti!",
- "LibraryAccessHelp": "Bu kullanıcı ile paylaşmak için medya klasörleri seçin. Yöneticiler meta yöneticisini kullanarak tüm klasörleri düzenlemesi mümkün olacaktır.",
+ "LibraryAccessHelp": "Bu kullanıcı ile paylaşmak için kütüphaneleri seçin. Yöneticiler meta yöneticisini kullanarak tüm klasörleri düzenlemesi mümkün olacaktır.",
"Live": "Canlı",
"MaxParentalRatingHelp": "Daha yüksek bir derece ile İçerik Bu kullanıcıdan gizli olacak.",
"MessageNothingHere": "Burada birşey yok.",
@@ -555,5 +555,143 @@
"EnableThemeSongsHelp": "Kitaplığa göz atarken tema şarkıları arka planda çalın.",
"EnableThemeSongs": "Tema şarkıları",
"EnableStreamLoopingHelp": "Canlı akışlar yalnızca birkaç saniye veri içeriyorsa ve sürekli istenmesi gerekiyorsa bunu etkinleştirin. Gerekmediğinde bunu etkinleştirmek sorunlara neden olabilir.",
- "EnableStreamLooping": "Otomatik döngü canlı akışları"
+ "EnableStreamLooping": "Otomatik döngü canlı akışları",
+ "Hide": "Gizle",
+ "HeaderVideos": "Videolar",
+ "HeaderVideoTypes": "Video Tipleri",
+ "HeaderVideoType": "Video Tipi",
+ "HeaderVideoQuality": "Video Kalitesi",
+ "HeaderSelectServerCachePath": "Sunucu Önbellek Yolunu Seç",
+ "HeaderSelectServer": "Sunucu Seç",
+ "HeaderSelectPath": "Yolu Seç",
+ "HeaderSelectMetadataPath": "Meta Verisi Yolunu Seç",
+ "HeaderSelectCertificatePath": "Sertifika Yolunu Seç",
+ "HeaderSecondsValue": "{0} Saniye",
+ "HeaderSeasons": "Sezonlar",
+ "HeaderSchedule": "Zamanla",
+ "HeaderRunningTasks": "Çalışan Görevler",
+ "HeaderRevisionHistory": "Revizyon Geçmişi",
+ "HeaderRestartingServer": "Sunucu Yeniden Başlıyor",
+ "HeaderRestart": "Yeniden Başlat",
+ "HeaderRemoveMediaLocation": "Medya Konumunu Kaldır",
+ "HeaderRemoveMediaFolder": "Medya Klasörünü Kaldır",
+ "HeaderRecordingPostProcessing": "Kayıt Sonrası İşlemesi",
+ "HeaderRecordingOptions": "Kayıt Ayarları",
+ "HeaderProfileInformation": "Profil Bilgileri",
+ "HeaderProfile": "Profil",
+ "HeaderPluginInstallation": "Eklenti Kurulumu",
+ "HeaderPlaybackError": "Oynatma Hatası",
+ "HeaderPlayback": "Medya Oynatma",
+ "HeaderPinCodeReset": "Pin Kodunu Sıfırla",
+ "HeaderPhotoAlbums": "Fotoğraf Albümleri",
+ "HeaderPeople": "Kişiler",
+ "HeaderPendingInvitations": "Bekleyen Davetiyeler",
+ "HeaderPasswordReset": "Şifre Sıfırlama",
+ "HeaderPassword": "Şifre",
+ "HeaderParentalRatings": "Ebeveyn Derecelendirmeleri",
+ "HeaderOtherItems": "Diğer Öğeler",
+ "HeaderOnNow": "Şimdi",
+ "HeaderNextVideoPlayingInValue": "Sonraki Video Başlıyor {0}",
+ "HeaderNextEpisodePlayingInValue": "Sonraki Bölüm {0}",
+ "HeaderNewDevices": "Yeni Cihazlar",
+ "HeaderNewApiKey": "Yeni API Anahtarı",
+ "HeaderMyMediaSmall": "Benim Medyam (küçük)",
+ "HeaderMyMedia": "Benim Medyam",
+ "HeaderMyDevice": "Benim Cihazım",
+ "HeaderMusicQuality": "Müzik Kalitesi",
+ "HeaderMovies": "Filmler",
+ "HeaderMoreLikeThis": "Buna Benzer Daha Fazla",
+ "HeaderMetadataSettings": "Meta Verisi Ayarları",
+ "HeaderMediaInfo": "Medya Bilgisi",
+ "HeaderMedia": "Medya",
+ "HeaderLoginFailure": "Giriş Başarısız",
+ "HeaderLiveTvTunerSetup": "Canlı TV istasyon Kurulumu",
+ "HeaderLiveTv": "Canlı TV",
+ "HeaderLibrarySettings": "Kütüphane Ayarları",
+ "HeaderLibraryOrder": "Kütüphane Sırası",
+ "HeaderLibraryAccess": "Kütüphane Erişimi",
+ "HeaderLibraries": "Kütüphaneler",
+ "HeaderLatestMusic": "Son Müzik",
+ "HeaderKeepSeries": "Seriyi Sakla",
+ "HeaderKeepRecording": "Kaydı Sakla",
+ "HeaderItems": "Öğeler",
+ "HeaderInstall": "Yükle",
+ "HeaderImageOptions": "Resim Seçenekleri",
+ "HeaderIdentifyItemHelp": "Bir veya daha fazla arama kriteri giriniz. Faha fazla arama sonucu için kriter kaldırın.",
+ "HeaderIdentificationHeader": "Kimlik Başlığı",
+ "HeaderIdentificationCriteriaHelp": "En az bir kimlik kriteri girmelisiniz.",
+ "HeaderIdentification": "Kimlik",
+ "HeaderHttpHeaders": "HTTP Başlıkları",
+ "HeaderHome": "Ana Sayfa",
+ "HeaderFavoritePeople": "Favori Kişiler",
+ "LabelEnableAutomaticPortMap": "Otomatik port eşleştirmeyi etkinleştir",
+ "LabelEasyPinCode": "Basit pin kodu:",
+ "LabelDropImageHere": "Görüntüyü buraya bırakın veya göz atmak için tıklayın.",
+ "LabelDownloadLanguages": "Dilleri indir:",
+ "LabelDisplayOrder": "Görüntüleme sırası:",
+ "LabelDisplayName": "Ekran adı:",
+ "LabelDisplayMode": "Ekran modu:",
+ "LabelDisplayLanguageHelp": "Jellyfin çevirisi devam eden bir projedir.",
+ "LabelDisplayLanguage": "Ekran dili:",
+ "LabelDiscNumber": "Disk no:",
+ "LabelDeviceDescription": "Sürücü açıklaması",
+ "LabelDefaultUser": "Varsayılan kullanıcı:",
+ "LabelDefaultScreen": "Varsayılan ekran:",
+ "LabelDeathDate": "Ölüm tarihi:",
+ "LabelDateTimeLocale": "Tarih saat yerelleştirme:",
+ "LabelDateAdded": "Eklenme tarihi:",
+ "LabelCustomCss": "Özel CSS:",
+ "LabelCommunityRating": "Topluluk değerlendirmesi:",
+ "LabelCertificatePassword": "Sertifika şifresi:",
+ "LabelCache": "Önbellek:",
+ "LabelBitrate": "Bit Hızı:",
+ "LabelBirthYear": "Doğum yılı:",
+ "LabelBirthDate": "Doğum tarihi:",
+ "LabelAuthProvider": "Kimlik Doğrulama Sağlayıcısı:",
+ "LabelAudioSampleRate": "Ses örnekleme hızı:",
+ "LabelAudioCodec": "Ses kodeği:",
+ "LabelAudioChannels": "Ses kanalları:",
+ "LabelAudio": "Ses:",
+ "LabelAppName": "Uygulama adı",
+ "LabelAllowHWTranscoding": "Donanım kod dönüştürmesine izin ver",
+ "LabelAll": "Tümü",
+ "LabelAlbumArtMaxWidth": "Albüm resmi maks. genişlik:",
+ "LabelAlbumArtMaxHeight": "Albüm resmi maks. yükseklik:",
+ "LabelAlbum": "Albüm:",
+ "LabelAccessStart": "Başlangıç zamanı:",
+ "LabelAccessEnd": "Bitiş zamanı:",
+ "LabelAccessDay": "Haftanın Günü:",
+ "LabelAbortedByServerShutdown": "(Sunucu kapanması nedeniyle iptal edildi)",
+ "Label3DFormat": "3D Formatı:",
+ "Kids": "Çocuklar",
+ "ItemCount": "{0} nesne",
+ "InstallingPackage": "Yükleniyor {0}",
+ "Images": "Resimler",
+ "Identify": "Tanımla",
+ "Horizontal": "Yatay",
+ "Help": "Yardım",
+ "HeadersFolders": "Klasörler",
+ "HeaderYears": "Yıl",
+ "HeaderXmlSettings": "Xml Ayarları",
+ "HeaderXmlDocumentAttributes": "Xml Döküman Öznitelikleri",
+ "HeaderXmlDocumentAttribute": "Xml Dökümanı Öznitelik",
+ "HeaderUser": "Kullanıcı",
+ "HeaderUploadImage": "Resim Yükle",
+ "HeaderUpcomingOnTV": "TV'de Yaklaşan",
+ "HeaderTypeText": "Metin Gir",
+ "HeaderTunerDevices": "Tuner Cihazları",
+ "HeaderThisUserIsCurrentlyDisabled": "Bu kullanıcı şu anda pasif",
+ "HeaderTags": "Etiketler",
+ "HeaderSubtitleProfiles": "Altyazı Profilleri",
+ "HeaderSubtitleProfile": "Altyazı Profili",
+ "HeaderSubtitleDownloads": "Altyazı İndirmeleri",
+ "HeaderStopRecording": "Kaydı Durdur",
+ "HeaderStartNow": "Şimdi Başlat",
+ "HeaderSpecialFeatures": "Ekstra Özellikler",
+ "HeaderSpecialEpisodeInfo": "Özel Bölüm Bilgisi",
+ "HeaderSortOrder": "Sıralama Düzeni",
+ "HeaderSortBy": "Sırala",
+ "HeaderShutdown": "Kapat",
+ "HeaderSettings": "Ayarlar",
+ "LabelLogs": "Günlük:"
}
diff --git a/src/strings/zh-cn.json b/src/strings/zh-cn.json
index 749a5b0a8a..eb3e6a8181 100644
--- a/src/strings/zh-cn.json
+++ b/src/strings/zh-cn.json
@@ -498,7 +498,7 @@
"LabelBurnSubtitles": "烧录字幕:",
"LabelCache": "缓存:",
"LabelCachePath": "缓存路径:",
- "LabelCachePathHelp": "指定服务器缓存文件的自定义路径,比如图片。留空将使用服务器默认。",
+ "LabelCachePathHelp": "指定服务器缓存文件(如图片)的自定义路径。留空将使用服务器默认。",
"LabelCancelled": "已取消",
"LabelCertificatePassword": "证书密码:",
"LabelCertificatePasswordHelp": "如果你的证书需要密码,请在此输入它。",
@@ -585,7 +585,7 @@
"LabelHomeNetworkQuality": "家庭网络质量:",
"LabelHomeScreenSectionValue": "主屏幕模块{0}:",
"LabelHttpsPort": "本地 HTTPS 端口号:",
- "LabelHttpsPortHelp": "Jellyfin HTTPS 服务器监听的 TCP 端口。",
+ "LabelHttpsPortHelp": "Jellyfin HTTPS 服务器监听端口。",
"LabelIconMaxHeight": "图标最大高度:",
"LabelIconMaxHeightHelp": "通过UPnP显示的图标最大分辨率。",
"LabelIconMaxWidth": "图标最大宽度:",
@@ -595,12 +595,12 @@
"LabelImageType": "图片类型:",
"LabelImportOnlyFavoriteChannels": "限制标记频道为我的最爱",
"LabelInNetworkSignInWithEasyPassword": "启用简易PIN码登录家庭网络",
- "LabelInNetworkSignInWithEasyPasswordHelp": "如果启动该选项,你将可以在你的家庭网络中使用你的简易 PIN 码登录 Jellyfin 应用程序。仅在你使用外部网络时才需要输入常规密码。如果 PIN 码留空,那么在你的家庭网络中,你将不需要输入密码。",
+ "LabelInNetworkSignInWithEasyPasswordHelp": "在你的本地网络中使用简易 PIN 码登录客户端,如果 PIN 码留空,那么在本地网络中则不需要输入密码。外部网络中需要输入常规密码登陆。",
"LabelInternetQuality": "网络质量:",
"LabelKidsCategories": "儿童分类:",
"LabelKodiMetadataDateFormat": "发行日期格式:",
"LabelKodiMetadataDateFormatHelp": "Nfo的所有日期将使用这种格式。",
- "LabelKodiMetadataEnableExtraThumbs": "复制同人画到extrathumbs文件夹",
+ "LabelKodiMetadataEnableExtraThumbs": "复制同人画到extrathumbs目录",
"LabelKodiMetadataEnableExtraThumbsHelp": "为了最大化兼容Kodi皮肤,下载的图片同时保存在 extrafanart 和 extrathumbs 文件夹。",
"LabelKodiMetadataEnablePathSubstitution": "启用路径替换",
"LabelKodiMetadataEnablePathSubstitutionHelp": "允许图像的路径替换使用服务器的路径替换设置。",
@@ -724,7 +724,7 @@
"LabelSerialNumber": "序列号",
"LabelSeriesRecordingPath": "电视剧录制路径 (可选的):",
"LabelServerHost": "主机:",
- "LabelServerHostHelp": "192.168.1.100 或 https://myserver.com",
+ "LabelServerHostHelp": "192.168.1.100:8096 或 https://myserver.com",
"LabelSimultaneousConnectionLimit": "并发流限制:",
"LabelSkin": "皮肤:",
"LabelSkipBackLength": "跳过长度:",
@@ -764,7 +764,7 @@
"LabelTrackNumber": "音轨号码:",
"LabelTranscodingAudioCodec": "音频编解码器:",
"LabelTranscodingContainer": "容器:",
- "LabelTranscodingTempPathHelp": "此文件夹包含用于转码的工作文件。请自定义路径,或留空以使用默认的服务器数据文件夹。",
+ "LabelTranscodingTempPathHelp": "设置转码文件存储目录。留空以使用服务器默认文件夹。",
"LabelTranscodingThreadCount": "转码线程数:",
"LabelTranscodingThreadCountHelp": "选择转码时使用的最大线程数。\n减少线程数量将会降低CPU使用率,可能无法快速进行转换并流畅的播放。",
"LabelTranscodingVideoCodec": "视频编解码器:",
@@ -779,7 +779,7 @@
"LabelUserAgent": "用户代理:",
"LabelUserLibrary": "用户程序库:",
"LabelUserLibraryHelp": "选择一个在设备上显示的用户媒体库。留空则使用默认设置。",
- "LabelUserRemoteClientBitrateLimitHelp": "这将会覆盖服务器“播放”设置中为全局设置的默认值。",
+ "LabelUserRemoteClientBitrateLimitHelp": "覆盖服务器“播放”设置的全局默认值。",
"LabelUsername": "用户名:",
"LabelVaapiDevice": "VA API 设备:",
"LabelVaapiDeviceHelp": "此渲染节点用来硬件加速。",
@@ -801,7 +801,7 @@
"Large": "大",
"LatestFromLibrary": "最新的{0}",
"LearnHowYouCanContribute": "学习如何构建。",
- "LibraryAccessHelp": "选择共享给此用户的媒体文件夹。管理员能使用媒体资料管理器来编辑所有文件夹。",
+ "LibraryAccessHelp": "选择共享给此用户的媒体库。管理员有权使用媒体资料管理器来编辑所有文件夹。",
"Like": "喜欢",
"List": "列表",
"Live": "直播",
@@ -845,20 +845,20 @@
"MessageConfirmRemoveMediaLocation": "你确定要移除此位置?",
"MessageConfirmRestart": "你确定要重启 Jellyfin 服务端?",
"MessageConfirmRevokeApiKey": "你确定你希望撤销这个 API 秘钥吗?这个应用程序与 Jellyfin 服务器的连接将会被立刻中断。",
- "MessageConfirmShutdown": "你确定要关闭 Jellyfin 服务端?",
+ "MessageConfirmShutdown": "你确定要关闭服务端?",
"MessageContactAdminToResetPassword": "请联系你的管理员以重置你的密码。",
"MessageCreateAccountAt": "在 {0} 创建帐户",
"MessageDeleteTaskTrigger": "你确定删除这个任务触发条件?",
"MessageDirectoryPickerBSDInstruction": "对于 BSD 系统,你需要设置包含你的 FreeNAS Jail 虚拟机的存储以允许 Jellyfin 访问它。",
"MessageDirectoryPickerInstruction": "网络按钮无法找到你的设备的情况下,网络路径可以手动输入。 例如, {0} 或者 {1}。",
- "MessageDirectoryPickerLinuxInstruction": "对于 Arch Linux 上的 Linux 或是 CentOS、Debian、Fedora、OpenSuse、Ubuntu 这些系统,你必须授权 Jellyfin 系统用户至少拥有你存储位置的读取权限。",
+ "MessageDirectoryPickerLinuxInstruction": "对于 Arch Linux 上的 Linux 或是 CentOS、Debian、Fedora、OpenSuse、Ubuntu 这些系统,你必须授权系统服务用户访问你存储位置的权限。",
"MessageDownloadQueued": "下载已列队。",
"MessageEnablingOptionLongerScans": "启用此选项可能会大大延长媒体库扫描时间。",
"MessageFileReadError": "读取文件发生错误。",
"MessageForgotPasswordFileCreated": "已在服务器上创建了以下文件, 并包含有关后续步骤说明:",
"MessageForgotPasswordInNetworkRequired": "请连接你的家庭网络后再试一次以开始密码重置流程。",
"MessageInstallPluginFromApp": "这个插件必须从你打算使用的应用程序中安装。",
- "MessageInvalidForgotPasswordPin": "你输入了一个无效的或过期的 pin 码。请再试一次。",
+ "MessageInvalidForgotPasswordPin": "无效的或过期的 pin 码。请再试一次。",
"MessageInvalidUser": "用户名或密码不可用。请重试。",
"MessageItemSaved": "项目已保存。",
"MessageItemsAdded": "项目已添加。",
@@ -875,7 +875,7 @@
"MessagePluginInstallDisclaimer": "安装 Jellyfin 社区成员构建的插件来获取额外的功能是增强你的 Jellyfin 体验的一种很好的方式。但在安装之前请意识到他们可能会对你的 Jellyfin 服务器造成的影响,如更长的媒体库扫描时间、额外的背景数据加工、降低系统稳定性等。",
"MessageReenableUser": "请参阅以下以重新启用",
"MessageSettingsSaved": "设置已保存。",
- "MessageTheFollowingLocationWillBeRemovedFromLibrary": "以下媒体路径将从你的 Jellyfin 媒体库移除:",
+ "MessageTheFollowingLocationWillBeRemovedFromLibrary": "以下媒体路径将从你的媒体库移除:",
"MessageUnableToConnectToServer": "现在无法连接所选择的服务器,请确保该服务器目前正在运行。",
"MessageUnsetContentHelp": "内容将显示为纯文件夹。为取得最佳效果, 请使用元数据管理器设置子文件夹的内容类型。",
"MessageYouHaveVersionInstalled": "你目前安装了 {0} 版本。",
@@ -884,13 +884,13 @@
"MetadataSettingChangeHelp": "更改元数据设置将影响添加的新内容。要刷新现有内容, 请打开详细信息屏幕并单击 \"刷新\" 按钮, 或使用元数据管理器执行批量刷新。",
"MinutesAfter": "分钟后",
"MinutesBefore": "分钟前",
- "Mobile": "手机/平板",
+ "Mobile": "移动设备",
"Monday": "星期一",
"MoreFromValue": "更多来自 {0}",
"MoreUsersCanBeAddedLater": "稍后可以在控制台中添加更多用户。",
"MoveLeft": "左移",
"MoveRight": "右移",
- "MovieLibraryHelp": "回顾{0}Jellyfin 电影命名指南{1}。",
+ "MovieLibraryHelp": "回顾{0}电影命名指南{1}。",
"Movies": "电影",
"Mute": "静音",
"MySubtitles": "我的字幕",
@@ -917,7 +917,7 @@
"OneChannel": "一个频道",
"OnlyForcedSubtitles": "只显示强制字幕",
"OnlyForcedSubtitlesHelp": "只有被标记为“强制”的字幕会被加载。",
- "OnlyImageFormats": "仅图像格式(VOBSUB, PGS, SUB/IDX 等)",
+ "OnlyImageFormats": "仅图像格式(VOBSUB, PGS, SUB等)",
"OptionAdminUsers": "管理员",
"OptionAlbum": "专辑",
"OptionAlbumArtist": "专辑艺术家",
@@ -932,7 +932,7 @@
"OptionAllowMediaPlaybackTranscodingHelp": "由于不支持的媒体格式, 限制对代码转换的访问可能会导致 Jellyfin 应用程序中的播放失败。",
"OptionAllowRemoteControlOthers": "允许其他用户全程控制",
"OptionAllowRemoteSharedDevices": "允许远程控制共享的设备",
- "OptionAllowRemoteSharedDevicesHelp": "DLNA 在有用户对它进行控制前设备被视为是共享的。",
+ "OptionAllowRemoteSharedDevicesHelp": "DLNA 设备在用户对他们进行控制前都被视为是共享的。",
"OptionAllowSyncTranscoding": "允许需要转码的媒体下载和同步",
"OptionAllowUserToManageServer": "运行此用户管理服务器",
"OptionAllowVideoPlaybackRemuxing": "允许播放需转换但无需重新编码的视频",
@@ -966,7 +966,7 @@
"OptionDisableUserHelp": "如果禁用该用户,服务器将不允许该用户连接。现有的连接将被终止。",
"OptionDislikes": "不喜欢",
"OptionDisplayFolderView": "显示一个“文件夹”类别用于按文件夹分类浏览你的媒体文件夹",
- "OptionDisplayFolderViewHelp": "如果启用此项,Jellyfin 应用程序将在你的媒体库列表中显示一个“文件夹”类别。如果你有按文件夹分类进行浏览的需求,这个功能将是有帮助的。",
+ "OptionDisplayFolderViewHelp": "在你的媒体库列表中显示文件夹。如果你有按文件夹分类进行浏览的需求,这会非常有用。",
"OptionDownloadArtImage": "艺术图",
"OptionDownloadBackImage": "包装背面",
"OptionDownloadBannerImage": "横幅",
diff --git a/src/userprofiles.html b/src/userprofiles.html
index bfa8c2e8e4..6fa5f058ce 100644
--- a/src/userprofiles.html
+++ b/src/userprofiles.html
@@ -6,7 +6,7 @@
\ No newline at end of file
+
diff --git a/src/videoosd.html b/src/videoosd.html
index 34c73a3019..0c7a910908 100644
--- a/src/videoosd.html
+++ b/src/videoosd.html
@@ -1,4 +1,4 @@
-