commit
9afdf82a20
65 changed files with 1147 additions and 1157 deletions
|
@ -15,12 +15,12 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {},
|
||||||
"ignore": [],
|
"ignore": [],
|
||||||
"version": "1.4.91",
|
"version": "1.4.96",
|
||||||
"_release": "1.4.91",
|
"_release": "1.4.96",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "1.4.91",
|
"tag": "1.4.96",
|
||||||
"commit": "a4c5466d5a59e57b157aa941fcadb1e0df602f75"
|
"commit": "4c9f9b8c4937da15ac8c81d554e768f0ef6e944e"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
||||||
"_target": "^1.2.0",
|
"_target": "^1.2.0",
|
||||||
|
|
|
@ -1,26 +1,13 @@
|
||||||
define(['itemShortcuts', 'connectionManager', 'registerElement'], function (itemShortcuts, connectionManager) {
|
define(['itemShortcuts', 'connectionManager', 'layoutManager', 'browser', 'registerElement'], function (itemShortcuts, connectionManager, layoutManager, browser) {
|
||||||
|
|
||||||
var ItemsContainerProtoType = Object.create(HTMLDivElement.prototype);
|
var ItemsContainerProtoType = Object.create(HTMLDivElement.prototype);
|
||||||
|
|
||||||
function parentWithClass(elem, className) {
|
|
||||||
|
|
||||||
while (!elem.classList || !elem.classList.contains(className)) {
|
|
||||||
elem = elem.parentNode;
|
|
||||||
|
|
||||||
if (!elem) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return elem;
|
|
||||||
}
|
|
||||||
|
|
||||||
function parentWithAttribute(elem, name) {
|
function parentWithAttribute(elem, name) {
|
||||||
|
|
||||||
while (!elem.getAttribute(name)) {
|
while (!elem.getAttribute(name)) {
|
||||||
elem = elem.parentNode;
|
elem = elem.parentNode;
|
||||||
|
|
||||||
if (!elem) {
|
if (!elem || !elem.getAttribute) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,80 +15,96 @@
|
||||||
return elem;
|
return elem;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getItem(button) {
|
|
||||||
|
|
||||||
button = parentWithAttribute(button, 'data-id');
|
|
||||||
var serverId = button.getAttribute('data-serverid');
|
|
||||||
var id = button.getAttribute('data-id');
|
|
||||||
var type = button.getAttribute('data-type');
|
|
||||||
|
|
||||||
var apiClient = connectionManager.getApiClient(serverId);
|
|
||||||
|
|
||||||
return apiClient.getItem(apiClient.getCurrentUserId(), id);
|
|
||||||
}
|
|
||||||
|
|
||||||
function showContextMenu(button, itemsContainer) {
|
|
||||||
|
|
||||||
getItem(button).then(function (item) {
|
|
||||||
|
|
||||||
var playlistId = itemsContainer.getAttribute('data-playlistid');
|
|
||||||
var collectionId = itemsContainer.getAttribute('data-collectionid');
|
|
||||||
|
|
||||||
if (playlistId) {
|
|
||||||
var elem = parentWithAttribute(button, 'data-playlistitemid');
|
|
||||||
item.PlaylistItemId = elem ? elem.getAttribute('data-playlistitemid') : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
require(['itemContextMenu'], function (itemContextMenu) {
|
|
||||||
itemContextMenu.show({
|
|
||||||
positionTo: button,
|
|
||||||
item: item,
|
|
||||||
play: true,
|
|
||||||
queue: true,
|
|
||||||
playAllFromHere: !item.IsFolder,
|
|
||||||
queueAllFromHere: !item.IsFolder,
|
|
||||||
identify: false,
|
|
||||||
playlistId: playlistId,
|
|
||||||
collectionId: collectionId
|
|
||||||
|
|
||||||
}).then(function (result) {
|
|
||||||
|
|
||||||
if (result.command == 'playallfromhere' || result.command == 'queueallfromhere') {
|
|
||||||
itemShortcuts.execute(button, result.command);
|
|
||||||
}
|
|
||||||
else if (result.command == 'removefromplaylist' || result.command == 'removefromcollection') {
|
|
||||||
|
|
||||||
itemsContainer.dispatchEvent(new CustomEvent('needsrefresh', {
|
|
||||||
detail: {},
|
|
||||||
cancelable: false,
|
|
||||||
bubbles: true
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onClick(e) {
|
function onClick(e) {
|
||||||
|
|
||||||
var itemsContainer = this;
|
var itemsContainer = this;
|
||||||
|
var target = e.target;
|
||||||
|
|
||||||
var menuButton = parentWithClass(e.target, 'menuButton');
|
itemShortcuts.onClick.call(this, e);
|
||||||
if (menuButton) {
|
|
||||||
showContextMenu(menuButton, itemsContainer);
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function disableEvent(e) {
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onContextMenu(e) {
|
||||||
|
|
||||||
|
var itemsContainer = this;
|
||||||
|
|
||||||
|
var target = e.target;
|
||||||
|
var card = parentWithAttribute(target, 'data-id');
|
||||||
|
if (card) {
|
||||||
|
|
||||||
|
//var itemSelectionPanel = card.querySelector('.itemSelectionPanel');
|
||||||
|
|
||||||
|
//if (!itemSelectionPanel) {
|
||||||
|
// showContextMenu(card, {});
|
||||||
|
//}
|
||||||
|
|
||||||
|
itemShortcuts.showContextMenu(card, {
|
||||||
|
identify: false,
|
||||||
|
positionTo: target,
|
||||||
|
itemsContainer: itemsContainer
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getShortcutOptions() {
|
||||||
|
return {
|
||||||
|
click: false
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemsContainerProtoType.enableHoverMenu = function (enabled) {
|
||||||
|
|
||||||
|
var current = this.hoverMenu;
|
||||||
|
|
||||||
|
if (!enabled && current) {
|
||||||
|
current.destroy();
|
||||||
|
this.hoverMenu = null;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (current) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var self = this;
|
||||||
|
require(['itemHoverMenu'], function (ItemHoverMenu) {
|
||||||
|
self.hoverMenu = new ItemHoverMenu(self);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
ItemsContainerProtoType.attachedCallback = function () {
|
ItemsContainerProtoType.attachedCallback = function () {
|
||||||
this.addEventListener('click', onClick);
|
this.addEventListener('click', onClick);
|
||||||
itemShortcuts.on(this);
|
|
||||||
|
// mobile safari doesn't allow contextmenu override
|
||||||
|
if (browser.safari && browser.mobile) {
|
||||||
|
this.addEventListener('contextmenu', disableEvent);
|
||||||
|
// todo: use tap hold
|
||||||
|
} else {
|
||||||
|
this.addEventListener('contextmenu', onContextMenu);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (layoutManager.desktop) {
|
||||||
|
this.enableHoverMenu(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
itemShortcuts.on(this, getShortcutOptions());
|
||||||
};
|
};
|
||||||
|
|
||||||
ItemsContainerProtoType.detachedCallback = function () {
|
ItemsContainerProtoType.detachedCallback = function () {
|
||||||
this.removeEventListener('click', onClick);
|
this.removeEventListener('click', onClick);
|
||||||
itemShortcuts.off(this);
|
this.removeEventListener('contextmenu', onContextMenu);
|
||||||
|
this.removeEventListener('contextmenu', disableEvent);
|
||||||
|
itemShortcuts.off(this, getShortcutOptions());
|
||||||
};
|
};
|
||||||
|
|
||||||
document.registerElement('emby-itemscontainer', {
|
document.registerElement('emby-itemscontainer', {
|
||||||
|
|
|
@ -39,20 +39,37 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter',
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.edit !== false) {
|
if (itemHelper.canEdit(user, item.Type)) {
|
||||||
if (itemHelper.canEdit(user, item.Type)) {
|
|
||||||
|
if (!isTheater) {
|
||||||
|
if (options.edit !== false) {
|
||||||
|
|
||||||
|
var text = item.Type == 'Timer' ? globalize.translate('sharedcomponents#Edit') : globalize.translate('sharedcomponents#EditInfo');
|
||||||
|
|
||||||
if (!isTheater) {
|
|
||||||
commands.push({
|
commands.push({
|
||||||
name: globalize.translate('sharedcomponents#EditInfo'),
|
name: text,
|
||||||
id: 'edit'
|
id: 'edit'
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemHelper.canEditImages(user, item.Type)) {
|
||||||
|
|
||||||
|
if (!isTheater) {
|
||||||
|
if (options.editImages !== false) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: globalize.translate('sharedcomponents#EditImages'),
|
name: globalize.translate('sharedcomponents#EditImages'),
|
||||||
id: 'editimages'
|
id: 'editimages'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') {
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemHelper.canEdit(user, item.Type)) {
|
||||||
|
|
||||||
|
if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') {
|
||||||
|
if (options.editSubtitles !== false) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: globalize.translate('sharedcomponents#EditSubtitles'),
|
name: globalize.translate('sharedcomponents#EditSubtitles'),
|
||||||
id: 'editsubtitles'
|
id: 'editsubtitles'
|
||||||
|
|
|
@ -69,6 +69,20 @@ define(['apphost'], function (appHost) {
|
||||||
return item.RunTimeTicks || item.IsFolder || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "MusicArtist";
|
return item.RunTimeTicks || item.IsFolder || item.Type == "Genre" || item.Type == "MusicGenre" || item.Type == "MusicArtist";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function canEdit(user, itemType) {
|
||||||
|
|
||||||
|
if (itemType == "UserRootFolder" || /*itemType == "CollectionFolder" ||*/ itemType == "UserView") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user.Policy.IsAdministrator) {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
getDisplayName: getDisplayName,
|
getDisplayName: getDisplayName,
|
||||||
supportsAddingToCollection: supportsAddingToCollection,
|
supportsAddingToCollection: supportsAddingToCollection,
|
||||||
|
@ -95,18 +109,11 @@ define(['apphost'], function (appHost) {
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
canEdit: function (user, itemType) {
|
canEdit: canEdit,
|
||||||
|
|
||||||
if (itemType == "UserRootFolder" || /*itemType == "CollectionFolder" ||*/ itemType == "UserView") {
|
canEditImages: function (user, itemType) {
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (user.Policy.IsAdministrator) {
|
return itemType != 'Timer' && canEdit(user, itemType);
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
canSync: function (user, item) {
|
canSync: function (user, item) {
|
||||||
|
|
52
dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.css
vendored
Normal file
52
dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.css
vendored
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
.cardOverlayTarget {
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
top: 0;
|
||||||
|
background-color: rgba(0, 0, 0, .85);
|
||||||
|
z-index: 998;
|
||||||
|
line-height: initial;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cardOverlayInner {
|
||||||
|
padding: 11px 12px 10px;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cardOverlayInner button:last-child {
|
||||||
|
margin-right: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cardOverlayInner p {
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cardOverlayMediaInfo {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 1em 0;
|
||||||
|
color: #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cardOverlayButtons {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cardOverlayButtons .fab {
|
||||||
|
background-color: #333;
|
||||||
|
margin-right: .25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (max-width: 1200px) {
|
||||||
|
|
||||||
|
.cardOverlayInner {
|
||||||
|
padding-left: 7px;
|
||||||
|
padding-right: 7px;
|
||||||
|
}
|
||||||
|
}
|
280
dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.js
vendored
Normal file
280
dashboard-ui/bower_components/emby-webcomponents/itemhovermenu/itemhovermenu.js
vendored
Normal file
|
@ -0,0 +1,280 @@
|
||||||
|
define(['connectionManager', 'itemHelper', 'mediaInfo', 'userdataButtons', 'playbackManager', 'globalize', 'css!./itemhovermenu', 'emby-button'], function (connectionManager, itemHelper, mediaInfo, userdataButtons, playbackManager, globalize) {
|
||||||
|
|
||||||
|
var preventHover = false;
|
||||||
|
var showOverlayTimeout;
|
||||||
|
var hoveringElement;
|
||||||
|
|
||||||
|
function parentWithAttribute(elem, name) {
|
||||||
|
|
||||||
|
while (!elem.getAttribute(name)) {
|
||||||
|
elem = elem.parentNode;
|
||||||
|
|
||||||
|
if (!elem || !elem.getAttribute) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onHoverOut(e) {
|
||||||
|
|
||||||
|
var elem = e.target;
|
||||||
|
|
||||||
|
if (elem != hoveringElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (showOverlayTimeout) {
|
||||||
|
clearTimeout(showOverlayTimeout);
|
||||||
|
showOverlayTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
elem = elem.querySelector('.cardOverlayTarget');
|
||||||
|
|
||||||
|
if (elem) {
|
||||||
|
slideDownToHide(elem);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function slideDownToHide(elem) {
|
||||||
|
|
||||||
|
if (elem.classList.contains('hide')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!elem.animate) {
|
||||||
|
elem.classList.add('hide');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(function () {
|
||||||
|
var keyframes = [
|
||||||
|
{ transform: 'translateY(0)', offset: 0 },
|
||||||
|
{ transform: 'translateY(100%)', offset: 1 }];
|
||||||
|
var timing = { duration: 300, iterations: 1, fill: 'forwards', easing: 'ease-out' };
|
||||||
|
|
||||||
|
elem.animate(keyframes, timing).onfinish = function () {
|
||||||
|
elem.classList.add('hide');
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function slideUpToShow(elem) {
|
||||||
|
|
||||||
|
if (!elem.classList.contains('hide')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
elem.classList.remove('hide');
|
||||||
|
|
||||||
|
if (!elem.animate) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(function () {
|
||||||
|
|
||||||
|
var keyframes = [
|
||||||
|
{ transform: 'translateY(100%)', offset: 0 },
|
||||||
|
{ transform: 'translateY(0)', offset: 1 }];
|
||||||
|
var timing = { duration: 300, iterations: 1, fill: 'forwards', easing: 'ease-out' };
|
||||||
|
elem.animate(keyframes, timing);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOverlayHtml(item, currentUser, card) {
|
||||||
|
|
||||||
|
var html = '';
|
||||||
|
|
||||||
|
html += '<div class="cardOverlayInner">';
|
||||||
|
|
||||||
|
var className = card.className.toLowerCase();
|
||||||
|
|
||||||
|
var isMiniItem = className.indexOf('mini') != -1;
|
||||||
|
var isSmallItem = isMiniItem || className.indexOf('small') != -1;
|
||||||
|
var isPortrait = className.indexOf('portrait') != -1;
|
||||||
|
|
||||||
|
var parentName = isSmallItem || isMiniItem || isPortrait ? null : item.SeriesName;
|
||||||
|
var name = itemHelper.getDisplayName(item);
|
||||||
|
|
||||||
|
html += '<div>';
|
||||||
|
var logoHeight = isSmallItem || isMiniItem ? 20 : 26;
|
||||||
|
var imgUrl;
|
||||||
|
|
||||||
|
if (parentName && item.ParentLogoItemId) {
|
||||||
|
|
||||||
|
imgUrl = ApiClient.getScaledImageUrl(item.ParentLogoItemId, {
|
||||||
|
maxHeight: logoHeight,
|
||||||
|
type: 'logo',
|
||||||
|
tag: item.ParentLogoImageTag
|
||||||
|
});
|
||||||
|
|
||||||
|
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:100%;" />';
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (item.ImageTags.Logo) {
|
||||||
|
|
||||||
|
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
||||||
|
maxHeight: logoHeight,
|
||||||
|
type: 'logo',
|
||||||
|
tag: item.ImageTags.Logo
|
||||||
|
});
|
||||||
|
|
||||||
|
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:100%;" />';
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
html += parentName || name;
|
||||||
|
}
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
if (parentName) {
|
||||||
|
html += '<p>';
|
||||||
|
html += name;
|
||||||
|
html += '</p>';
|
||||||
|
} else if (!isSmallItem && !isMiniItem) {
|
||||||
|
html += '<div class="cardOverlayMediaInfo">';
|
||||||
|
html += mediaInfo.getPrimaryMediaInfoHtml(item, {
|
||||||
|
endsAt: false
|
||||||
|
});
|
||||||
|
html += '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<div class="cardOverlayButtons">';
|
||||||
|
|
||||||
|
var buttonCount = 0;
|
||||||
|
|
||||||
|
if (playbackManager.canPlay(item)) {
|
||||||
|
|
||||||
|
html += '<button is="emby-button" class="itemAction autoSize fab mini" data-action="playmenu"><i class="md-icon"></i></button>';
|
||||||
|
buttonCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.LocalTrailerCount) {
|
||||||
|
html += '<button title="' + globalize.translate('sharedcomponents#Trailer') + '" is="emby-button" class="itemAction autoSize fab mini" data-action="playtrailer"><i class="md-icon"></i></button>';
|
||||||
|
buttonCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
html += '<button is="emby-button" class="itemAction autoSize fab mini" data-action="menu" data-playoptions="false"><i class="md-icon"></i></button>';
|
||||||
|
buttonCount++;
|
||||||
|
|
||||||
|
html += userdataButtons.getIconsHtml({
|
||||||
|
item: item,
|
||||||
|
style: 'fab-mini'
|
||||||
|
});
|
||||||
|
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
html += '</div>';
|
||||||
|
|
||||||
|
return html;
|
||||||
|
}
|
||||||
|
|
||||||
|
function parentWithClass(elem, className) {
|
||||||
|
|
||||||
|
while (!elem.classList || !elem.classList.contains(className)) {
|
||||||
|
elem = elem.parentNode;
|
||||||
|
|
||||||
|
if (!elem) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return elem;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onShowTimerExpired(elem) {
|
||||||
|
|
||||||
|
elem = elem.querySelector('a');
|
||||||
|
|
||||||
|
var innerElem = elem.querySelector('.cardOverlayTarget');
|
||||||
|
|
||||||
|
if (!innerElem) {
|
||||||
|
innerElem = document.createElement('div');
|
||||||
|
innerElem.classList.add('hide');
|
||||||
|
innerElem.classList.add('cardOverlayTarget');
|
||||||
|
parentWithClass(elem, 'cardContent').appendChild(innerElem);
|
||||||
|
}
|
||||||
|
|
||||||
|
var dataElement = parentWithAttribute(elem, 'data-id');
|
||||||
|
|
||||||
|
var id = dataElement.getAttribute('data-id');
|
||||||
|
var type = dataElement.getAttribute('data-type');
|
||||||
|
|
||||||
|
if (type == 'Timer') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var serverId = dataElement.getAttribute('data-serverid');
|
||||||
|
|
||||||
|
var apiClient = connectionManager.getApiClient(serverId);
|
||||||
|
var promise1 = apiClient.getItem(apiClient.getCurrentUserId(), id);
|
||||||
|
var promise2 = apiClient.getCurrentUser();
|
||||||
|
|
||||||
|
Promise.all([promise1, promise2]).then(function (responses) {
|
||||||
|
|
||||||
|
var item = responses[0];
|
||||||
|
var user = responses[1];
|
||||||
|
|
||||||
|
var card = elem;
|
||||||
|
|
||||||
|
elem = parentWithAttribute(elem, 'data-id');
|
||||||
|
|
||||||
|
innerElem.innerHTML = getOverlayHtml(item, user, card);
|
||||||
|
});
|
||||||
|
|
||||||
|
slideUpToShow(innerElem);
|
||||||
|
}
|
||||||
|
|
||||||
|
function onHoverIn(e) {
|
||||||
|
|
||||||
|
var elem = e.target;
|
||||||
|
|
||||||
|
if (!elem.classList.contains('cardImage')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (preventHover === true) {
|
||||||
|
preventHover = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (showOverlayTimeout) {
|
||||||
|
clearTimeout(showOverlayTimeout);
|
||||||
|
showOverlayTimeout = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
elem = parentWithAttribute(elem, 'data-id');
|
||||||
|
hoveringElement = elem;
|
||||||
|
|
||||||
|
showOverlayTimeout = setTimeout(function () {
|
||||||
|
onShowTimerExpired(elem);
|
||||||
|
|
||||||
|
}, 1200);
|
||||||
|
}
|
||||||
|
|
||||||
|
function preventTouchHover() {
|
||||||
|
preventHover = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function ItemHoverMenu(parentElement) {
|
||||||
|
|
||||||
|
this.parent = parentElement;
|
||||||
|
|
||||||
|
this.parent.addEventListener('mouseenter', onHoverIn, true);
|
||||||
|
this.parent.addEventListener('mouseleave', onHoverOut, true);
|
||||||
|
this.parent.addEventListener("touchstart", preventTouchHover);
|
||||||
|
}
|
||||||
|
|
||||||
|
ItemHoverMenu.prototype = {
|
||||||
|
|
||||||
|
constructor: ItemHoverMenu,
|
||||||
|
|
||||||
|
destroy: function () {
|
||||||
|
this.parent.removeEventListener('mouseenter', onHoverIn, true);
|
||||||
|
this.parent.removeEventListener('mouseleave', onHoverOut, true);
|
||||||
|
this.parent.removeEventListener("touchstart", preventTouchHover);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ItemHoverMenu;
|
||||||
|
});
|
|
@ -282,13 +282,21 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
if (enableSideMediaInfo) {
|
if (enableSideMediaInfo) {
|
||||||
html += '<div class="secondary listItemMediaInfo">' + mediaInfo.getPrimaryMediaInfoHtml(item) + '</div>';
|
html += '<div class="secondary listItemMediaInfo">' + mediaInfo.getPrimaryMediaInfoHtml(item, {
|
||||||
|
|
||||||
|
year: false,
|
||||||
|
container: false
|
||||||
|
|
||||||
|
}) + '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!clickEntireItem) {
|
if (!clickEntireItem) {
|
||||||
html += '<button is="paper-icon-button-light" class="menuButton autoSize"><i class="md-icon"></i></button>';
|
html += '<button is="paper-icon-button-light" class="itemAction autoSize" data-action="menu"><i class="md-icon"></i></button>';
|
||||||
html += '<span class="listViewUserDataButtons">';
|
html += '<span class="listViewUserDataButtons">';
|
||||||
html += userdataButtons.getIconsHtml(item, false);
|
html += userdataButtons.getIconsHtml({
|
||||||
|
item: item,
|
||||||
|
includePlayed: false
|
||||||
|
});
|
||||||
html += '</span>';
|
html += '</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ i.mediaInfoItem {
|
||||||
color: #CB272A;
|
color: #CB272A;
|
||||||
width: auto !important;
|
width: auto !important;
|
||||||
height: auto !important;
|
height: auto !important;
|
||||||
font-size: 120%;
|
font-size: 1.4em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.mediaInfoItem.criticRating {
|
.mediaInfoItem.criticRating {
|
||||||
|
|
|
@ -125,7 +125,7 @@ define(['datetime', 'globalize', 'embyRouter', 'material-icons', 'css!./mediainf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.ProductionYear && item.Type == "Series") {
|
if (options.year !== false && item.ProductionYear && item.Type == "Series") {
|
||||||
|
|
||||||
if (item.Status == "Continuing") {
|
if (item.Status == "Continuing") {
|
||||||
miscInfo.push(globalize.translate('sharedcomponents#ValueSeriesYearToPresent', item.ProductionYear));
|
miscInfo.push(globalize.translate('sharedcomponents#ValueSeriesYearToPresent', item.ProductionYear));
|
||||||
|
@ -237,7 +237,7 @@ define(['datetime', 'globalize', 'embyRouter', 'material-icons', 'css!./mediainf
|
||||||
miscInfo.push(item.Width + "x" + item.Height);
|
miscInfo.push(item.Width + "x" + item.Height);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.Type == 'Audio' && item.Container) {
|
if (options.container !== false && item.Type == 'Audio' && item.Container) {
|
||||||
miscInfo.push(item.Container);
|
miscInfo.push(item.Container);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
100
dashboard-ui/bower_components/emby-webcomponents/playmenu.js
vendored
Normal file
100
dashboard-ui/bower_components/emby-webcomponents/playmenu.js
vendored
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
define(['actionsheet', 'datetime', 'playbackManager', 'globalize'], function (actionsheet, datetime, playbackManager, globalize) {
|
||||||
|
|
||||||
|
function show(options) {
|
||||||
|
|
||||||
|
var item = options.item;
|
||||||
|
|
||||||
|
var itemType = item.Type;
|
||||||
|
var mediaType = item.MediaType;
|
||||||
|
var isFolder = item.IsFolder;
|
||||||
|
var itemId = item.Id;
|
||||||
|
var serverId = item.ServerId;
|
||||||
|
var resumePositionTicks = item.UserData ? item.UserData.PlaybackPositionTicks : null;
|
||||||
|
|
||||||
|
if (!resumePositionTicks && mediaType != "Audio" && !isFolder) {
|
||||||
|
playbackManager.play({
|
||||||
|
items: [item]
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var menuItems = [];
|
||||||
|
|
||||||
|
if (resumePositionTicks) {
|
||||||
|
menuItems.push({
|
||||||
|
name: globalize.translate('sharedcomponents#ResumeAt', datetime.getDisplayRunningTime(resumePositionTicks)),
|
||||||
|
id: 'resume'
|
||||||
|
});
|
||||||
|
|
||||||
|
menuItems.push({
|
||||||
|
name: globalize.translate('sharedcomponents#PlayFromBeginning'),
|
||||||
|
id: 'play'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
menuItems.push({
|
||||||
|
name: globalize.translate('sharedcomponents#Play'),
|
||||||
|
id: 'play'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (playbackManager.canQueueMediaType(mediaType)) {
|
||||||
|
menuItems.push({
|
||||||
|
name: globalize.translate('sharedcomponents#Queue'),
|
||||||
|
id: 'queue'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (itemType == "Audio" || itemType == "MusicAlbum" || itemType == "MusicArtist" || itemType == "MusicGenre") {
|
||||||
|
menuItems.push({
|
||||||
|
name: globalize.translate('sharedcomponents#InstantMix'),
|
||||||
|
id: 'instantmix'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isFolder || itemType == "MusicArtist" || itemType == "MusicGenre") {
|
||||||
|
menuItems.push({
|
||||||
|
name: globalize.translate('sharedcomponents#Shuffle'),
|
||||||
|
id: 'shuffle'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
actionsheet.show({
|
||||||
|
|
||||||
|
items: menuItems,
|
||||||
|
positionTo: options.positionTo
|
||||||
|
|
||||||
|
}).then(function (id) {
|
||||||
|
switch (id) {
|
||||||
|
|
||||||
|
case 'play':
|
||||||
|
playbackManager.play({
|
||||||
|
ids: [itemId],
|
||||||
|
serverId: item.ServerId
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 'resume':
|
||||||
|
playbackManager.play({
|
||||||
|
ids: [itemId],
|
||||||
|
startPositionTicks: resumePositionTicks,
|
||||||
|
serverId: item.ServerId
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case 'queue':
|
||||||
|
playbackManager.queue(item);
|
||||||
|
break;
|
||||||
|
case 'instantmix':
|
||||||
|
playbackManager.instantMix(item);
|
||||||
|
break;
|
||||||
|
case 'shuffle':
|
||||||
|
playbackManager.shuffle(item);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
show: show
|
||||||
|
};
|
||||||
|
});
|
|
@ -90,7 +90,85 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
|
||||||
embyRouter.showItem(options);
|
embyRouter.showItem(options);
|
||||||
}
|
}
|
||||||
|
|
||||||
function executeAction(card, action) {
|
function getItem(button) {
|
||||||
|
|
||||||
|
button = parentWithAttribute(button, 'data-id');
|
||||||
|
var serverId = button.getAttribute('data-serverid');
|
||||||
|
var id = button.getAttribute('data-id');
|
||||||
|
var type = button.getAttribute('data-type');
|
||||||
|
|
||||||
|
var apiClient = connectionManager.getApiClient(serverId);
|
||||||
|
|
||||||
|
if (type == 'Timer') {
|
||||||
|
return apiClient.getLiveTvTimer(id);
|
||||||
|
}
|
||||||
|
return apiClient.getItem(apiClient.getCurrentUserId(), id);
|
||||||
|
}
|
||||||
|
|
||||||
|
function showContextMenu(card, options) {
|
||||||
|
|
||||||
|
getItem(card).then(function (item) {
|
||||||
|
|
||||||
|
var itemsContainer = options.itemsContainer || parentWithAttribute(card, 'is', 'emby-itemscontainer');
|
||||||
|
|
||||||
|
var playlistId = itemsContainer ? itemsContainer.getAttribute('data-playlistid') : null;
|
||||||
|
var collectionId = itemsContainer ? itemsContainer.getAttribute('data-collectionid') : null;
|
||||||
|
|
||||||
|
if (playlistId) {
|
||||||
|
var elem = parentWithAttribute(card, 'data-playlistitemid');
|
||||||
|
item.PlaylistItemId = elem ? elem.getAttribute('data-playlistitemid') : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
require(['itemContextMenu'], function (itemContextMenu) {
|
||||||
|
|
||||||
|
itemContextMenu.show(Object.assign({
|
||||||
|
item: item,
|
||||||
|
play: true,
|
||||||
|
queue: true,
|
||||||
|
playAllFromHere: !item.IsFolder,
|
||||||
|
queueAllFromHere: !item.IsFolder,
|
||||||
|
identify: false,
|
||||||
|
playlistId: playlistId,
|
||||||
|
collectionId: collectionId
|
||||||
|
|
||||||
|
}, options || {})).then(function (result) {
|
||||||
|
|
||||||
|
if (result.command == 'playallfromhere' || result.command == 'queueallfromhere') {
|
||||||
|
executeAction(card, options.positionTo, result.command);
|
||||||
|
}
|
||||||
|
else if (result.command == 'removefromplaylist' || result.command == 'removefromcollection') {
|
||||||
|
|
||||||
|
if (itemsContainer) {
|
||||||
|
itemsContainer.dispatchEvent(new CustomEvent('needsrefresh', {
|
||||||
|
detail: {},
|
||||||
|
cancelable: false,
|
||||||
|
bubbles: true
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function showPlayMenu(card, target) {
|
||||||
|
|
||||||
|
getItem(card).then(function (item) {
|
||||||
|
|
||||||
|
require(['playMenu'], function (playMenu) {
|
||||||
|
|
||||||
|
playMenu.show({
|
||||||
|
|
||||||
|
item: item,
|
||||||
|
positionTo: target
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function executeAction(card, target, action) {
|
||||||
|
|
||||||
|
target = target || card;
|
||||||
|
|
||||||
var id = card.getAttribute('data-id');
|
var id = card.getAttribute('data-id');
|
||||||
|
|
||||||
|
@ -142,6 +220,56 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
|
||||||
else if (action == 'record') {
|
else if (action == 'record') {
|
||||||
onRecordCommand(serverId, id, type, card.getAttribute('data-timerid'), card.getAttribute('data-seriestimerid'));
|
onRecordCommand(serverId, id, type, card.getAttribute('data-timerid'), card.getAttribute('data-seriestimerid'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if (action == 'menu') {
|
||||||
|
|
||||||
|
var options = target.getAttribute('data-playoptions') == 'false' ?
|
||||||
|
{
|
||||||
|
shuffle: false,
|
||||||
|
instantMix: false,
|
||||||
|
play: false,
|
||||||
|
playAllFromHere: false,
|
||||||
|
queue: false,
|
||||||
|
queueAllFromHere: false
|
||||||
|
} :
|
||||||
|
{};
|
||||||
|
|
||||||
|
options.identify = false;
|
||||||
|
options.positionTo = target;
|
||||||
|
|
||||||
|
showContextMenu(card, options);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (action == 'playmenu') {
|
||||||
|
showPlayMenu(card, target);
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (action == 'edit') {
|
||||||
|
getItem(target).then(function (item) {
|
||||||
|
editItem(item, serverId);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function editItem(item, serverId) {
|
||||||
|
|
||||||
|
var apiClient = connectionManager.getApiClient(serverId);
|
||||||
|
|
||||||
|
return new Promise(function (resolve, reject) {
|
||||||
|
|
||||||
|
if (item.Type == 'Timer') {
|
||||||
|
require(['recordingEditor'], function (recordingEditor) {
|
||||||
|
|
||||||
|
var serverId = apiClient.serverInfo().Id;
|
||||||
|
recordingEditor.show(item.Id, serverId).then(resolve, reject);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
require(['components/metadataeditor/metadataeditor'], function (metadataeditor) {
|
||||||
|
|
||||||
|
metadataeditor.show(item.Id).then(resolve, reject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRecordCommand(serverId, id, type, timerId, seriesTimerId) {
|
function onRecordCommand(serverId, id, type, timerId, seriesTimerId) {
|
||||||
|
@ -221,6 +349,7 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
|
||||||
}
|
}
|
||||||
|
|
||||||
function onClick(e) {
|
function onClick(e) {
|
||||||
|
|
||||||
var card = parentWithClass(e.target, 'itemAction');
|
var card = parentWithClass(e.target, 'itemAction');
|
||||||
|
|
||||||
if (card) {
|
if (card) {
|
||||||
|
@ -234,17 +363,21 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action) {
|
if (action) {
|
||||||
executeAction(card, action);
|
executeAction(card, actionElement, action);
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
e.stopPropagation();
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function parentWithAttribute(elem, name) {
|
function parentWithAttribute(elem, name, value) {
|
||||||
|
|
||||||
while (!elem.getAttribute(name)) {
|
while ((value ? elem.getAttribute(name) != value : !elem.getAttribute(name))) {
|
||||||
elem = elem.parentNode;
|
elem = elem.parentNode;
|
||||||
|
|
||||||
if (!elem) {
|
if (!elem || !elem.getAttribute) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -268,29 +401,43 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
|
||||||
function onCommand(e) {
|
function onCommand(e) {
|
||||||
var cmd = e.detail.command;
|
var cmd = e.detail.command;
|
||||||
|
|
||||||
if (cmd == 'play' || cmd == 'record') {
|
if (cmd == 'play' || cmd == 'record' || cmd == 'menu' || cmd == 'info') {
|
||||||
var card = parentWithClass(e.target, 'itemAction');
|
var card = parentWithClass(e.target, 'itemAction');
|
||||||
|
|
||||||
if (card) {
|
if (card) {
|
||||||
executeAction(card, cmd);
|
executeAction(card, card, cmd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function on(context) {
|
function on(context, options) {
|
||||||
context.addEventListener('click', onClick);
|
|
||||||
inputManager.on(context, onCommand);
|
options = options || {};
|
||||||
|
|
||||||
|
if (options.click !== false) {
|
||||||
|
context.addEventListener('click', onClick);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.command !== false) {
|
||||||
|
inputManager.on(context, onCommand);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function off(context) {
|
function off(context, options) {
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
context.removeEventListener('click', onClick);
|
context.removeEventListener('click', onClick);
|
||||||
inputManager.off(context, onCommand);
|
|
||||||
|
if (options.command !== false) {
|
||||||
|
inputManager.off(context, onCommand);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
on: on,
|
on: on,
|
||||||
off: off,
|
off: off,
|
||||||
execute: executeAction
|
onClick: onClick,
|
||||||
|
showContextMenu: showContextMenu
|
||||||
};
|
};
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Special - {0}",
|
"ValueSpecialEpisodeName": "Special - {0}",
|
||||||
"Share": "Del",
|
"Share": "Del",
|
||||||
"ServerUpdateNeeded": "Denne Emby server b\u00f8r opdateres. For at downloade den nyeste version bes\u00f8g venligst {0}",
|
"ServerUpdateNeeded": "Denne Emby server b\u00f8r opdateres. For at downloade den nyeste version bes\u00f8g venligst {0}",
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Special - {0}",
|
"ValueSpecialEpisodeName": "Special - {0}",
|
||||||
"Share": "Teilen",
|
"Share": "Teilen",
|
||||||
"ServerUpdateNeeded": "Dieser Emby Server sollte aktualisiert werden. Um die neueste Version zu laden, besuche bitte {0}",
|
"ServerUpdateNeeded": "Dieser Emby Server sollte aktualisiert werden. Um die neueste Version zu laden, besuche bitte {0}",
|
||||||
|
|
|
@ -112,5 +112,8 @@
|
||||||
"ViewArtist": "View Artist",
|
"ViewArtist": "View Artist",
|
||||||
"QueueAllFromHere": "Queue All from Here",
|
"QueueAllFromHere": "Queue All from Here",
|
||||||
"PlayAllFromHere": "Play All from Here",
|
"PlayAllFromHere": "Play All from Here",
|
||||||
"RemoveFromPlaylist": "Remove from Playlist"
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"Trailer": "Trailer"
|
||||||
}
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Especial - {0}",
|
"ValueSpecialEpisodeName": "Especial - {0}",
|
||||||
"Share": "Compartir",
|
"Share": "Compartir",
|
||||||
"ServerUpdateNeeded": "Este Servidor Emby necesita ser actualizado. Para descargar la ultima versi\u00f3n, por favor visite {0}",
|
"ServerUpdateNeeded": "Este Servidor Emby necesita ser actualizado. Para descargar la ultima versi\u00f3n, por favor visite {0}",
|
||||||
|
|
118
dashboard-ui/bower_components/emby-webcomponents/strings/fr.json
vendored
Normal file
118
dashboard-ui/bower_components/emby-webcomponents/strings/fr.json
vendored
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
{
|
||||||
|
"EditInfo": "Modifier les informations",
|
||||||
|
"RemoveFromPlaylist": "Supprimer de la liste de lecture",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
|
"ValueSpecialEpisodeName": "Sp\u00e9cial - {0}",
|
||||||
|
"Share": "Partager",
|
||||||
|
"ServerUpdateNeeded": "Le serveur Emby doit \u00eatre mis \u00e0 jour. Pour t\u00e9l\u00e9charger la derni\u00e8re version, veuillez visiter {0}",
|
||||||
|
"LiveTvGuideRequiresUnlock": "Le Guide TV en direct est actuellement limit\u00e9 \u00e0 {0} cha\u00eenes. Cliquez sur le bouton d\u00e9verrouiller pour d\u00e9couvrir comment profiter de l'ensemble.",
|
||||||
|
"AttributeNew": "Nouveau",
|
||||||
|
"AttributePremiere": "Premiere",
|
||||||
|
"AttributeLive": "Direct",
|
||||||
|
"TrackCount": "{0} pistes",
|
||||||
|
"ItemCount": "{0} \u00e9l\u00e9ments",
|
||||||
|
"ValueSeriesYearToPresent": "{0}-Pr\u00e9sent",
|
||||||
|
"ReleaseYearValue": "Ann\u00e9e de sortie: {0}",
|
||||||
|
"OriginalAirDateValue": "Date de diffusion originale: {0}",
|
||||||
|
"EndsAtValue": "Se termine \u00e0 {0}",
|
||||||
|
"OptionSundayShort": "Dim",
|
||||||
|
"OptionMondayShort": "Lun",
|
||||||
|
"OptionTuesdayShort": "Mar",
|
||||||
|
"OptionWednesdayShort": "Mer",
|
||||||
|
"OptionThursdayShort": "Jeu",
|
||||||
|
"OptionFridayShort": "Ven",
|
||||||
|
"OptionSaturdayShort": "Sam",
|
||||||
|
"HeaderSelectDate": "S\u00e9lectionnez la date",
|
||||||
|
"ButtonOk": "Ok",
|
||||||
|
"ButtonCancel": "Annuler",
|
||||||
|
"ButtonGotIt": "Compris",
|
||||||
|
"RecordingCancelled": "Enregistrement annul\u00e9.",
|
||||||
|
"RecordingScheduled": "Enregistrement planifi\u00e9.",
|
||||||
|
"SeriesRecordingScheduled": "Enregistrement de la s\u00e9rie pr\u00e9vue.",
|
||||||
|
"HeaderNewRecording": "Nouvel enregistrement",
|
||||||
|
"Sunday": "Dimanche",
|
||||||
|
"Monday": "Lundi",
|
||||||
|
"Tuesday": "Mardi",
|
||||||
|
"Wednesday": "Mercredi",
|
||||||
|
"Thursday": "Jeudi",
|
||||||
|
"Friday": "Vendredi",
|
||||||
|
"Saturday": "Samedi",
|
||||||
|
"Days": "Jours",
|
||||||
|
"RecordSeries": "Enregistrer s\u00e9ries",
|
||||||
|
"LabelPrePaddingMinutes": "D\u00e9lai avant l'enregistrement en minutes:",
|
||||||
|
"LabelPostPaddingMinutes": "D\u00e9lai apr\u00e8s l'enregistrement en minutes:",
|
||||||
|
"RecordOnAllChannels": "Enregistrer sur toutes les cha\u00eenes",
|
||||||
|
"RecordAnytime": "Enregistrer \u00e0 n'importe quelle heure\/journ\u00e9e",
|
||||||
|
"RecordOnlyNewEpisodes": "Enregistrer seulement les nouveaux \u00e9pisodes",
|
||||||
|
"HeaderBecomeProjectSupporter": "Obtenez Emby Premiere",
|
||||||
|
"HeaderEnjoyDayTrial": "Profitez d'une p\u00e9riode d'essai de 14 jours",
|
||||||
|
"MessageActiveSubscriptionRequiredSeriesRecordings": "Une souscription Emby Premiere active est n\u00e9cessaire pour cr\u00e9er des enregistrements automatiques de s\u00e9ries.",
|
||||||
|
"OptionConvertRecordingsToStreamingFormat": "Convertir automatiquement les enregistrements a un format facilement diffusable.",
|
||||||
|
"OptionConvertRecordingsToStreamingFormatHelp": "Les enregistrements seront convertis \u00e0 la vol\u00e9e en MP4 afin faciliter la lecture sur tous vos appareils.",
|
||||||
|
"FeatureRequiresEmbyPremiere": "Cette fonctionnalit\u00e9 requiert un compte Emby Premiere.",
|
||||||
|
"Record": "Enregistrer",
|
||||||
|
"Save": "Sauvegarder",
|
||||||
|
"Edit": "Modifier",
|
||||||
|
"Download": "T\u00e9l\u00e9chargement",
|
||||||
|
"Advanced": "Avanc\u00e9",
|
||||||
|
"Delete": "Supprimer",
|
||||||
|
"HeaderDeleteItem": "Supprimer l'\u00e9l\u00e9ment",
|
||||||
|
"ConfirmDeleteItem": "Supprimer cet \u00e9l\u00e9ment l'effacera \u00e0 la fois du syst\u00e8me de fichiers et de votre biblioth\u00e8que de medias. Etes-vous s\u00fbr de vouloir continuer ?",
|
||||||
|
"Refresh": "Actualiser",
|
||||||
|
"RefreshQueued": "Demande d'actualisation en file d'attente.",
|
||||||
|
"AddToCollection": "Ajouter \u00e0 la collection",
|
||||||
|
"NewCollection": "Nouvelle collection",
|
||||||
|
"LabelCollection": "Collection:",
|
||||||
|
"Help": "Aide",
|
||||||
|
"NewCollectionHelp": "Les Collections vous permettent de cr\u00e9er des groupes personnalis\u00e9s de films et autres contenus.",
|
||||||
|
"SearchForCollectionInternetMetadata": "Rechercher sur Internet les images et m\u00e9tadonn\u00e9es",
|
||||||
|
"LabelName": "Nom:",
|
||||||
|
"NewCollectionNameExample": "Exemple: Collection Star Wars",
|
||||||
|
"MessageItemsAdded": " \u00c9l\u00e9ments ajout\u00e9s.",
|
||||||
|
"OptionNew": "Nouveau...",
|
||||||
|
"LabelPlaylist": "Liste de lecture:",
|
||||||
|
"AddToPlaylist": "Ajouter \u00e0 la liste de lecture",
|
||||||
|
"Subtitles": "Sous-titres",
|
||||||
|
"SearchForSubtitles": "Rechercher des sous-titres",
|
||||||
|
"LabelLanguage": "Langue:",
|
||||||
|
"Search": "Recherche",
|
||||||
|
"NoSubtitleSearchResultsFound": "Aucun appareil trouv\u00e9",
|
||||||
|
"File": "Fichier",
|
||||||
|
"MessageAreYouSureDeleteSubtitles": "\u00cates-vous s\u00fbr de vouloir supprimer ce fichier sous-titres ?",
|
||||||
|
"ConfirmDeletion": "Confirmer la suppression",
|
||||||
|
"MySubtitles": "Mes Sous-titres",
|
||||||
|
"MessageDownloadQueued": "T\u00e9l\u00e9charger en file d'attente.",
|
||||||
|
"EditSubtitles": "Modifier les sous-titres",
|
||||||
|
"UnlockGuide": "D\u00e9verrouiller le Guide",
|
||||||
|
"RefreshMetadata": "Actualiser les m\u00e9tadonn\u00e9es",
|
||||||
|
"ReplaceExistingImages": "Remplacer les images existantes",
|
||||||
|
"ReplaceAllMetadata": "Remplacer toutes les m\u00e9tadonn\u00e9es",
|
||||||
|
"SearchForMissingMetadata": "Rechercher les m\u00e9tadonn\u00e9es manquantes",
|
||||||
|
"LabelRefreshMode": "Mode de rafra\u00eechissement:",
|
||||||
|
"NoItemsFound": "Aucun \u00e9l\u00e9ment trouv\u00e9.",
|
||||||
|
"HeaderSaySomethingLike": "Dites quelque chose...",
|
||||||
|
"ButtonTryAgain": "Veuillez r\u00e9essayer",
|
||||||
|
"HeaderYouSaid": "Vous avez dit...",
|
||||||
|
"MessageWeDidntRecognizeCommand": "D\u00e9sol\u00e9, cette commande n'a pas \u00e9t\u00e9 reconnue.",
|
||||||
|
"MessageIfYouBlockedVoice": "Si vous avez supprim\u00e9 l'acc\u00e8s par commande vocale \u00e0 l'application, vous devrez reconfigurer avant de r\u00e9essayer.",
|
||||||
|
"ValueDiscNumber": "Disque {0}",
|
||||||
|
"Unrated": "Non not\u00e9",
|
||||||
|
"Favorite": "Favoris",
|
||||||
|
"Like": "J'aime",
|
||||||
|
"Dislike": "Je n'aime pas",
|
||||||
|
"Played": "Lu",
|
||||||
|
"RefreshDialogHelp": "Les m\u00e9tadonn\u00e9es sont actualis\u00e9es en fonction des param\u00e8tres et des services internet qui sont activ\u00e9s dans le tableau de bord Emby Server.",
|
||||||
|
"Open": "Ouvrir",
|
||||||
|
"Play": "Lire",
|
||||||
|
"Queue": "File d'attente",
|
||||||
|
"Shuffle": "Lecture al\u00e9atoire",
|
||||||
|
"Identify": "Identifier",
|
||||||
|
"EditImages": "Modifier les images",
|
||||||
|
"Sync": "Sync",
|
||||||
|
"InstantMix": "Mix instantan\u00e9",
|
||||||
|
"ViewAlbum": "Voir l'album",
|
||||||
|
"ViewArtist": "Voir l'artiste",
|
||||||
|
"QueueAllFromHere": "Tout mette en file d'attente \u00e0 partir d'ici",
|
||||||
|
"PlayAllFromHere": "Tout lire \u00e0 partir d'ici"
|
||||||
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "\u0410\u0440\u043d\u0430\u0439\u044b - {0}",
|
"ValueSpecialEpisodeName": "\u0410\u0440\u043d\u0430\u0439\u044b - {0}",
|
||||||
"Share": "\u041e\u0440\u0442\u0430\u049b\u0442\u0430\u0441\u0443",
|
"Share": "\u041e\u0440\u0442\u0430\u049b\u0442\u0430\u0441\u0443",
|
||||||
"ServerUpdateNeeded": "\u041e\u0441\u044b Emby Server \u0436\u0430\u04a3\u0430\u0440\u0442\u044b\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442. \u0421\u043e\u04a3\u0493\u044b \u043d\u04b1\u0441\u049b\u0430\u0441\u044b\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443 \u04af\u0448\u0456\u043d, {0} \u043a\u0456\u0440\u0456\u04a3\u0456\u0437",
|
"ServerUpdateNeeded": "\u041e\u0441\u044b Emby Server \u0436\u0430\u04a3\u0430\u0440\u0442\u044b\u043b\u0443\u044b \u049b\u0430\u0436\u0435\u0442. \u0421\u043e\u04a3\u0493\u044b \u043d\u04b1\u0441\u049b\u0430\u0441\u044b\u043d \u0436\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443 \u04af\u0448\u0456\u043d, {0} \u043a\u0456\u0440\u0456\u04a3\u0456\u0437",
|
||||||
|
@ -92,23 +96,23 @@
|
||||||
"HeaderYouSaid": "\u0421\u0456\u0437 \u0430\u0439\u0442\u049b\u0430\u043d\u044b\u04a3\u044b\u0437...",
|
"HeaderYouSaid": "\u0421\u0456\u0437 \u0430\u0439\u0442\u049b\u0430\u043d\u044b\u04a3\u044b\u0437...",
|
||||||
"MessageWeDidntRecognizeCommand": "\u041e\u0441\u044b\u043d\u0434\u0430\u0439 \u043f\u04d9\u0440\u043c\u0435\u043d\u0434\u0456 \u0442\u0430\u043d\u044b\u043f \u0430\u0439\u044b\u0440\u043c\u0430\u0434\u044b\u049b.",
|
"MessageWeDidntRecognizeCommand": "\u041e\u0441\u044b\u043d\u0434\u0430\u0439 \u043f\u04d9\u0440\u043c\u0435\u043d\u0434\u0456 \u0442\u0430\u043d\u044b\u043f \u0430\u0439\u044b\u0440\u043c\u0430\u0434\u044b\u049b.",
|
||||||
"MessageIfYouBlockedVoice": "\u0415\u0433\u0435\u0440 \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u0493\u0430 \u0434\u0430\u0443\u044b\u0441\u0442\u044b\u049b \u049b\u0430\u0442\u044b\u043d\u0430\u0443\u044b\u04a3\u044b\u0437 \u0431\u0430\u0441 \u0442\u0430\u0440\u0442\u044b\u043b\u0441\u0430, \u049b\u0430\u0439\u0442\u0430 \u04d9\u0440\u0435\u043a\u0435\u0442\u0442\u0435\u043d\u0443\u0456\u04a3\u0456\u0437\u0434\u0435\u043d \u0430\u043b\u0434\u044b\u043d\u0430\u043d \u049b\u0430\u0439\u0442\u0430 \u0442\u0435\u04a3\u0448\u0435\u0443\u0456\u04a3\u0456\u0437 \u049b\u0430\u0436\u0435\u0442 \u0431\u043e\u043b\u0430\u0434\u044b.",
|
"MessageIfYouBlockedVoice": "\u0415\u0433\u0435\u0440 \u049b\u043e\u043b\u0434\u0430\u043d\u0431\u0430\u0493\u0430 \u0434\u0430\u0443\u044b\u0441\u0442\u044b\u049b \u049b\u0430\u0442\u044b\u043d\u0430\u0443\u044b\u04a3\u044b\u0437 \u0431\u0430\u0441 \u0442\u0430\u0440\u0442\u044b\u043b\u0441\u0430, \u049b\u0430\u0439\u0442\u0430 \u04d9\u0440\u0435\u043a\u0435\u0442\u0442\u0435\u043d\u0443\u0456\u04a3\u0456\u0437\u0434\u0435\u043d \u0430\u043b\u0434\u044b\u043d\u0430\u043d \u049b\u0430\u0439\u0442\u0430 \u0442\u0435\u04a3\u0448\u0435\u0443\u0456\u04a3\u0456\u0437 \u049b\u0430\u0436\u0435\u0442 \u0431\u043e\u043b\u0430\u0434\u044b.",
|
||||||
"ValueDiscNumber": "Disc {0}",
|
"ValueDiscNumber": "{0}-\u0434\u0438\u0441\u043a\u0456",
|
||||||
"Unrated": "Unrated",
|
"Unrated": "\u0411\u0430\u0493\u0430\u043b\u0430\u043d\u0431\u0430\u0493\u0430\u043d",
|
||||||
"Favorite": "Favorite",
|
"Favorite": "\u0422\u0430\u04a3\u0434\u0430\u0443\u043b\u044b",
|
||||||
"Like": "Like",
|
"Like": "\u04b0\u043d\u0430\u0439\u0434\u044b",
|
||||||
"Dislike": "Dislike",
|
"Dislike": "\u04b0\u043d\u0430\u043c\u0430\u0439\u0434\u044b",
|
||||||
"Played": "Played",
|
"Played": "\u041e\u0439\u043d\u0430\u0442\u044b\u043b\u0493\u0430\u043d",
|
||||||
"RefreshDialogHelp": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440 \u043c\u0435\u043d Emby Server \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d\u0434\u0430 \u049b\u043e\u0441\u044b\u043b\u0493\u0430\u043d \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u049b\u044b\u0437\u043c\u0435\u0442\u0442\u0435\u0440\u0456 \u043d\u0435\u0433\u0456\u0437\u0456\u043d\u0434\u0435 \u0436\u0430\u04a3\u0493\u044b\u0440\u0442\u044b\u043b\u0430\u0434\u044b.",
|
"RefreshDialogHelp": "\u041c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043b\u0435\u0440 \u043c\u0435\u043d Emby Server \u0431\u0430\u049b\u044b\u043b\u0430\u0443 \u0442\u0430\u049b\u0442\u0430\u0441\u044b\u043d\u0434\u0430 \u049b\u043e\u0441\u044b\u043b\u0493\u0430\u043d \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u049b\u044b\u0437\u043c\u0435\u0442\u0442\u0435\u0440\u0456 \u043d\u0435\u0433\u0456\u0437\u0456\u043d\u0434\u0435 \u0436\u0430\u04a3\u0493\u044b\u0440\u0442\u044b\u043b\u0430\u0434\u044b.",
|
||||||
"Open": "Open",
|
"Open": "\u0410\u0448\u0443",
|
||||||
"Play": "Play",
|
"Play": "\u041e\u0439\u043d\u0430\u0442\u0443",
|
||||||
"Queue": "Queue",
|
"Queue": "\u041a\u0435\u0437\u0435\u043a",
|
||||||
"Shuffle": "Shuffle",
|
"Shuffle": "\u0410\u0440\u0430\u043b\u0430\u0441\u0442\u044b\u0440\u0443",
|
||||||
"Identify": "Identify",
|
"Identify": "\u0410\u043d\u044b\u049b\u0442\u0430\u0443",
|
||||||
"EditImages": "Edit Images",
|
"EditImages": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u04e9\u04a3\u0434\u0435\u0443",
|
||||||
"Sync": "Sync",
|
"Sync": "\u04ae\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0443",
|
||||||
"InstantMix": "Instant Mix",
|
"InstantMix": "\u041b\u0435\u0437\u0434\u0456\u043a \u049b\u043e\u0441\u043f\u0430",
|
||||||
"ViewAlbum": "View Album",
|
"ViewAlbum": "\u0410\u043b\u044c\u0431\u043e\u043c\u0434\u044b \u049b\u0430\u0440\u0430\u0443",
|
||||||
"ViewArtist": "View Artist",
|
"ViewArtist": "\u041e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b\u043d\u044b \u049b\u0430\u0440\u0430\u0443",
|
||||||
"QueueAllFromHere": "Queue All from Here",
|
"QueueAllFromHere": "\u0411\u04b1\u043b \u0430\u0440\u0430\u0434\u0430\u043d \u0431\u04d9\u0440\u0456\u043d \u043a\u0435\u0437\u0435\u043a\u043a\u0435",
|
||||||
"PlayAllFromHere": "Play All from Here"
|
"PlayAllFromHere": "\u0411\u04b1\u043b \u0430\u0440\u0430\u0434\u0430\u043d \u0431\u04d9\u0440\u0456\u043d \u043e\u0439\u043d\u0430\u0442\u0443"
|
||||||
}
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Spesial - {0}",
|
"ValueSpecialEpisodeName": "Spesial - {0}",
|
||||||
"Share": "Del",
|
"Share": "Del",
|
||||||
"ServerUpdateNeeded": "Denne Emby serveren trenger en oppdatering. For \u00e5 laste ned nyeste versjon, vennligst bes\u00f8k: {0}",
|
"ServerUpdateNeeded": "Denne Emby serveren trenger en oppdatering. For \u00e5 laste ned nyeste versjon, vennligst bes\u00f8k: {0}",
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Info Bewerken",
|
||||||
|
"RemoveFromPlaylist": "Verwijderen uit afspeellijst",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Speciaal - {0}",
|
"ValueSpecialEpisodeName": "Speciaal - {0}",
|
||||||
"Share": "Delen",
|
"Share": "Delen",
|
||||||
"ServerUpdateNeeded": "Deze Emby Server moet worden bijgewerkt. Om de laatste versie te downloaden, gaat u naar {0}",
|
"ServerUpdateNeeded": "Deze Emby Server moet worden bijgewerkt. Om de laatste versie te downloaden, gaat u naar {0}",
|
||||||
|
@ -92,23 +96,23 @@
|
||||||
"HeaderYouSaid": "U zei...",
|
"HeaderYouSaid": "U zei...",
|
||||||
"MessageWeDidntRecognizeCommand": "Sorry, dat commando herkennen we niet.",
|
"MessageWeDidntRecognizeCommand": "Sorry, dat commando herkennen we niet.",
|
||||||
"MessageIfYouBlockedVoice": "Als u spraak toegang uitgeschakeld heeft moet u dit opnieuw configureren voordat u verder gaat.",
|
"MessageIfYouBlockedVoice": "Als u spraak toegang uitgeschakeld heeft moet u dit opnieuw configureren voordat u verder gaat.",
|
||||||
"ValueDiscNumber": "Disc {0}",
|
"ValueDiscNumber": "Schijf {0}",
|
||||||
"Unrated": "Unrated",
|
"Unrated": "Geen rating",
|
||||||
"Favorite": "Favorite",
|
"Favorite": "Favoriet",
|
||||||
"Like": "Like",
|
"Like": "Leuk",
|
||||||
"Dislike": "Dislike",
|
"Dislike": "Niet leuk",
|
||||||
"Played": "Played",
|
"Played": "Afgespeeld",
|
||||||
"RefreshDialogHelp": "Metadata wordt vernieuwd op basis van de instellingen en internet diensten die zijn ingeschakeld in het dashboard van de Emby Server.",
|
"RefreshDialogHelp": "Metadata wordt vernieuwd op basis van de instellingen en internet diensten die zijn ingeschakeld in het dashboard van de Emby Server.",
|
||||||
"Open": "Open",
|
"Open": "Openen",
|
||||||
"Play": "Play",
|
"Play": "Afspelen",
|
||||||
"Queue": "Queue",
|
"Queue": "Wachtrij",
|
||||||
"Shuffle": "Shuffle",
|
"Shuffle": "Willekeurig",
|
||||||
"Identify": "Identify",
|
"Identify": "Identificeer",
|
||||||
"EditImages": "Edit Images",
|
"EditImages": "Bewerk afbeeldingen",
|
||||||
"Sync": "Sync",
|
"Sync": "Synchronisatie",
|
||||||
"InstantMix": "Instant Mix",
|
"InstantMix": "Instant Mix",
|
||||||
"ViewAlbum": "View Album",
|
"ViewAlbum": "Bekijk album",
|
||||||
"ViewArtist": "View Artist",
|
"ViewArtist": "Bekijk artiest",
|
||||||
"QueueAllFromHere": "Queue All from Here",
|
"QueueAllFromHere": "Plaats alles in de wachtrij vanaf hier",
|
||||||
"PlayAllFromHere": "Play All from Here"
|
"PlayAllFromHere": "Speel alles vanaf hier"
|
||||||
}
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Editar Informa\u00e7\u00f5es",
|
||||||
|
"RemoveFromPlaylist": "Remover da Lista de Reprodu\u00e7\u00e3o",
|
||||||
|
"PlayFromBeginning": "Reproduzir do in\u00edcio",
|
||||||
|
"ResumeAt": "Retomar de {0}",
|
||||||
"ValueSpecialEpisodeName": "Especial - {0}",
|
"ValueSpecialEpisodeName": "Especial - {0}",
|
||||||
"Share": "Compartilhar",
|
"Share": "Compartilhar",
|
||||||
"ServerUpdateNeeded": "Este servidor Emby precisa ser atualizado. Para baixar a \u00faltima vers\u00e3o, por favor visite {0}",
|
"ServerUpdateNeeded": "Este servidor Emby precisa ser atualizado. Para baixar a \u00faltima vers\u00e3o, por favor visite {0}",
|
||||||
|
@ -86,29 +90,29 @@
|
||||||
"ReplaceAllMetadata": "Substituir todos os metadados",
|
"ReplaceAllMetadata": "Substituir todos os metadados",
|
||||||
"SearchForMissingMetadata": "Buscar por metadados que faltam",
|
"SearchForMissingMetadata": "Buscar por metadados que faltam",
|
||||||
"LabelRefreshMode": "Mode de atualiza\u00e7\u00e3o:",
|
"LabelRefreshMode": "Mode de atualiza\u00e7\u00e3o:",
|
||||||
"NoItemsFound": "No items found.",
|
"NoItemsFound": "Nenhum item encontrado.",
|
||||||
"HeaderSaySomethingLike": "Say Something Like...",
|
"HeaderSaySomethingLike": "Diga algo como...",
|
||||||
"ButtonTryAgain": "Try Again",
|
"ButtonTryAgain": "Tente Novamente",
|
||||||
"HeaderYouSaid": "You Said...",
|
"HeaderYouSaid": "Voc\u00ea disse...",
|
||||||
"MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.",
|
"MessageWeDidntRecognizeCommand": "Desculpe-nos, n\u00e3o foi poss\u00edvel reconhecer este comando.",
|
||||||
"MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.",
|
"MessageIfYouBlockedVoice": "Se voc\u00ea negou acessos de voz ao app voc\u00ea precisar\u00e1 reconfigurar antes de tentar novamente.",
|
||||||
"ValueDiscNumber": "Disc {0}",
|
"ValueDiscNumber": "Disco {0}",
|
||||||
"Unrated": "Unrated",
|
"Unrated": "Sem classifica\u00e7\u00e3o",
|
||||||
"Favorite": "Favorite",
|
"Favorite": "Favorito",
|
||||||
"Like": "Like",
|
"Like": "Gostei",
|
||||||
"Dislike": "Dislike",
|
"Dislike": "N\u00e3o Gostei",
|
||||||
"Played": "Played",
|
"Played": "Reproduzido",
|
||||||
"RefreshDialogHelp": "Os metadados s\u00e3o atualizados com bases nas defini\u00e7\u00f5es e nos servi\u00e7os de internet que est\u00e3o ativos no painel do Servidor Emby.",
|
"RefreshDialogHelp": "Os metadados s\u00e3o atualizados com bases nas defini\u00e7\u00f5es e nos servi\u00e7os de internet que est\u00e3o ativos no painel do Servidor Emby.",
|
||||||
"Open": "Open",
|
"Open": "Abrir",
|
||||||
"Play": "Play",
|
"Play": "Reproduzir",
|
||||||
"Queue": "Queue",
|
"Queue": "Enfileirar",
|
||||||
"Shuffle": "Shuffle",
|
"Shuffle": "Embaralhar",
|
||||||
"Identify": "Identify",
|
"Identify": "Identificar",
|
||||||
"EditImages": "Edit Images",
|
"EditImages": "Editar Imagens",
|
||||||
"Sync": "Sync",
|
"Sync": "Sincronizar",
|
||||||
"InstantMix": "Instant Mix",
|
"InstantMix": "Mix Instant\u00e2neo",
|
||||||
"ViewAlbum": "View Album",
|
"ViewAlbum": "Visualizar \u00c1lbum",
|
||||||
"ViewArtist": "View Artist",
|
"ViewArtist": "Visualizar Artista",
|
||||||
"QueueAllFromHere": "Queue All from Here",
|
"QueueAllFromHere": "Enfileirar todos daqui",
|
||||||
"PlayAllFromHere": "Play All from Here"
|
"PlayAllFromHere": "Reproduzir todos daqui"
|
||||||
}
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Especial - {0}",
|
"ValueSpecialEpisodeName": "Especial - {0}",
|
||||||
"Share": "Partilhar",
|
"Share": "Partilhar",
|
||||||
"ServerUpdateNeeded": "Este Servidor Emby precisa ser atualizado. Para fazer download da vers\u00e3o mais recente, por favor visite {0}",
|
"ServerUpdateNeeded": "Este Servidor Emby precisa ser atualizado. Para fazer download da vers\u00e3o mais recente, por favor visite {0}",
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "\u0421\u043f\u0435\u0446\u044d\u043f\u0438\u0437\u043e\u0434 - {0}",
|
"ValueSpecialEpisodeName": "\u0421\u043f\u0435\u0446\u044d\u043f\u0438\u0437\u043e\u0434 - {0}",
|
||||||
"Share": "\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f",
|
"Share": "\u041f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f",
|
||||||
"ServerUpdateNeeded": "\u0414\u0430\u043d\u043d\u044b\u0439 Emby Server \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 {0}",
|
"ServerUpdateNeeded": "\u0414\u0430\u043d\u043d\u044b\u0439 Emby Server \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c. \u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435 {0}",
|
||||||
|
@ -92,23 +96,23 @@
|
||||||
"HeaderYouSaid": "\u0412\u044b \u0441\u043a\u0430\u0437\u0430\u043b\u0438...",
|
"HeaderYouSaid": "\u0412\u044b \u0441\u043a\u0430\u0437\u0430\u043b\u0438...",
|
||||||
"MessageWeDidntRecognizeCommand": "\u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430.",
|
"MessageWeDidntRecognizeCommand": "\u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0430.",
|
||||||
"MessageIfYouBlockedVoice": "\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u043f\u0435\u0440\u0435\u0434 \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430.",
|
"MessageIfYouBlockedVoice": "\u0415\u0441\u043b\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e, \u043f\u0435\u0440\u0435\u0434 \u043d\u043e\u0432\u043e\u0439 \u043f\u043e\u043f\u044b\u0442\u043a\u043e\u0439 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430.",
|
||||||
"ValueDiscNumber": "Disc {0}",
|
"ValueDiscNumber": "\u0414\u0438\u0441\u043a {0}",
|
||||||
"Unrated": "Unrated",
|
"Unrated": "\u0411\u0435\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438",
|
||||||
"Favorite": "Favorite",
|
"Favorite": "\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435",
|
||||||
"Like": "Like",
|
"Like": "\u041d\u0440\u0430\u0432\u0438\u0442\u0441\u044f",
|
||||||
"Dislike": "Dislike",
|
"Dislike": "\u041d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f",
|
||||||
"Played": "Played",
|
"Played": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0435",
|
||||||
"RefreshDialogHelp": "\u041f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u0438\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u0438 Emby Server \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0443\u0441\u043b\u0443\u0433\u0430\u043c\u0438.",
|
"RefreshDialogHelp": "\u041f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u0432 \u0438\u043d\u0444\u043e\u043f\u0430\u043d\u0435\u043b\u0438 Emby Server \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0443\u0441\u043b\u0443\u0433\u0430\u043c\u0438.",
|
||||||
"Open": "Open",
|
"Open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c",
|
||||||
"Play": "Play",
|
"Play": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438",
|
||||||
"Queue": "Queue",
|
"Queue": "\u041e\u0447\u0435\u0440\u0435\u0434\u044c",
|
||||||
"Shuffle": "Shuffle",
|
"Shuffle": "\u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c",
|
||||||
"Identify": "Identify",
|
"Identify": "\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c",
|
||||||
"EditImages": "Edit Images",
|
"EditImages": "\u041f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438",
|
||||||
"Sync": "Sync",
|
"Sync": "\u0421\u0438\u043d\u0445\u0440\u043e",
|
||||||
"InstantMix": "Instant Mix",
|
"InstantMix": "\u0410\u0432\u0442\u043e\u043c\u0438\u043a\u0441",
|
||||||
"ViewAlbum": "View Album",
|
"ViewAlbum": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u043b\u044c\u0431\u043e\u043c",
|
||||||
"ViewArtist": "View Artist",
|
"ViewArtist": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044f",
|
||||||
"QueueAllFromHere": "Queue All from Here",
|
"QueueAllFromHere": "\u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u0441\u0435 \u043e\u0442\u0441\u044e\u0434\u0430",
|
||||||
"PlayAllFromHere": "Play All from Here"
|
"PlayAllFromHere": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u043e\u0442\u0441\u044e\u0434\u0430"
|
||||||
}
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Specialavsnitt - {0}",
|
"ValueSpecialEpisodeName": "Specialavsnitt - {0}",
|
||||||
"Share": "Dela",
|
"Share": "Dela",
|
||||||
"ServerUpdateNeeded": "Den h\u00e4r Emby servern beh\u00f6ver uppdateras. F\u00f6r att ladda ner senaste versionen, g\u00e5 till {0}",
|
"ServerUpdateNeeded": "Den h\u00e4r Emby servern beh\u00f6ver uppdateras. F\u00f6r att ladda ner senaste versionen, g\u00e5 till {0}",
|
||||||
|
@ -92,23 +96,23 @@
|
||||||
"HeaderYouSaid": "Du sa...",
|
"HeaderYouSaid": "Du sa...",
|
||||||
"MessageWeDidntRecognizeCommand": "Ledsen, men vi k\u00e4nner inte igen det kommandot.",
|
"MessageWeDidntRecognizeCommand": "Ledsen, men vi k\u00e4nner inte igen det kommandot.",
|
||||||
"MessageIfYouBlockedVoice": "Om du nekade tillg\u00e5ng f\u00f6r r\u00f6st\u00e5tkomst till appen s\u00e5 beh\u00f6ver du konfigurera om innan du f\u00f6rs\u00f6ker igen.",
|
"MessageIfYouBlockedVoice": "Om du nekade tillg\u00e5ng f\u00f6r r\u00f6st\u00e5tkomst till appen s\u00e5 beh\u00f6ver du konfigurera om innan du f\u00f6rs\u00f6ker igen.",
|
||||||
"ValueDiscNumber": "Disc {0}",
|
"ValueDiscNumber": "Skiva {0}",
|
||||||
"Unrated": "Unrated",
|
"Unrated": "Ej klassad",
|
||||||
"Favorite": "Favorite",
|
"Favorite": "Favorit",
|
||||||
"Like": "Like",
|
"Like": "Gilla",
|
||||||
"Dislike": "Dislike",
|
"Dislike": "Ogilla",
|
||||||
"Played": "Played",
|
"Played": "Visad",
|
||||||
"RefreshDialogHelp": "Metadata uppdateras baserat p\u00e5 inst\u00e4llningar och internettj\u00e4nster som har aktiverats under Emby servers kontrollpanel.",
|
"RefreshDialogHelp": "Metadata uppdateras baserat p\u00e5 inst\u00e4llningar och internettj\u00e4nster som har aktiverats under Emby servers kontrollpanel.",
|
||||||
"Open": "Open",
|
"Open": "\u00d6ppna",
|
||||||
"Play": "Play",
|
"Play": "Spela",
|
||||||
"Queue": "Queue",
|
"Queue": "K\u00f6a",
|
||||||
"Shuffle": "Shuffle",
|
"Shuffle": "Blanda",
|
||||||
"Identify": "Identify",
|
"Identify": "Identifiera",
|
||||||
"EditImages": "Edit Images",
|
"EditImages": "\u00c4ndra bilder",
|
||||||
"Sync": "Sync",
|
"Sync": "Synk",
|
||||||
"InstantMix": "Instant Mix",
|
"InstantMix": "Instant mix",
|
||||||
"ViewAlbum": "View Album",
|
"ViewAlbum": "Bl\u00e4ddra album",
|
||||||
"ViewArtist": "View Artist",
|
"ViewArtist": "Bl\u00e4ddra artist",
|
||||||
"QueueAllFromHere": "Queue All from Here",
|
"QueueAllFromHere": "K\u00f6a alla h\u00e4rifr\u00e5n",
|
||||||
"PlayAllFromHere": "Play All from Here"
|
"PlayAllFromHere": "Spela upp alla h\u00e4rifr\u00e5n"
|
||||||
}
|
}
|
|
@ -1,4 +1,8 @@
|
||||||
{
|
{
|
||||||
|
"EditInfo": "Edit Info",
|
||||||
|
"RemoveFromPlaylist": "Remove from Playlist",
|
||||||
|
"PlayFromBeginning": "Play from beginning",
|
||||||
|
"ResumeAt": "Resume from {0}",
|
||||||
"ValueSpecialEpisodeName": "Special - {0}",
|
"ValueSpecialEpisodeName": "Special - {0}",
|
||||||
"Share": "\u5206\u4eab",
|
"Share": "\u5206\u4eab",
|
||||||
"ServerUpdateNeeded": "\u6b64Emby\u4f3a\u670d\u5668\u9700\u8981\u66f4\u65b0\uff0c\u8acb\u81f3{0}\u53d6\u5f97\u6700\u65b0\u7248\u672c",
|
"ServerUpdateNeeded": "\u6b64Emby\u4f3a\u670d\u5668\u9700\u8981\u66f4\u65b0\uff0c\u8acb\u81f3{0}\u53d6\u5f97\u6700\u65b0\u7248\u672c",
|
||||||
|
|
|
@ -2,10 +2,17 @@ define(['connectionManager', 'globalize', 'paper-icon-button-light', 'material-i
|
||||||
|
|
||||||
function getUserDataButtonHtml(method, itemId, iconCssClass, icon, tooltip, style) {
|
function getUserDataButtonHtml(method, itemId, iconCssClass, icon, tooltip, style) {
|
||||||
|
|
||||||
|
if (style == 'fab-mini') {
|
||||||
|
style = 'fab';
|
||||||
|
iconCssClass = iconCssClass ? (iconCssClass + ' mini') : 'mini';
|
||||||
|
}
|
||||||
|
|
||||||
var is = style == 'fab' ? 'emby-button' : 'paper-icon-button-light';
|
var is = style == 'fab' ? 'emby-button' : 'paper-icon-button-light';
|
||||||
var className = style == 'fab' ? 'autoSize fab' : 'autoSize';
|
var className = style == 'fab' ? 'autoSize fab' : 'autoSize';
|
||||||
|
|
||||||
className += ' ' + iconCssClass;
|
if (iconCssClass) {
|
||||||
|
className += ' ' + iconCssClass;
|
||||||
|
}
|
||||||
|
|
||||||
return '<button title="' + tooltip + '" data-itemid="' + itemId + '" is="' + is + '" class="' + className + '" onclick="UserDataButtons.' + method + '(this);return false;">\
|
return '<button title="' + tooltip + '" data-itemid="' + itemId + '" is="' + is + '" class="' + className + '" onclick="UserDataButtons.' + method + '(this);return false;">\
|
||||||
<i class="md-icon">' + icon + '</i>\
|
<i class="md-icon">' + icon + '</i>\
|
||||||
|
@ -14,12 +21,17 @@ define(['connectionManager', 'globalize', 'paper-icon-button-light', 'material-i
|
||||||
|
|
||||||
function fill(options) {
|
function fill(options) {
|
||||||
|
|
||||||
var html = getIconsHtml(options.item, options.includePlayed, options.buttonClass, options.style);
|
var html = getIconsHtml(options);
|
||||||
|
|
||||||
options.element.innerHTML = html;
|
options.element.innerHTML = html;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getIconsHtml(item, includePlayed, cssClass, style) {
|
function getIconsHtml(options) {
|
||||||
|
|
||||||
|
var item = options.item;
|
||||||
|
var includePlayed = options.includePlayed;
|
||||||
|
var cssClass = options.cssClass;
|
||||||
|
var style = options.style;
|
||||||
|
|
||||||
var html = '';
|
var html = '';
|
||||||
|
|
||||||
|
@ -47,8 +59,8 @@ define(['connectionManager', 'globalize', 'paper-icon-button-light', 'material-i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var tooltipLike = globalize.translate('sharedcomponents#Like');
|
//var tooltipLike = globalize.translate('sharedcomponents#Like');
|
||||||
var tooltipDislike = globalize.translate('sharedcomponents#Dislike');
|
//var tooltipDislike = globalize.translate('sharedcomponents#Dislike');
|
||||||
|
|
||||||
//if (typeof userData.Likes == "undefined") {
|
//if (typeof userData.Likes == "undefined") {
|
||||||
// html += getUserDataButtonHtml('markDislike', itemId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike);
|
// html += getUserDataButtonHtml('markDislike', itemId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike);
|
||||||
|
|
|
@ -23,15 +23,14 @@
|
||||||
"spec"
|
"spec"
|
||||||
],
|
],
|
||||||
"homepage": "https://github.com/Valve/fingerprintjs2",
|
"homepage": "https://github.com/Valve/fingerprintjs2",
|
||||||
"version": "1.4.0",
|
"version": "1.4.1",
|
||||||
"_release": "1.4.0",
|
"_release": "1.4.1",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "1.4.0",
|
"tag": "1.4.1",
|
||||||
"commit": "75cbd474158f8ecce43e00f198c76e486b896937"
|
"commit": "6320cfa19c89aca0eb39e811d101336a2812ad61"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/Valve/fingerprintjs2.git",
|
"_source": "https://github.com/Valve/fingerprintjs2.git",
|
||||||
"_target": "^1.4.0",
|
"_target": "^1.4.0",
|
||||||
"_originalSource": "fingerprintjs2",
|
"_originalSource": "fingerprintjs2"
|
||||||
"_direct": true
|
|
||||||
}
|
}
|
File diff suppressed because one or more lines are too long
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Fingerprintjs2 1.4.0 - Modern & flexible browser fingerprint library v2
|
* Fingerprintjs2 1.4.1 - Modern & flexible browser fingerprint library v2
|
||||||
* https://github.com/Valve/fingerprintjs2
|
* https://github.com/Valve/fingerprintjs2
|
||||||
* Copyright (c) 2015 Valentin Vasilyev (valentin.vasilyev@outlook.com)
|
* Copyright (c) 2015 Valentin Vasilyev (valentin.vasilyev@outlook.com)
|
||||||
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
|
* Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
|
||||||
|
@ -58,7 +58,8 @@
|
||||||
swfContainerId: "fingerprintjs2",
|
swfContainerId: "fingerprintjs2",
|
||||||
swfPath: "flash/compiled/FontList.swf",
|
swfPath: "flash/compiled/FontList.swf",
|
||||||
detectScreenOrientation: true,
|
detectScreenOrientation: true,
|
||||||
sortPluginsFor: [/palemoon/i]
|
sortPluginsFor: [/palemoon/i],
|
||||||
|
userDefinedFonts: []
|
||||||
};
|
};
|
||||||
this.options = this.extend(options, defaultOptions);
|
this.options = this.extend(options, defaultOptions);
|
||||||
this.nativeForEach = Array.prototype.forEach;
|
this.nativeForEach = Array.prototype.forEach;
|
||||||
|
@ -395,6 +396,8 @@
|
||||||
fontList = fontList.concat(extendedFontList);
|
fontList = fontList.concat(extendedFontList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fontList = fontList.concat(that.options.userDefinedFonts);
|
||||||
|
|
||||||
//we use m or w because these two characters take up the maximum width.
|
//we use m or w because these two characters take up the maximum width.
|
||||||
// And we use a LLi so that the same matching fonts can get separated
|
// And we use a LLi so that the same matching fonts can get separated
|
||||||
var testString = "mmmmmmmmmmlli";
|
var testString = "mmmmmmmmmmlli";
|
||||||
|
@ -1283,6 +1286,6 @@
|
||||||
return ("00000000" + (h1[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h1[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (h2[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h2[1] >>> 0).toString(16)).slice(-8);
|
return ("00000000" + (h1[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h1[1] >>> 0).toString(16)).slice(-8) + ("00000000" + (h2[0] >>> 0).toString(16)).slice(-8) + ("00000000" + (h2[1] >>> 0).toString(16)).slice(-8);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Fingerprint2.VERSION = "1.4.0";
|
Fingerprint2.VERSION = "1.4.1";
|
||||||
return Fingerprint2;
|
return Fingerprint2;
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "fingerprintjs2",
|
"name": "fingerprintjs2",
|
||||||
"version": "1.4.0",
|
"version": "1.4.1",
|
||||||
"description": "Modern & flexible browser fingerprinting library",
|
"description": "Modern & flexible browser fingerprinting library",
|
||||||
"main": "dist/fingerprint2.min.js",
|
"main": "dist/fingerprint2.min.js",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
|
|
@ -6,6 +6,6 @@
|
||||||
<div class="listTopPaging">
|
<div class="listTopPaging">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -10,7 +10,7 @@
|
||||||
<div class="pageTabContent ehsContent" id="channelsTab" data-index="1">
|
<div class="pageTabContent ehsContent" id="channelsTab" data-index="1">
|
||||||
<div class="viewSettings">
|
<div class="viewSettings">
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer" style="text-align:center;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
|
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return browserInfo.mobile && AppInfo.enableAppLayouts;
|
return browserInfo.mobile && AppInfo.enableAppLayouts;
|
||||||
|
@ -83,9 +83,9 @@
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="itemsContainer hiddenScrollX">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
|
|
||||||
html += libraryBrowser.getPosterViewHtml({
|
html += libraryBrowser.getPosterViewHtml({
|
||||||
|
@ -109,7 +109,6 @@
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
libraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -285,6 +285,8 @@
|
||||||
item: currentItem,
|
item: currentItem,
|
||||||
positionTo: button,
|
positionTo: button,
|
||||||
edit: false,
|
edit: false,
|
||||||
|
editImages: true,
|
||||||
|
editSubtitles: true,
|
||||||
sync: false,
|
sync: false,
|
||||||
share: false
|
share: false
|
||||||
|
|
||||||
|
|
|
@ -769,9 +769,6 @@
|
||||||
});
|
});
|
||||||
|
|
||||||
Events.on(MediaController, 'playerchange', onPlayerChange);
|
Events.on(MediaController, 'playerchange', onPlayerChange);
|
||||||
|
|
||||||
libraryBrowser.createCardMenus(context.querySelector('.itemsContainer'));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function onDialogClosed(e) {
|
function onDialogClosed(e) {
|
||||||
|
|
|
@ -25,31 +25,6 @@
|
||||||
font-weight: 400 !important;
|
font-weight: 400 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cardOverlayTarget {
|
|
||||||
position: absolute;
|
|
||||||
right: 0;
|
|
||||||
left: 0;
|
|
||||||
bottom: 0;
|
|
||||||
top: 0;
|
|
||||||
background-color: rgba(0, 0, 0, .85);
|
|
||||||
z-index: 998;
|
|
||||||
line-height: initial;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardOverlayInner {
|
|
||||||
padding: 11px 12px 10px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardOverlayInner button:last-child {
|
|
||||||
margin-right: 0 !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardOverlayInner p {
|
|
||||||
white-space: nowrap;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttonCard:hover .cardBox {
|
.buttonCard:hover .cardBox {
|
||||||
opacity: .6;
|
opacity: .6;
|
||||||
}
|
}
|
||||||
|
@ -237,10 +212,6 @@
|
||||||
font-size: 115%;
|
font-size: 115%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cardOverlayInner {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
|
|
||||||
.cardTextCentered {
|
.cardTextCentered {
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
@ -360,14 +331,6 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (max-width: 1200px) {
|
|
||||||
|
|
||||||
.portraitCard .cardOverlayInner {
|
|
||||||
padding-left: 7px;
|
|
||||||
padding-right: 7px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (min-width: 500px) {
|
@media all and (min-width: 500px) {
|
||||||
|
|
||||||
.smallBackdropCard {
|
.smallBackdropCard {
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
<span>${ButtonSync}</span>
|
<span>${ButtonSync}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="nextUpItems" class="itemsContainer">
|
<div is="emby-itemscontainer" id="nextUpItems" class="itemsContainer">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="noNextUpItems hide">${NoNextUpItemsMessage}</p>
|
<p class="noNextUpItems hide">${NoNextUpItemsMessage}</p>
|
||||||
|
|
|
@ -74,14 +74,14 @@
|
||||||
<h1>
|
<h1>
|
||||||
${HeaderNextUp}
|
${HeaderNextUp}
|
||||||
</h1>
|
</h1>
|
||||||
<div class="smallItemsContainer nextUpItems"></div>
|
<div is="emby-itemscontainer" class="smallItemsContainer nextUpItems"></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="childrenCollapsible" class="hide detailSection">
|
<div id="childrenCollapsible" class="hide detailSection">
|
||||||
<h1 class="childrenSectionHeader">
|
<h1 class="childrenSectionHeader">
|
||||||
<span id="childrenTitle"></span>
|
<span id="childrenTitle"></span>
|
||||||
</h1>
|
</h1>
|
||||||
<div id="childrenContent">
|
<div id="childrenContent">
|
||||||
<div is="emby-itemscontainer" class="childrenItemsContainer itemsContainer noautoinit" style="text-align:left;"></div>
|
<div is="emby-itemscontainer" class="childrenItemsContainer itemsContainer" style="text-align:left;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="additionalPartsCollapsible" class="detailSection hide">
|
<div id="additionalPartsCollapsible" class="detailSection hide">
|
||||||
|
|
|
@ -12,12 +12,12 @@
|
||||||
<div class="is-active pageTabContent ehsContent" id="suggestionsTab" data-index="0">
|
<div class="is-active pageTabContent ehsContent" id="suggestionsTab" data-index="0">
|
||||||
<div id="activePrograms" class="homePageSection">
|
<div id="activePrograms" class="homePageSection">
|
||||||
<h1 class="listHeader">${HeaderWhatsOnTV}</h1>
|
<h1 class="listHeader">${HeaderWhatsOnTV}</h1>
|
||||||
<div class="activeProgramItems itemsContainer noautoinit"></div>
|
<div is="emby-itemscontainer" class="activeProgramItems itemsContainer"></div>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
<div id="upcomingPrograms" class="homePageSection" style="margin-top: 1em;">
|
<div id="upcomingPrograms" class="homePageSection" style="margin-top: 1em;">
|
||||||
<h1 class="listHeader">${HeaderUpcomingPrograms}</h1>
|
<h1 class="listHeader">${HeaderUpcomingPrograms}</h1>
|
||||||
<div class="upcomingProgramItems itemsContainer noautoinit"></div>
|
<div is="emby-itemscontainer" class="upcomingProgramItems itemsContainer"></div>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
<div id="upcomingTvMovies" class="homePageSection" style="margin-top: 1em;">
|
<div id="upcomingTvMovies" class="homePageSection" style="margin-top: 1em;">
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
<h1 class="listHeader" style="display: inline-block; vertical-align: middle;">${HeaderUpcomingMovies}</h1>
|
<h1 class="listHeader" style="display: inline-block; vertical-align: middle;">${HeaderUpcomingMovies}</h1>
|
||||||
<a href="livetvitems.html?type=movies" class="clearLink" style="margin-left: 1em; vertical-align: middle;"><button is="emby-button" type="button" class="raised more mini noIcon">${ButtonMoreItems}</button></a>
|
<a href="livetvitems.html?type=movies" class="clearLink" style="margin-left: 1em; vertical-align: middle;"><button is="emby-button" type="button" class="raised more mini noIcon">${ButtonMoreItems}</button></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="upcomingTvMovieItems itemsContainer noautoinit"></div>
|
<div is="emby-itemscontainer" class="upcomingTvMovieItems itemsContainer"></div>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
<div id="upcomingSports" class="homePageSection" style="margin-top: 1em;">
|
<div id="upcomingSports" class="homePageSection" style="margin-top: 1em;">
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
<h1 class="listHeader" style="display: inline-block; vertical-align: middle;">${HeaderUpcomingSports}</h1>
|
<h1 class="listHeader" style="display: inline-block; vertical-align: middle;">${HeaderUpcomingSports}</h1>
|
||||||
<a href="livetvitems.html?type=sports" class="clearLink" style="margin-left: 1em; vertical-align: middle;"><button is="emby-button" type="button" class="raised more mini noIcon">${ButtonMoreItems}</button></a>
|
<a href="livetvitems.html?type=sports" class="clearLink" style="margin-left: 1em; vertical-align: middle;"><button is="emby-button" type="button" class="raised more mini noIcon">${ButtonMoreItems}</button></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="upcomingSportsItems itemsContainer noautoinit"></div>
|
<div is="emby-itemscontainer" class="upcomingSportsItems itemsContainer"></div>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
<div id="upcomingKids" class="homePageSection" style="margin-top: 1em;">
|
<div id="upcomingKids" class="homePageSection" style="margin-top: 1em;">
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
<h1 class="listHeader" style="display: inline-block; vertical-align: middle;">${HeaderUpcomingForKids}</h1>
|
<h1 class="listHeader" style="display: inline-block; vertical-align: middle;">${HeaderUpcomingForKids}</h1>
|
||||||
<a href="livetvitems.html?type=kids" class="clearLink" style="margin-left: 1em; vertical-align: middle;"><button is="emby-button" type="button" class="raised more mini noIcon">${ButtonMoreItems}</button></a>
|
<a href="livetvitems.html?type=kids" class="clearLink" style="margin-left: 1em; vertical-align: middle;"><button is="emby-button" type="button" class="raised more mini noIcon">${ButtonMoreItems}</button></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="upcomingKidsItems itemsContainer noautoinit"></div>
|
<div is="emby-itemscontainer" class="upcomingKidsItems itemsContainer"></div>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -52,12 +52,12 @@
|
||||||
<div class="paging"></div>
|
<div class="paging"></div>
|
||||||
<button is="paper-icon-button-light" class="btnFilter autoSize" title="${ButtonFilter}"><i class="md-icon">filter_list</i></button>
|
<button is="paper-icon-button-light" class="btnFilter autoSize" title="${ButtonFilter}"><i class="md-icon">filter_list</i></button>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pageTabContent ehsContent" id="recordingsTab" data-index="3">
|
<div class="pageTabContent ehsContent" id="recordingsTab" data-index="3">
|
||||||
<div id="activeRecordings" class="homePageSection hide">
|
<div id="activeRecordings" class="homePageSection hide">
|
||||||
<h1 class="listHeader">${HeaderActiveRecordings}</h1>
|
<h1 class="listHeader">${HeaderActiveRecordings}</h1>
|
||||||
<div class="recordingItems itemsContainer"></div>
|
<div is="emby-itemscontainer" class="recordingItems itemsContainer"></div>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
<div id="latestRecordings" class="homePageSection hide">
|
<div id="latestRecordings" class="homePageSection hide">
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
<span>${ButtonSync}</span>
|
<span>${ButtonSync}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="recordingItems itemsContainer"></div>
|
<div is="emby-itemscontainer" class="recordingItems itemsContainer"></div>
|
||||||
<br />
|
<br />
|
||||||
</div>
|
</div>
|
||||||
<div id="upcomingRecordings" class="homePageSection hide">
|
<div id="upcomingRecordings" class="homePageSection hide">
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="viewSettings">
|
<div class="viewSettings">
|
||||||
<div class="listTopPaging"></div>
|
<div class="listTopPaging"></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
|
@ -20,7 +20,7 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="resumableItems" class="itemsContainer noautoinit">
|
<div is="emby-itemscontainer" id="resumableItems" class="itemsContainer">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="recentlyAddedItems" class="itemsContainer noautoinit">
|
<div is="emby-itemscontainer" id="recentlyAddedItems" class="itemsContainer">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -98,14 +98,14 @@
|
||||||
<div style="text-align: center; display: flex; align-items: center; justify-content: center;">
|
<div style="text-align: center; display: flex; align-items: center; justify-content: center;">
|
||||||
<button is="paper-icon-button-light" class="btnSelectView autoSize" title="${ButtonSelectView}"><i class="md-icon">view_comfy</i></button>
|
<button is="paper-icon-button-light" class="btnSelectView autoSize" title="${ButtonSelectView}"><i class="md-icon">view_comfy</i></button>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pageTabContent ehsContent" id="studiosTab" data-index="5">
|
<div class="pageTabContent ehsContent" id="studiosTab" data-index="5">
|
||||||
<div class="viewSettings">
|
<div class="viewSettings">
|
||||||
<div class="listTopPaging">
|
<div class="listTopPaging">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer" style="text-align: center;"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer" style="text-align: center;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
|
@ -15,28 +15,28 @@
|
||||||
<div class="homePageSection">
|
<div class="homePageSection">
|
||||||
<h1 class="listHeader">${HeaderLatestMusic}</h1>
|
<h1 class="listHeader">${HeaderLatestMusic}</h1>
|
||||||
|
|
||||||
<div id="recentlyAddedSongs" class="itemsContainer noautoinit" style="text-align:left;">
|
<div is="emby-itemscontainer" id="recentlyAddedSongs" class="itemsContainer" style="text-align:left;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="playlists" class="homePageSection hide">
|
<div id="playlists" class="homePageSection hide">
|
||||||
<h1 class="listHeader">${HeaderPlaylists}</h1>
|
<h1 class="listHeader">${HeaderPlaylists}</h1>
|
||||||
|
|
||||||
<div class="itemsContainer noautoinit" style="text-align:left;">
|
<div is="emby-itemscontainer" class="itemsContainer" style="text-align:left;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="recentlyPlayed" class="homePageSection hide">
|
<div id="recentlyPlayed" class="homePageSection hide">
|
||||||
<h1 class="listHeader">${HeaderRecentlyPlayed}</h1>
|
<h1 class="listHeader">${HeaderRecentlyPlayed}</h1>
|
||||||
|
|
||||||
<div id="recentlyPlayedSongs" class="itemsContainer noautoinit" style="text-align:left;">
|
<div is="emby-itemscontainer" id="recentlyPlayedSongs" class="itemsContainer" style="text-align:left;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="topPlayed" class="homePageSection hide">
|
<div id="topPlayed" class="homePageSection hide">
|
||||||
<h1 class="listHeader">${HeaderFrequentlyPlayed}</h1>
|
<h1 class="listHeader">${HeaderFrequentlyPlayed}</h1>
|
||||||
|
|
||||||
<div id="topPlayedSongs" class="itemsContainer noautoinit" style="text-align: left;">
|
<div is="emby-itemscontainer" id="topPlayedSongs" class="itemsContainer" style="text-align: left;">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -108,14 +108,14 @@
|
||||||
<div style="text-align: center; display: flex; align-items: center; justify-content: center;">
|
<div style="text-align: center; display: flex; align-items: center; justify-content: center;">
|
||||||
<button is="paper-icon-button-light" class="btnSelectView autoSize" title="${ButtonSelectView}"><i class="md-icon">view_comfy</i></button>
|
<button is="paper-icon-button-light" class="btnSelectView autoSize" title="${ButtonSelectView}"><i class="md-icon">view_comfy</i></button>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pageTabContent pageTabContent ehsContent" id="foldersTab" data-index="6">
|
<div class="pageTabContent pageTabContent ehsContent" id="foldersTab" data-index="6">
|
||||||
<div style="text-align: center; display: flex; flex-wrap: wrap; align-items: center; justify-content: center;padding:.7em .5em;">
|
<div style="text-align: center; display: flex; flex-wrap: wrap; align-items: center; justify-content: center;padding:.7em .5em;">
|
||||||
<div class="paging"></div>
|
<div class="paging"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="itemsContainer itemsContainerWithAlphaPicker">
|
<div is="emby-itemscontainer" class="itemsContainer itemsContainerWithAlphaPicker">
|
||||||
</div>
|
</div>
|
||||||
<div style="text-align: center; display: flex; flex-wrap: wrap; align-items: center; justify-content: center;padding:.7em .5em;">
|
<div style="text-align: center; display: flex; flex-wrap: wrap; align-items: center; justify-content: center;padding:.7em .5em;">
|
||||||
<div class="paging"></div>
|
<div class="paging"></div>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['jQuery'], function ($) {
|
define(['jQuery', 'emby-itemscontainer'], function ($) {
|
||||||
|
|
||||||
var data = {};
|
var data = {};
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser'], function (libraryBrowser) {
|
define(['libraryBrowser', 'emby-itemscontainer'], function (libraryBrowser) {
|
||||||
|
|
||||||
// The base query options
|
// The base query options
|
||||||
var query = {
|
var query = {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define([], function () {
|
define(['emby-itemscontainer'], function () {
|
||||||
|
|
||||||
function getNextUpPromise() {
|
function getNextUpPromise() {
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['datetime', 'scrollStyles'], function (datetime) {
|
define(['datetime', 'emby-itemscontainer', 'scrollStyles'], function (datetime) {
|
||||||
|
|
||||||
function getUpcomingPromise() {
|
function getUpcomingPromise() {
|
||||||
|
|
||||||
|
@ -100,9 +100,9 @@
|
||||||
html += '<h1 class="listHeader">' + group.name + '</h1>';
|
html += '<h1 class="listHeader">' + group.name + '</h1>';
|
||||||
|
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="itemsContainer hiddenScrollX">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
|
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
@ -124,7 +124,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
}
|
}
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
|
|
@ -256,7 +256,6 @@
|
||||||
var itemsContainer = element.querySelector('.itemsContainer');
|
var itemsContainer = element.querySelector('.itemsContainer');
|
||||||
itemsContainer.innerHTML = html;
|
itemsContainer.innerHTML = html;
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(itemsContainer);
|
|
||||||
ImageLoader.lazyChildren(itemsContainer);
|
ImageLoader.lazyChildren(itemsContainer);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -345,7 +345,6 @@
|
||||||
|
|
||||||
itemsContainer.innerHTML = html;
|
itemsContainer.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(itemsContainer);
|
ImageLoader.lazyChildren(itemsContainer);
|
||||||
LibraryBrowser.createCardMenus(itemsContainer);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -765,9 +764,9 @@
|
||||||
var html = '';
|
var html = '';
|
||||||
|
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="hiddenScrollX itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -787,7 +786,6 @@
|
||||||
var similarContent = page.querySelector('#similarContent');
|
var similarContent = page.querySelector('#similarContent');
|
||||||
similarContent.innerHTML = html;
|
similarContent.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(similarContent);
|
ImageLoader.lazyChildren(similarContent);
|
||||||
LibraryBrowser.createCardMenus(similarContent);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1006,8 +1004,6 @@
|
||||||
elem.classList.remove('hiddenScrollX');
|
elem.classList.remove('hiddenScrollX');
|
||||||
}
|
}
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
|
|
||||||
if (item.Type == "BoxSet") {
|
if (item.Type == "BoxSet") {
|
||||||
|
|
||||||
var collectionItemTypes = [
|
var collectionItemTypes = [
|
||||||
|
@ -1112,11 +1108,6 @@
|
||||||
if (!items.length) {
|
if (!items.length) {
|
||||||
renderCollectionItemType(page, parentItem, { name: Globalize.translate('HeaderItems') }, items);
|
renderCollectionItemType(page, parentItem, { name: Globalize.translate('HeaderItems') }, items);
|
||||||
}
|
}
|
||||||
|
|
||||||
var containers = page.querySelectorAll('.collectionItems .itemsContainer');
|
|
||||||
for (i = 0, length = containers.length; i < length; i++) {
|
|
||||||
LibraryBrowser.createCardMenus(containers[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function renderCollectionItemType(page, parentItem, type, items) {
|
function renderCollectionItemType(page, parentItem, type, items) {
|
||||||
|
@ -1993,27 +1984,31 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function showPlayMenu(item, target) {
|
||||||
|
|
||||||
|
require(['playMenu'], function (playMenu) {
|
||||||
|
|
||||||
|
playMenu.show({
|
||||||
|
|
||||||
|
item: item,
|
||||||
|
positionTo: target
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function playCurrentItem(button) {
|
function playCurrentItem(button) {
|
||||||
|
|
||||||
if (currentItem.Type == 'Program') {
|
if (currentItem.Type == 'Program') {
|
||||||
|
|
||||||
ApiClient.getLiveTvChannel(currentItem.ChannelId, Dashboard.getCurrentUserId()).then(function (channel) {
|
ApiClient.getLiveTvChannel(currentItem.ChannelId, Dashboard.getCurrentUserId()).then(function (channel) {
|
||||||
|
|
||||||
LibraryBrowser.showPlayMenu(null, channel.Id, channel.Type, false, channel.MediaType, (channel.UserData || {}).PlaybackPositionTicks);
|
showPlayMenu(channel, button);
|
||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var userdata = currentItem.UserData || {};
|
showPlayMenu(currentItem, button);
|
||||||
|
|
||||||
var mediaType = currentItem.MediaType;
|
|
||||||
|
|
||||||
if (currentItem.Type == "MusicArtist" || currentItem.Type == "MusicAlbum") {
|
|
||||||
mediaType = "Audio";
|
|
||||||
}
|
|
||||||
|
|
||||||
LibraryBrowser.showPlayMenu(button, currentItem.Id, currentItem.Type, currentItem.IsFolder, mediaType, userdata.PlaybackPositionTicks);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function deleteTimer(page, params, id) {
|
function deleteTimer(page, params, id) {
|
||||||
|
|
|
@ -577,106 +577,6 @@
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
showPlayMenu: function (positionTo, itemId, itemType, isFolder, mediaType, resumePositionTicks) {
|
|
||||||
|
|
||||||
var externalPlayers = AppInfo.supportsExternalPlayers && appSettings.enableExternalPlayers();
|
|
||||||
|
|
||||||
if (!resumePositionTicks && mediaType != "Audio" && !isFolder) {
|
|
||||||
|
|
||||||
if (!externalPlayers || mediaType != "Video") {
|
|
||||||
|
|
||||||
MediaController.play(itemId);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var menuItems = [];
|
|
||||||
|
|
||||||
if (resumePositionTicks) {
|
|
||||||
menuItems.push({
|
|
||||||
name: Globalize.translate('ButtonResume'),
|
|
||||||
id: 'resume',
|
|
||||||
ironIcon: 'play-arrow'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
menuItems.push({
|
|
||||||
name: Globalize.translate('ButtonPlay'),
|
|
||||||
id: 'play',
|
|
||||||
ironIcon: 'play-arrow'
|
|
||||||
});
|
|
||||||
|
|
||||||
if (!isFolder && externalPlayers && mediaType != "Audio") {
|
|
||||||
menuItems.push({
|
|
||||||
name: Globalize.translate('ButtonPlayExternalPlayer'),
|
|
||||||
id: 'externalplayer',
|
|
||||||
ironIcon: 'airplay'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (MediaController.canQueueMediaType(mediaType, itemType)) {
|
|
||||||
menuItems.push({
|
|
||||||
name: Globalize.translate('ButtonQueue'),
|
|
||||||
id: 'queue',
|
|
||||||
ironIcon: 'playlist-add'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (itemType == "Audio" || itemType == "MusicAlbum" || itemType == "MusicArtist" || itemType == "MusicGenre") {
|
|
||||||
menuItems.push({
|
|
||||||
name: Globalize.translate('ButtonInstantMix'),
|
|
||||||
id: 'instantmix',
|
|
||||||
ironIcon: 'shuffle'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isFolder || itemType == "MusicArtist" || itemType == "MusicGenre") {
|
|
||||||
menuItems.push({
|
|
||||||
name: Globalize.translate('ButtonShuffle'),
|
|
||||||
id: 'shuffle',
|
|
||||||
ironIcon: 'shuffle'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
require(['actionsheet'], function (actionsheet) {
|
|
||||||
|
|
||||||
actionsheet.show({
|
|
||||||
items: menuItems,
|
|
||||||
positionTo: positionTo,
|
|
||||||
callback: function (id) {
|
|
||||||
|
|
||||||
switch (id) {
|
|
||||||
|
|
||||||
case 'play':
|
|
||||||
MediaController.play(itemId);
|
|
||||||
break;
|
|
||||||
case 'externalplayer':
|
|
||||||
LibraryBrowser.playInExternalPlayer(itemId);
|
|
||||||
break;
|
|
||||||
case 'resume':
|
|
||||||
MediaController.play({
|
|
||||||
ids: [itemId],
|
|
||||||
startPositionTicks: resumePositionTicks
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
case 'queue':
|
|
||||||
MediaController.queue(itemId);
|
|
||||||
break;
|
|
||||||
case 'instantmix':
|
|
||||||
MediaController.instantMix(itemId);
|
|
||||||
break;
|
|
||||||
case 'shuffle':
|
|
||||||
MediaController.shuffle(itemId);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
deleteItems: function (itemIds) {
|
deleteItems: function (itemIds) {
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
|
@ -896,14 +796,9 @@
|
||||||
|
|
||||||
var atts = [];
|
var atts = [];
|
||||||
|
|
||||||
atts.push({
|
|
||||||
name: 'itemid',
|
|
||||||
value: item.Id
|
|
||||||
});
|
|
||||||
|
|
||||||
atts.push({
|
atts.push({
|
||||||
name: 'serverid',
|
name: 'serverid',
|
||||||
value: item.ServerId
|
value: item.ServerId || options.serverId
|
||||||
});
|
});
|
||||||
|
|
||||||
atts.push({
|
atts.push({
|
||||||
|
@ -926,7 +821,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
atts.push({
|
atts.push({
|
||||||
name: 'itemtype',
|
name: 'type',
|
||||||
value: item.Type
|
value: item.Type
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1546,7 +1441,7 @@
|
||||||
anchorCssClass += ' mediaItem';
|
anchorCssClass += ' mediaItem';
|
||||||
|
|
||||||
if (options.defaultAction) {
|
if (options.defaultAction) {
|
||||||
anchorCssClass += ' itemWithAction';
|
anchorCssClass += ' itemAction';
|
||||||
}
|
}
|
||||||
|
|
||||||
var transition = options.transition === false || !AppInfo.enableSectionTransitions ? '' : ' data-transition="slide"';
|
var transition = options.transition === false || !AppInfo.enableSectionTransitions ? '' : ' data-transition="slide"';
|
||||||
|
@ -1604,10 +1499,10 @@
|
||||||
html += '</a>';
|
html += '</a>';
|
||||||
|
|
||||||
if (options.overlayPlayButton && !item.IsPlaceHolder && (item.LocationType != 'Virtual' || !item.MediaType || item.Type == 'Program') && item.Type != 'Person' && item.PlayAccess == 'Full') {
|
if (options.overlayPlayButton && !item.IsPlaceHolder && (item.LocationType != 'Virtual' || !item.MediaType || item.Type == 'Program') && item.Type != 'Person' && item.PlayAccess == 'Full') {
|
||||||
html += '<div class="cardOverlayButtonContainer"><button is="paper-icon-button-light" class="cardOverlayPlayButton autoSize" onclick="return false;"><i class="md-icon">play_arrow</i></button></div>';
|
html += '<div class="cardOverlayButtonContainer"><button is="paper-icon-button-light" class="cardOverlayPlayButton itemAction autoSize" data-action="playmenu" onclick="return false;"><i class="md-icon">play_arrow</i></button></div>';
|
||||||
}
|
}
|
||||||
if (options.overlayMoreButton) {
|
if (options.overlayMoreButton) {
|
||||||
html += '<div class="cardOverlayButtonContainer"><button is="paper-icon-button-light" class="cardOverlayMoreButton menuButton autoSize" onclick="return false;"><i class="md-icon">' + AppInfo.moreIcon.replace('-', '_') + '</i></button></div>';
|
html += '<div class="cardOverlayButtonContainer"><button is="paper-icon-button-light" class="cardOverlayMoreButton itemAction autoSize" data-action="menu" onclick="return false;"><i class="md-icon">' + AppInfo.moreIcon.replace('-', '_') + '</i></button></div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
// cardScalable
|
// cardScalable
|
||||||
|
@ -1632,7 +1527,7 @@
|
||||||
|
|
||||||
if (options.cardLayout) {
|
if (options.cardLayout) {
|
||||||
html += '<div class="cardButtonContainer">';
|
html += '<div class="cardButtonContainer">';
|
||||||
html += '<button is="paper-icon-button-light" class="menuButton btnCardOptions autoSize"><i class="md-icon">' + AppInfo.moreIcon.replace('-', '_') + '</i></button>';
|
html += '<button is="paper-icon-button-light" class="itemAction btnCardOptions autoSize" data-action="menu"><i class="md-icon">' + AppInfo.moreIcon.replace('-', '_') + '</i></button>';
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1795,11 +1690,11 @@
|
||||||
|
|
||||||
var elemWithAttributes = elem;
|
var elemWithAttributes = elem;
|
||||||
|
|
||||||
while (!elemWithAttributes.getAttribute('data-itemid')) {
|
while (!elemWithAttributes.getAttribute('data-id')) {
|
||||||
elemWithAttributes = elemWithAttributes.parentNode;
|
elemWithAttributes = elemWithAttributes.parentNode;
|
||||||
}
|
}
|
||||||
|
|
||||||
var itemId = elemWithAttributes.getAttribute('data-itemid');
|
var itemId = elemWithAttributes.getAttribute('data-id');
|
||||||
var index = elemWithAttributes.getAttribute('data-index');
|
var index = elemWithAttributes.getAttribute('data-index');
|
||||||
var mediaType = elemWithAttributes.getAttribute('data-mediatype');
|
var mediaType = elemWithAttributes.getAttribute('data-mediatype');
|
||||||
|
|
||||||
|
@ -2375,10 +2270,10 @@
|
||||||
if (style == 'fab') {
|
if (style == 'fab') {
|
||||||
|
|
||||||
var tagName = 'paper-fab';
|
var tagName = 'paper-fab';
|
||||||
return '<' + tagName + ' title="' + tooltip + '" data-itemid="' + itemId + '" icon="' + icon + '" class="' + btnCssClass + '" onclick="LibraryBrowser.' + method + '(this);return false;"></' + tagName + '>';
|
return '<' + tagName + ' title="' + tooltip + '" data-id="' + itemId + '" icon="' + icon + '" class="' + btnCssClass + '" onclick="LibraryBrowser.' + method + '(this);return false;"></' + tagName + '>';
|
||||||
}
|
}
|
||||||
|
|
||||||
return '<button is="paper-icon-button-light" title="' + tooltip + '" data-itemid="' + itemId + '" class="autoSize ' + btnCssClass + '" onclick="LibraryBrowser.' + method + '(this);return false;"><i class="md-icon">' + icon + '</i></button>';
|
return '<button is="paper-icon-button-light" title="' + tooltip + '" data-id="' + itemId + '" class="autoSize ' + btnCssClass + '" onclick="LibraryBrowser.' + method + '(this);return false;"><i class="md-icon">' + icon + '</i></button>';
|
||||||
},
|
},
|
||||||
|
|
||||||
getUserDataIconsHtml: function (item, includePlayed, style) {
|
getUserDataIconsHtml: function (item, includePlayed, style) {
|
||||||
|
@ -2416,7 +2311,7 @@
|
||||||
|
|
||||||
markPlayed: function (link) {
|
markPlayed: function (link) {
|
||||||
|
|
||||||
var id = link.getAttribute('data-itemid');
|
var id = link.getAttribute('data-id');
|
||||||
|
|
||||||
var markAsPlayed = !link.classList.contains('btnUserItemRatingOn');
|
var markAsPlayed = !link.classList.contains('btnUserItemRatingOn');
|
||||||
|
|
||||||
|
@ -2431,7 +2326,7 @@
|
||||||
|
|
||||||
markFavorite: function (link) {
|
markFavorite: function (link) {
|
||||||
|
|
||||||
var id = link.getAttribute('data-itemid');
|
var id = link.getAttribute('data-id');
|
||||||
|
|
||||||
var markAsFavorite = !link.classList.contains('btnUserItemRatingOn');
|
var markAsFavorite = !link.classList.contains('btnUserItemRatingOn');
|
||||||
|
|
||||||
|
|
|
@ -1,317 +1,4 @@
|
||||||
define(['appSettings', 'appStorage', 'libraryBrowser', 'apphost', 'itemHelper', 'mediaInfo'], function (appSettings, appStorage, LibraryBrowser, appHost, itemHelper, mediaInfo) {
|
define(['appSettings', 'appStorage', 'libraryBrowser', 'apphost', 'itemHelper'], function (appSettings, appStorage, LibraryBrowser, appHost, itemHelper) {
|
||||||
|
|
||||||
var showOverlayTimeout;
|
|
||||||
|
|
||||||
function onHoverOut(e) {
|
|
||||||
|
|
||||||
var elem = e.target;
|
|
||||||
|
|
||||||
if (!elem.classList.contains('card')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showOverlayTimeout) {
|
|
||||||
clearTimeout(showOverlayTimeout);
|
|
||||||
showOverlayTimeout = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
elem = elem.querySelector('.cardOverlayTarget');
|
|
||||||
|
|
||||||
if (elem) {
|
|
||||||
slideDownToHide(elem);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function slideDownToHide(elem) {
|
|
||||||
|
|
||||||
if (elem.classList.contains('hide')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!elem.animate) {
|
|
||||||
elem.classList.add('hide');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
requestAnimationFrame(function () {
|
|
||||||
var keyframes = [
|
|
||||||
{ transform: 'translateY(0)', offset: 0 },
|
|
||||||
{ transform: 'translateY(100%)', offset: 1 }];
|
|
||||||
var timing = { duration: 300, iterations: 1, fill: 'forwards', easing: 'ease-out' };
|
|
||||||
|
|
||||||
elem.animate(keyframes, timing).onfinish = function () {
|
|
||||||
elem.classList.add('hide');
|
|
||||||
};
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function slideUpToShow(elem) {
|
|
||||||
|
|
||||||
if (!elem.classList.contains('hide')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
elem.classList.remove('hide');
|
|
||||||
|
|
||||||
if (!elem.animate) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
requestAnimationFrame(function () {
|
|
||||||
|
|
||||||
var keyframes = [
|
|
||||||
{ transform: 'translateY(100%)', offset: 0 },
|
|
||||||
{ transform: 'translateY(0)', offset: 1 }];
|
|
||||||
var timing = { duration: 300, iterations: 1, fill: 'forwards', easing: 'ease-out' };
|
|
||||||
elem.animate(keyframes, timing);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function getOverlayHtml(item, currentUser, card) {
|
|
||||||
|
|
||||||
var html = '';
|
|
||||||
|
|
||||||
html += '<div class="cardOverlayInner">';
|
|
||||||
|
|
||||||
var className = card.className.toLowerCase();
|
|
||||||
|
|
||||||
var isMiniItem = className.indexOf('mini') != -1;
|
|
||||||
var isSmallItem = isMiniItem || className.indexOf('small') != -1;
|
|
||||||
var isPortrait = className.indexOf('portrait') != -1;
|
|
||||||
var isSquare = className.indexOf('square') != -1;
|
|
||||||
|
|
||||||
var parentName = isSmallItem || isMiniItem || isPortrait ? null : item.SeriesName;
|
|
||||||
var name = itemHelper.getDisplayName(item);
|
|
||||||
|
|
||||||
html += '<div style="margin-bottom:1em;">';
|
|
||||||
var logoHeight = isSmallItem || isMiniItem ? 20 : 26;
|
|
||||||
var imgUrl;
|
|
||||||
|
|
||||||
if (parentName && item.ParentLogoItemId) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.ParentLogoItemId, {
|
|
||||||
maxHeight: logoHeight,
|
|
||||||
type: 'logo',
|
|
||||||
tag: item.ParentLogoImageTag
|
|
||||||
});
|
|
||||||
|
|
||||||
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:100%;" />';
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (item.ImageTags.Logo) {
|
|
||||||
|
|
||||||
imgUrl = ApiClient.getScaledImageUrl(item.Id, {
|
|
||||||
maxHeight: logoHeight,
|
|
||||||
type: 'logo',
|
|
||||||
tag: item.ImageTags.Logo
|
|
||||||
});
|
|
||||||
|
|
||||||
html += '<img src="' + imgUrl + '" style="max-height:' + logoHeight + 'px;max-width:100%;" />';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
html += parentName || name;
|
|
||||||
}
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
if (parentName) {
|
|
||||||
html += '<p>';
|
|
||||||
html += name;
|
|
||||||
html += '</p>';
|
|
||||||
} else if (!isSmallItem && !isMiniItem) {
|
|
||||||
html += '<div class="itemMiscInfo">';
|
|
||||||
html += mediaInfo.getPrimaryMediaInfoHtml(item, {
|
|
||||||
endsAt: false
|
|
||||||
});
|
|
||||||
html += '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isMiniItem) {
|
|
||||||
html += '<div style="margin:1em 0 .75em;">';
|
|
||||||
|
|
||||||
if (isPortrait) {
|
|
||||||
html += '<div class="userDataIcons" style="margin:.5em 0 0em;">';
|
|
||||||
html += LibraryBrowser.getUserDataIconsHtml(item);
|
|
||||||
html += '</div>';
|
|
||||||
} else {
|
|
||||||
|
|
||||||
html += '<span class="userDataIcons" style="vertical-align:middle;">';
|
|
||||||
html += LibraryBrowser.getUserDataIconsHtml(item);
|
|
||||||
html += '</span>';
|
|
||||||
}
|
|
||||||
html += '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '<div>';
|
|
||||||
|
|
||||||
var buttonCount = 0;
|
|
||||||
|
|
||||||
if (MediaController.canPlay(item)) {
|
|
||||||
|
|
||||||
var resumePosition = (item.UserData || {}).PlaybackPositionTicks || 0;
|
|
||||||
|
|
||||||
html += '<button is="paper-icon-button-light" class="btnPlayItem autoSize" data-itemid="' + item.Id + '" data-itemtype="' + item.Type + '" data-isfolder="' + item.IsFolder + '" data-mediatype="' + item.MediaType + '" data-resumeposition="' + resumePosition + '"><i class="md-icon">play_circle_outline</i></button>';
|
|
||||||
buttonCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (item.LocalTrailerCount) {
|
|
||||||
html += '<button is="paper-icon-button-light" class="btnPlayTrailer autoSize" data-itemid="' + item.Id + '"><i class="md-icon">videocam</i></button>';
|
|
||||||
buttonCount++;
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '<button is="paper-icon-button-light" class="btnMoreCommands autoSize"><i class="md-icon">more_vert</i></button>';
|
|
||||||
buttonCount++;
|
|
||||||
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
html += '</div>';
|
|
||||||
|
|
||||||
return html;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onTrailerButtonClick(e) {
|
|
||||||
|
|
||||||
var id = this.getAttribute('data-itemid');
|
|
||||||
|
|
||||||
ApiClient.getLocalTrailers(Dashboard.getCurrentUserId(), id).then(function (trailers) {
|
|
||||||
MediaController.play({ items: trailers });
|
|
||||||
});
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onPlayItemButtonClick(e) {
|
|
||||||
|
|
||||||
var target = this;
|
|
||||||
|
|
||||||
var id = target.getAttribute('data-itemid');
|
|
||||||
var type = target.getAttribute('data-itemtype');
|
|
||||||
var isFolder = target.getAttribute('data-isfolder') == 'true';
|
|
||||||
var mediaType = target.getAttribute('data-mediatype');
|
|
||||||
var resumePosition = parseInt(target.getAttribute('data-resumeposition'));
|
|
||||||
|
|
||||||
LibraryBrowser.showPlayMenu(this, id, type, isFolder, mediaType, resumePosition);
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onMoreButtonClick(e) {
|
|
||||||
|
|
||||||
var card = parentWithClass(this, 'card');
|
|
||||||
|
|
||||||
showContextMenu(card, {
|
|
||||||
shuffle: false,
|
|
||||||
instantMix: false,
|
|
||||||
play: false,
|
|
||||||
playAllFromHere: false,
|
|
||||||
queue: false,
|
|
||||||
queueAllFromHere: false
|
|
||||||
});
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onContextMenu(e) {
|
|
||||||
|
|
||||||
var card = parentWithClass(e.target, 'card');
|
|
||||||
|
|
||||||
if (card) {
|
|
||||||
var itemSelectionPanel = card.querySelector('.itemSelectionPanel');
|
|
||||||
|
|
||||||
if (!itemSelectionPanel) {
|
|
||||||
showContextMenu(card, {});
|
|
||||||
}
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function deleteTimer(id, itemsContainer) {
|
|
||||||
|
|
||||||
require(['confirm'], function (confirm) {
|
|
||||||
|
|
||||||
confirm(Globalize.translate('MessageConfirmRecordingCancellation'), Globalize.translate('HeaderConfirmRecordingCancellation')).then(function () {
|
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
|
||||||
|
|
||||||
ApiClient.cancelLiveTvTimer(id).then(function () {
|
|
||||||
|
|
||||||
require(['toast'], function (toast) {
|
|
||||||
toast(Globalize.translate('MessageRecordingCancelled'));
|
|
||||||
});
|
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
|
||||||
itemsContainer.dispatchEvent(new CustomEvent('timercancelled', {
|
|
||||||
bubbles: true
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function showContextMenu(card, options) {
|
|
||||||
|
|
||||||
var displayContextItem = card;
|
|
||||||
|
|
||||||
card = parentWithClass(card, 'card');
|
|
||||||
|
|
||||||
if (!card) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var itemId = card.getAttribute('data-itemid');
|
|
||||||
var serverId = ApiClient.serverInfo().Id;
|
|
||||||
var type = card.getAttribute('data-itemtype');
|
|
||||||
|
|
||||||
var apiClient = ConnectionManager.getApiClient(serverId);
|
|
||||||
|
|
||||||
var promise = type == 'Timer' ? apiClient.getLiveTvTimer(itemId) : apiClient.getItem(apiClient.getCurrentUserId(), itemId);
|
|
||||||
|
|
||||||
promise.then(function (item) {
|
|
||||||
|
|
||||||
require(['itemContextMenu'], function (itemContextMenu) {
|
|
||||||
|
|
||||||
itemContextMenu.show(Object.assign(options || {}, {
|
|
||||||
item: item,
|
|
||||||
positionTo: displayContextItem
|
|
||||||
}));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onListViewPlayButtonClick(e, playButton) {
|
|
||||||
|
|
||||||
var card = e.target;
|
|
||||||
|
|
||||||
if (!card.classList.contains('card') && !card.classList.contains('listItem')) {
|
|
||||||
card = parentWithAnyClass(card, ['listItem', 'card']);
|
|
||||||
}
|
|
||||||
|
|
||||||
var id = card.getAttribute('data-itemid');
|
|
||||||
var type = card.getAttribute('data-itemtype');
|
|
||||||
var isFolder = card.getAttribute('data-isfolder') == 'true';
|
|
||||||
var mediaType = card.getAttribute('data-mediatype');
|
|
||||||
var resumePosition = parseInt(card.getAttribute('data-positionticks'));
|
|
||||||
|
|
||||||
if (type == 'MusicAlbum' || type == 'MusicArtist' || type == 'MusicGenre' || type == 'Playlist') {
|
|
||||||
isFolder = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type == 'Program') {
|
|
||||||
id = card.getAttribute('data-channelid');
|
|
||||||
}
|
|
||||||
|
|
||||||
LibraryBrowser.showPlayMenu(playButton, id, type, isFolder, mediaType, resumePosition);
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isClickable(target) {
|
function isClickable(target) {
|
||||||
|
|
||||||
|
@ -330,12 +17,6 @@
|
||||||
|
|
||||||
function onCardClick(e) {
|
function onCardClick(e) {
|
||||||
|
|
||||||
var playButton = parentWithClass(e.target, 'cardOverlayPlayButton');
|
|
||||||
|
|
||||||
if (playButton) {
|
|
||||||
return onListViewPlayButtonClick(e, playButton);
|
|
||||||
}
|
|
||||||
|
|
||||||
var card = parentWithClass(e.target, 'card');
|
var card = parentWithClass(e.target, 'card');
|
||||||
|
|
||||||
if (card) {
|
if (card) {
|
||||||
|
@ -352,7 +33,7 @@
|
||||||
|
|
||||||
function onGroupedCardClick(e, card) {
|
function onGroupedCardClick(e, card) {
|
||||||
|
|
||||||
var itemId = card.getAttribute('data-itemid');
|
var itemId = card.getAttribute('data-id');
|
||||||
var context = card.getAttribute('data-context');
|
var context = card.getAttribute('data-context');
|
||||||
|
|
||||||
var userId = Dashboard.getCurrentUserId();
|
var userId = Dashboard.getCurrentUserId();
|
||||||
|
@ -392,25 +73,6 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function hasAnyClass(elem, classNames) {
|
|
||||||
return classNames.filter(function (c) {
|
|
||||||
return elem.classList.contains(c);
|
|
||||||
}).length > 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
function parentWithAnyClass(elem, classNames) {
|
|
||||||
|
|
||||||
while (!elem.classList || !hasAnyClass(elem, classNames)) {
|
|
||||||
elem = elem.parentNode;
|
|
||||||
|
|
||||||
if (!elem) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return elem;
|
|
||||||
}
|
|
||||||
|
|
||||||
function parentWithClass(elem, className) {
|
function parentWithClass(elem, className) {
|
||||||
|
|
||||||
while (!elem.classList || !elem.classList.contains(className)) {
|
while (!elem.classList || !elem.classList.contains(className)) {
|
||||||
|
@ -426,125 +88,10 @@
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus = function (curr, options) {
|
LibraryBrowser.createCardMenus = function (curr, options) {
|
||||||
|
|
||||||
var preventHover = false;
|
|
||||||
|
|
||||||
function onShowTimerExpired(elem) {
|
|
||||||
|
|
||||||
elem = elem.querySelector('a');
|
|
||||||
|
|
||||||
if (elem.querySelector('.itemSelectionPanel')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var innerElem = elem.querySelector('.cardOverlayTarget');
|
|
||||||
|
|
||||||
if (!innerElem) {
|
|
||||||
innerElem = document.createElement('div');
|
|
||||||
innerElem.classList.add('hide');
|
|
||||||
innerElem.classList.add('cardOverlayTarget');
|
|
||||||
parentWithClass(elem, 'cardContent').appendChild(innerElem);
|
|
||||||
}
|
|
||||||
|
|
||||||
var dataElement = elem;
|
|
||||||
while (dataElement && !dataElement.getAttribute('data-itemid')) {
|
|
||||||
dataElement = dataElement.parentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
var id = dataElement.getAttribute('data-itemid');
|
|
||||||
var type = dataElement.getAttribute('data-itemtype');
|
|
||||||
|
|
||||||
if (type == 'Timer') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var promise1 = ApiClient.getItem(Dashboard.getCurrentUserId(), id);
|
|
||||||
var promise2 = Dashboard.getCurrentUser();
|
|
||||||
|
|
||||||
Promise.all([promise1, promise2]).then(function (responses) {
|
|
||||||
|
|
||||||
var item = responses[0];
|
|
||||||
var user = responses[1];
|
|
||||||
|
|
||||||
var card = elem;
|
|
||||||
|
|
||||||
while (!card.classList.contains('card')) {
|
|
||||||
card = card.parentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
innerElem.innerHTML = getOverlayHtml(item, user, card);
|
|
||||||
|
|
||||||
var btnPlayItem = innerElem.querySelector('.btnPlayItem');
|
|
||||||
if (btnPlayItem) {
|
|
||||||
btnPlayItem.addEventListener('click', onPlayItemButtonClick);
|
|
||||||
}
|
|
||||||
var btnPlayTrailer = innerElem.querySelector('.btnPlayTrailer');
|
|
||||||
if (btnPlayTrailer) {
|
|
||||||
btnPlayTrailer.addEventListener('click', onTrailerButtonClick);
|
|
||||||
}
|
|
||||||
var btnMoreCommands = innerElem.querySelector('.btnMoreCommands');
|
|
||||||
if (btnMoreCommands) {
|
|
||||||
btnMoreCommands.addEventListener('click', onMoreButtonClick);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
slideUpToShow(innerElem);
|
|
||||||
}
|
|
||||||
|
|
||||||
function onHoverIn(e) {
|
|
||||||
|
|
||||||
var elem = e.target;
|
|
||||||
|
|
||||||
if (!elem.classList.contains('cardImage')) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preventHover === true) {
|
|
||||||
preventHover = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (showOverlayTimeout) {
|
|
||||||
clearTimeout(showOverlayTimeout);
|
|
||||||
showOverlayTimeout = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!elem.classList.contains('card')) {
|
|
||||||
elem = elem.parentNode;
|
|
||||||
}
|
|
||||||
|
|
||||||
showOverlayTimeout = setTimeout(function () {
|
|
||||||
onShowTimerExpired(elem);
|
|
||||||
|
|
||||||
}, 1200);
|
|
||||||
}
|
|
||||||
|
|
||||||
function preventTouchHover() {
|
|
||||||
preventHover = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
curr.removeEventListener('click', onCardClick);
|
curr.removeEventListener('click', onCardClick);
|
||||||
curr.addEventListener('click', onCardClick);
|
curr.addEventListener('click', onCardClick);
|
||||||
|
|
||||||
if (AppInfo.isTouchPreferred) {
|
//initTapHoldMenus(curr);
|
||||||
|
|
||||||
curr.removeEventListener('contextmenu', disableEvent);
|
|
||||||
curr.addEventListener('contextmenu', disableEvent);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
curr.removeEventListener('contextmenu', onContextMenu);
|
|
||||||
curr.addEventListener('contextmenu', onContextMenu);
|
|
||||||
|
|
||||||
curr.removeEventListener('mouseenter', onHoverIn);
|
|
||||||
curr.addEventListener('mouseenter', onHoverIn, true);
|
|
||||||
|
|
||||||
curr.removeEventListener('mouseleave', onHoverOut);
|
|
||||||
curr.addEventListener('mouseleave', onHoverOut, true);
|
|
||||||
|
|
||||||
curr.removeEventListener("touchstart", preventTouchHover);
|
|
||||||
curr.addEventListener("touchstart", preventTouchHover);
|
|
||||||
}
|
|
||||||
|
|
||||||
initTapHoldMenus(curr);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
function initTapHoldMenus(elem) {
|
function initTapHoldMenus(elem) {
|
||||||
|
@ -616,12 +163,6 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function disableEvent(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
e.stopPropagation();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onTapHold(e) {
|
function onTapHold(e) {
|
||||||
|
|
||||||
var card = parentWithClass(e.target, 'card');
|
var card = parentWithClass(e.target, 'card');
|
||||||
|
@ -781,7 +322,7 @@
|
||||||
var selectedItems = [];
|
var selectedItems = [];
|
||||||
function updateItemSelection(chkItemSelect, selected) {
|
function updateItemSelection(chkItemSelect, selected) {
|
||||||
|
|
||||||
var id = parentWithClass(chkItemSelect, 'card').getAttribute('data-itemid');
|
var id = parentWithClass(chkItemSelect, 'card').getAttribute('data-id');
|
||||||
|
|
||||||
if (selected) {
|
if (selected) {
|
||||||
|
|
||||||
|
@ -989,80 +530,6 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function onItemWithActionClick(e) {
|
|
||||||
|
|
||||||
var elem = parentWithClass(e.target, 'itemWithAction');
|
|
||||||
|
|
||||||
if (!elem) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var action = elem.getAttribute('data-action');
|
|
||||||
var elemWithAttributes = elem;
|
|
||||||
|
|
||||||
if (action) {
|
|
||||||
while (!elemWithAttributes.getAttribute('data-itemid')) {
|
|
||||||
elemWithAttributes = elemWithAttributes.parentNode;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var index;
|
|
||||||
var itemsContainer;
|
|
||||||
|
|
||||||
var itemId = elemWithAttributes.getAttribute('data-itemid');
|
|
||||||
|
|
||||||
if (action == 'play') {
|
|
||||||
MediaController.play(itemId);
|
|
||||||
}
|
|
||||||
else if (action == 'playallfromhere') {
|
|
||||||
|
|
||||||
index = elemWithAttributes.getAttribute('data-index');
|
|
||||||
|
|
||||||
itemsContainer = parentWithClass(elem, 'itemsContainer');
|
|
||||||
|
|
||||||
playAllFromHere(index, itemsContainer, 'play');
|
|
||||||
}
|
|
||||||
else if (action == 'instantmix') {
|
|
||||||
|
|
||||||
MediaController.instantMix(itemId);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.stopPropagation();
|
|
||||||
e.preventDefault();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function playAllFromHere(index, itemsContainer, method) {
|
|
||||||
|
|
||||||
var ids = [];
|
|
||||||
|
|
||||||
var mediaItems = itemsContainer.querySelectorAll('.mediaItem');
|
|
||||||
for (var i = 0, length = mediaItems.length; i < length; i++) {
|
|
||||||
var node = mediaItems[i];
|
|
||||||
var id = node.getAttribute('data-itemid');
|
|
||||||
while (!id) {
|
|
||||||
node = node.parentNode;
|
|
||||||
id = node.getAttribute('data-itemid');
|
|
||||||
}
|
|
||||||
ids.push(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
ids = ids.slice(index);
|
|
||||||
|
|
||||||
ApiClient.getItems(Dashboard.getCurrentUserId(), {
|
|
||||||
|
|
||||||
Ids: ids.join(','),
|
|
||||||
Fields: 'MediaSources,Chapters',
|
|
||||||
Limit: 100
|
|
||||||
|
|
||||||
}).then(function (result) {
|
|
||||||
|
|
||||||
MediaController[method]({
|
|
||||||
items: result.Items
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function showSyncButtonsPerUser(page) {
|
function showSyncButtonsPerUser(page) {
|
||||||
|
|
||||||
var apiClient = window.ApiClient;
|
var apiClient = window.ApiClient;
|
||||||
|
@ -1106,16 +573,8 @@
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
page.addEventListener('click', onItemWithActionClick);
|
|
||||||
|
|
||||||
var itemsContainers = page.querySelectorAll('.itemsContainer:not(.noautoinit)');
|
|
||||||
var i, length;
|
|
||||||
for (i = 0, length = itemsContainers.length; i < length; i++) {
|
|
||||||
LibraryBrowser.createCardMenus(itemsContainers[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
var categorySyncButtons = page.querySelectorAll('.categorySyncButton');
|
var categorySyncButtons = page.querySelectorAll('.categorySyncButton');
|
||||||
for (i = 0, length = categorySyncButtons.length; i < length; i++) {
|
for (var i = 0, length = categorySyncButtons.length; i < length; i++) {
|
||||||
categorySyncButtons[i].addEventListener('click', onCategorySyncButtonClick);
|
categorySyncButtons[i].addEventListener('click', onCategorySyncButtonClick);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1136,105 +595,4 @@
|
||||||
hideSelections();
|
hideSelections();
|
||||||
});
|
});
|
||||||
|
|
||||||
function renderUserDataChanges(card, userData) {
|
|
||||||
|
|
||||||
if (userData.Played) {
|
|
||||||
|
|
||||||
var playedIndicator = card.querySelector('.playedIndicator');
|
|
||||||
|
|
||||||
if (!playedIndicator) {
|
|
||||||
|
|
||||||
playedIndicator = document.createElement('div');
|
|
||||||
playedIndicator.classList.add('playedIndicator');
|
|
||||||
card.querySelector('.cardContent').appendChild(playedIndicator);
|
|
||||||
}
|
|
||||||
playedIndicator.innerHTML = '<i class="md-icon">check</i>';
|
|
||||||
}
|
|
||||||
else if (userData.UnplayedItemCount) {
|
|
||||||
|
|
||||||
var playedIndicator = card.querySelector('.playedIndicator');
|
|
||||||
|
|
||||||
if (!playedIndicator) {
|
|
||||||
|
|
||||||
playedIndicator = document.createElement('div');
|
|
||||||
playedIndicator.classList.add('playedIndicator');
|
|
||||||
card.querySelector('.cardContent').appendChild(playedIndicator);
|
|
||||||
}
|
|
||||||
playedIndicator.innerHTML = userData.UnplayedItemCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
var progressHtml = LibraryBrowser.getItemProgressBarHtml(userData);
|
|
||||||
var cardProgress;
|
|
||||||
|
|
||||||
if (progressHtml) {
|
|
||||||
cardProgress = card.querySelector('.cardProgress');
|
|
||||||
|
|
||||||
if (!cardProgress) {
|
|
||||||
cardProgress = document.createElement('div');
|
|
||||||
cardProgress.classList.add('cardProgress');
|
|
||||||
|
|
||||||
var cardFooter = card.querySelector('.cardFooter');
|
|
||||||
if (cardFooter) {
|
|
||||||
cardFooter.appendChild(cardProgress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
cardProgress.innerHTML = progressHtml;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
cardProgress = card.querySelector('.cardProgress');
|
|
||||||
if (cardProgress) {
|
|
||||||
cardProgress.parentNode.removeChild(cardProgress);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function onUserDataChanged(userData) {
|
|
||||||
|
|
||||||
var elems = document.querySelectorAll("*[data-itemid='" + userData.ItemId + "']");
|
|
||||||
|
|
||||||
for (var i = 0, length = elems.length; i < length; i++) {
|
|
||||||
|
|
||||||
var elem = elems[i];
|
|
||||||
var mediaType = elem.getAttribute('data-mediatype');
|
|
||||||
|
|
||||||
if (mediaType == 'Video') {
|
|
||||||
elem.setAttribute('data-positionticks', (userData.PlaybackPositionTicks || 0));
|
|
||||||
|
|
||||||
if (elem.classList.contains('card')) {
|
|
||||||
renderUserDataChanges(elem, userData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function onWebSocketMessage(e, data) {
|
|
||||||
|
|
||||||
var msg = data;
|
|
||||||
|
|
||||||
if (msg.MessageType === "UserDataChanged") {
|
|
||||||
|
|
||||||
if (msg.Data.UserId == Dashboard.getCurrentUserId()) {
|
|
||||||
|
|
||||||
for (var i = 0, length = msg.Data.UserDataList.length; i < length; i++) {
|
|
||||||
onUserDataChanged(msg.Data.UserDataList[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function initializeApiClient(apiClient) {
|
|
||||||
Events.off(apiClient, "websocketmessage", onWebSocketMessage);
|
|
||||||
Events.on(apiClient, "websocketmessage", onWebSocketMessage);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (window.ApiClient) {
|
|
||||||
initializeApiClient(window.ApiClient);
|
|
||||||
}
|
|
||||||
|
|
||||||
Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) {
|
|
||||||
initializeApiClient(apiClient);
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
|
@ -1,4 +1,4 @@
|
||||||
define([], function () {
|
define(['emby-itemscontainer'], function () {
|
||||||
|
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
|
||||||
|
|
|
@ -89,7 +89,6 @@
|
||||||
showChannelName: true,
|
showChannelName: true,
|
||||||
lazy: true,
|
lazy: true,
|
||||||
cardLayout: true,
|
cardLayout: true,
|
||||||
showDetailsMenu: true,
|
|
||||||
defaultAction: 'edit'
|
defaultAction: 'edit'
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define([], function () {
|
define(['emby-itemscontainer'], function () {
|
||||||
|
|
||||||
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
|
||||||
|
|
||||||
|
|
|
@ -149,7 +149,6 @@
|
||||||
elem.querySelector('.recordingItems').innerHTML = html;
|
elem.querySelector('.recordingItems').innerHTML = html;
|
||||||
|
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
|
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
|
||||||
|
|
||||||
function enableScrollX() {
|
function enableScrollX() {
|
||||||
return browserInfo.mobile && AppInfo.enableAppLayouts;
|
return browserInfo.mobile && AppInfo.enableAppLayouts;
|
||||||
|
@ -133,7 +133,6 @@
|
||||||
} else {
|
} else {
|
||||||
containers[i].classList.remove('hiddenScrollX');
|
containers[i].classList.remove('hiddenScrollX');
|
||||||
}
|
}
|
||||||
LibraryBrowser.createCardMenus(containers[i]);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -585,12 +585,23 @@
|
||||||
|
|
||||||
self.shuffle = function (id) {
|
self.shuffle = function (id) {
|
||||||
|
|
||||||
|
// accept both id and item being passed in
|
||||||
|
if (id.Id) {
|
||||||
|
id = id.Id;
|
||||||
|
}
|
||||||
|
|
||||||
doWithPlaybackValidation(currentPlayer, function () {
|
doWithPlaybackValidation(currentPlayer, function () {
|
||||||
currentPlayer.shuffle(id);
|
currentPlayer.shuffle(id);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
self.instantMix = function (id) {
|
self.instantMix = function (id) {
|
||||||
|
|
||||||
|
// accept both id and item being passed in
|
||||||
|
if (id.Id) {
|
||||||
|
id = id.Id;
|
||||||
|
}
|
||||||
|
|
||||||
doWithPlaybackValidation(currentPlayer, function () {
|
doWithPlaybackValidation(currentPlayer, function () {
|
||||||
currentPlayer.instantMix(id);
|
currentPlayer.instantMix(id);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
|
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
|
||||||
|
|
||||||
function getView() {
|
function getView() {
|
||||||
|
|
||||||
|
@ -167,9 +167,9 @@
|
||||||
html += '<h1 class="listHeader">' + title + '</h1>';
|
html += '<h1 class="listHeader">' + title + '</h1>';
|
||||||
|
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="hiddenScrollX">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div>';
|
html += '<div is="emby-itemscontainer">';
|
||||||
}
|
}
|
||||||
|
|
||||||
var view = getView();
|
var view = getView();
|
||||||
|
@ -247,8 +247,6 @@
|
||||||
} else {
|
} else {
|
||||||
containers[i].classList.remove('hiddenScrollX');
|
containers[i].classList.remove('hiddenScrollX');
|
||||||
}
|
}
|
||||||
|
|
||||||
libraryBrowser.createCardMenus(containers[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -281,8 +279,6 @@
|
||||||
loadSuggestionsTab(view, params, tabContent);
|
loadSuggestionsTab(view, params, tabContent);
|
||||||
};
|
};
|
||||||
|
|
||||||
libraryBrowser.createCardMenus(view.querySelector('.recommendations'));
|
|
||||||
|
|
||||||
var mdlTabs = view.querySelector('.libraryViewNav');
|
var mdlTabs = view.querySelector('.libraryViewNav');
|
||||||
|
|
||||||
var baseUrl = 'movies.html';
|
var baseUrl = 'movies.html';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
|
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
|
||||||
|
|
||||||
function itemsPerRow() {
|
function itemsPerRow() {
|
||||||
|
|
||||||
|
@ -258,8 +258,6 @@
|
||||||
} else {
|
} else {
|
||||||
containers[i].classList.remove('hiddenScrollX');
|
containers[i].classList.remove('hiddenScrollX');
|
||||||
}
|
}
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(containers[i]);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,6 @@
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
|
|
||||||
$('.btnNextPage', elem).on('click', function () {
|
$('.btnNextPage', elem).on('click', function () {
|
||||||
query.StartIndex += query.Limit;
|
query.StartIndex += query.Limit;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'focusManager', 'embyRouter', 'emby-input', 'paper-icon-button-light', 'material-icons'], function (libraryBrowser, focusManager, embyRouter) {
|
define(['libraryBrowser', 'focusManager', 'embyRouter', 'emby-input', 'paper-icon-button-light', 'material-icons', 'emby-itemscontainer'], function (libraryBrowser, focusManager, embyRouter) {
|
||||||
|
|
||||||
function loadSuggestions(page) {
|
function loadSuggestions(page) {
|
||||||
|
|
||||||
|
@ -121,7 +121,8 @@
|
||||||
centerImage: true,
|
centerImage: true,
|
||||||
centerText: true,
|
centerText: true,
|
||||||
textLines: getAdditionalTextLines,
|
textLines: getAdditionalTextLines,
|
||||||
overlayPlayButton: true
|
overlayPlayButton: true,
|
||||||
|
serverId: ApiClient.serverInfo().Id
|
||||||
});
|
});
|
||||||
|
|
||||||
var itemsContainer = searchResults;
|
var itemsContainer = searchResults;
|
||||||
|
@ -176,8 +177,6 @@
|
||||||
loadSuggestions(view);
|
loadSuggestions(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
libraryBrowser.createCardMenus(searchResults);
|
|
||||||
|
|
||||||
view.querySelector('.txtSearch').addEventListener('input', function () {
|
view.querySelector('.txtSearch').addEventListener('input', function () {
|
||||||
onSearchChange(this.value);
|
onSearchChange(this.value);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'appSettings', 'scrollStyles', 'emby-button', 'paper-icon-button-light'], function (LibraryBrowser, appSettings) {
|
define(['libraryBrowser', 'appSettings', 'scrollStyles', 'emby-button', 'paper-icon-button-light', 'emby-itemscontainer'], function (LibraryBrowser, appSettings) {
|
||||||
|
|
||||||
function getUserViews(userId) {
|
function getUserViews(userId) {
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
|
|
||||||
icon = item.icon || icon;
|
icon = item.icon || icon;
|
||||||
|
|
||||||
html += '<a' + onclick + ' data-itemid="' + item.Id + '" class="' + cssClass + '" href="' + href + '">';
|
html += '<a' + onclick + ' data-id="' + item.Id + '" class="' + cssClass + '" href="' + href + '">';
|
||||||
html += '<div class="cardBox" style="background-color:' + backgroundColor + ';margin:4px;border-radius:4px;">';
|
html += '<div class="cardBox" style="background-color:' + backgroundColor + ';margin:4px;border-radius:4px;">';
|
||||||
|
|
||||||
html += "<div class='cardText' style='padding:8px 10px;color:#fff;'>";
|
html += "<div class='cardText' style='padding:8px 10px;color:#fff;'>";
|
||||||
|
@ -302,7 +302,7 @@
|
||||||
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
|
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: items,
|
items: items,
|
||||||
|
@ -322,8 +322,6 @@
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,9 +345,9 @@
|
||||||
if (items.length) {
|
if (items.length) {
|
||||||
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestMovies') + '</h1>';
|
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestMovies') + '</h1>';
|
||||||
if (scrollX) {
|
if (scrollX) {
|
||||||
html += '<div class="hiddenScrollX itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: items,
|
items: items,
|
||||||
|
@ -366,8 +364,6 @@
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,9 +387,9 @@
|
||||||
if (items.length) {
|
if (items.length) {
|
||||||
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestEpisodes') + '</h1>';
|
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestEpisodes') + '</h1>';
|
||||||
if (scrollX) {
|
if (scrollX) {
|
||||||
html += '<div class="hiddenScrollX itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
|
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
@ -411,8 +407,6 @@
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -434,7 +428,7 @@
|
||||||
|
|
||||||
if (result.Items.length) {
|
if (result.Items.length) {
|
||||||
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestChannelMedia') + '</h1>';
|
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestChannelMedia') + '</h1>';
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
shape: 'auto',
|
shape: 'auto',
|
||||||
|
@ -449,8 +443,6 @@
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,9 +470,9 @@
|
||||||
var scrollX = enableScrollX() && browserInfo.safari && screenWidth > 800;
|
var scrollX = enableScrollX() && browserInfo.safari && screenWidth > 800;
|
||||||
|
|
||||||
if (scrollX) {
|
if (scrollX) {
|
||||||
html += '<div class="hiddenScrollX itemsContainer homeTopViews">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer homeTopViews">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer homeTopViews">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer homeTopViews">';
|
||||||
}
|
}
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: items,
|
items: items,
|
||||||
|
@ -506,8 +498,6 @@
|
||||||
|
|
||||||
elem.innerHTML = html + infoHtml;
|
elem.innerHTML = html + infoHtml;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(elem, { showDetailsMenu: false });
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -539,9 +529,9 @@
|
||||||
if (result.Items.length) {
|
if (result.Items.length) {
|
||||||
html += '<h1 class="listHeader">' + Globalize.translate('HeaderResume') + '</h1>';
|
html += '<h1 class="listHeader">' + Globalize.translate('HeaderResume') + '</h1>';
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="hiddenScrollX itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -562,7 +552,6 @@
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
|
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -584,9 +573,9 @@
|
||||||
if (result.Items.length) {
|
if (result.Items.length) {
|
||||||
html += '<h1 class="listHeader">' + Globalize.translate('HeaderNextUp') + '</h1>';
|
html += '<h1 class="listHeader">' + Globalize.translate('HeaderNextUp') + '</h1>';
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="hiddenScrollX itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -606,7 +595,6 @@
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
|
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,7 +655,7 @@
|
||||||
html += '<a href="channelitems.html?id=' + channel.Id + '" class="clearLink" style="margin-left:2em;"><button is="emby-button" type="button" class="raised more mini"><span>' + Globalize.translate('ButtonMore') + '</span></button></a>';
|
html += '<a href="channelitems.html?id=' + channel.Id + '" class="clearLink" style="margin-left:2em;"><button is="emby-button" type="button" class="raised more mini"><span>' + Globalize.translate('ButtonMore') + '</span></button></a>';
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" is="emby-itemscontainer" class="itemsContainer">';
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
shape: 'autohome',
|
shape: 'autohome',
|
||||||
|
@ -685,8 +673,6 @@
|
||||||
var elem = page.querySelector('#channel' + channel.Id + '');
|
var elem = page.querySelector('#channel' + channel.Id + '');
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
|
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -715,9 +701,9 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="hiddenScrollX itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
items: result.Items,
|
items: result.Items,
|
||||||
|
@ -734,7 +720,6 @@
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1804,6 +1804,7 @@ var AppInfo = {};
|
||||||
define("emby-collapse", [embyWebComponentsBowerPath + "/emby-collapse/emby-collapse"], returnFirstDependency);
|
define("emby-collapse", [embyWebComponentsBowerPath + "/emby-collapse/emby-collapse"], returnFirstDependency);
|
||||||
define("emby-button", [embyWebComponentsBowerPath + "/emby-button/emby-button"], returnFirstDependency);
|
define("emby-button", [embyWebComponentsBowerPath + "/emby-button/emby-button"], returnFirstDependency);
|
||||||
define("emby-itemscontainer", [embyWebComponentsBowerPath + "/emby-itemscontainer/emby-itemscontainer"], returnFirstDependency);
|
define("emby-itemscontainer", [embyWebComponentsBowerPath + "/emby-itemscontainer/emby-itemscontainer"], returnFirstDependency);
|
||||||
|
define("itemHoverMenu", [embyWebComponentsBowerPath + "/itemhovermenu/itemhovermenu"], returnFirstDependency);
|
||||||
define("alphaPicker", [embyWebComponentsBowerPath + "/alphapicker/alphapicker"], returnFirstDependency);
|
define("alphaPicker", [embyWebComponentsBowerPath + "/alphapicker/alphapicker"], returnFirstDependency);
|
||||||
define("paper-icon-button-light", [embyWebComponentsBowerPath + "/emby-button/paper-icon-button-light"]);
|
define("paper-icon-button-light", [embyWebComponentsBowerPath + "/emby-button/paper-icon-button-light"]);
|
||||||
|
|
||||||
|
@ -1820,6 +1821,7 @@ var AppInfo = {};
|
||||||
define("subtitleEditor", [embyWebComponentsBowerPath + "/subtitleeditor/subtitleeditor"], returnFirstDependency);
|
define("subtitleEditor", [embyWebComponentsBowerPath + "/subtitleeditor/subtitleeditor"], returnFirstDependency);
|
||||||
define("mediaInfo", [embyWebComponentsBowerPath + "/mediainfo/mediainfo"], returnFirstDependency);
|
define("mediaInfo", [embyWebComponentsBowerPath + "/mediainfo/mediainfo"], returnFirstDependency);
|
||||||
define("itemContextMenu", [embyWebComponentsBowerPath + "/itemcontextmenu"], returnFirstDependency);
|
define("itemContextMenu", [embyWebComponentsBowerPath + "/itemcontextmenu"], returnFirstDependency);
|
||||||
|
define("playMenu", [embyWebComponentsBowerPath + "/playmenu"], returnFirstDependency);
|
||||||
define("refreshDialog", [embyWebComponentsBowerPath + "/refreshdialog/refreshdialog"], returnFirstDependency);
|
define("refreshDialog", [embyWebComponentsBowerPath + "/refreshdialog/refreshdialog"], returnFirstDependency);
|
||||||
define("backdrop", [embyWebComponentsBowerPath + "/backdrop/backdrop"], returnFirstDependency);
|
define("backdrop", [embyWebComponentsBowerPath + "/backdrop/backdrop"], returnFirstDependency);
|
||||||
define("fetchHelper", [embyWebComponentsBowerPath + "/fetchhelper"], returnFirstDependency);
|
define("fetchHelper", [embyWebComponentsBowerPath + "/fetchhelper"], returnFirstDependency);
|
||||||
|
@ -2035,6 +2037,12 @@ var AppInfo = {};
|
||||||
},
|
},
|
||||||
canPlay: function (item) {
|
canPlay: function (item) {
|
||||||
return MediaController.canPlay(item);
|
return MediaController.canPlay(item);
|
||||||
|
},
|
||||||
|
instantMix: function (item) {
|
||||||
|
return MediaController.instantMix(item);
|
||||||
|
},
|
||||||
|
shuffle: function (item) {
|
||||||
|
return MediaController.shuffle(item);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
@ -2287,7 +2295,7 @@ var AppInfo = {};
|
||||||
|
|
||||||
var baseUrl = 'bower_components/emby-webcomponents/strings/';
|
var baseUrl = 'bower_components/emby-webcomponents/strings/';
|
||||||
|
|
||||||
var languages = ['da', 'de', 'en-US', 'es-MX', 'kk', 'nb', 'nl', 'pt-BR', 'pt-PT', 'ru', 'sv', 'zh-TW'];
|
var languages = ['da', 'de', 'en-US', 'es-MX', 'fr', 'kk', 'nb', 'nl', 'pt-BR', 'pt-PT', 'ru', 'sv', 'zh-TW'];
|
||||||
|
|
||||||
var translations = languages.map(function (i) {
|
var translations = languages.map(function (i) {
|
||||||
return {
|
return {
|
||||||
|
@ -3248,7 +3256,7 @@ var AppInfo = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
function upgradeLayouts() {
|
function upgradeLayouts() {
|
||||||
if (!AppInfo.enableAppLayouts && browserInfo.mobile) {
|
if (!AppInfo.enableAppLayouts) {
|
||||||
Dashboard.getPluginSecurityInfo().then(function (info) {
|
Dashboard.getPluginSecurityInfo().then(function (info) {
|
||||||
if (info.IsMBSupporter) {
|
if (info.IsMBSupporter) {
|
||||||
AppInfo.enableAppLayouts = true;
|
AppInfo.enableAppLayouts = true;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
|
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
|
||||||
|
|
||||||
return function (view, params) {
|
return function (view, params) {
|
||||||
|
|
||||||
|
@ -165,7 +165,6 @@
|
||||||
} else {
|
} else {
|
||||||
tabContent.querySelector('#resumableItems').classList.remove('hiddenScrollX');
|
tabContent.querySelector('#resumableItems').classList.remove('hiddenScrollX');
|
||||||
}
|
}
|
||||||
libraryBrowser.createCardMenus(tabContent.querySelector('#resumableItems'));
|
|
||||||
};
|
};
|
||||||
|
|
||||||
self.renderTab = function () {
|
self.renderTab = function () {
|
||||||
|
@ -273,7 +272,6 @@
|
||||||
} else {
|
} else {
|
||||||
view.querySelector('#resumableItems').classList.remove('hiddenScrollX');
|
view.querySelector('#resumableItems').classList.remove('hiddenScrollX');
|
||||||
}
|
}
|
||||||
libraryBrowser.createCardMenus(view.querySelector('#resumableItems'));
|
|
||||||
libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 1, 2, 4, 5, 6]);
|
libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 1, 2, 4, 5, 6]);
|
||||||
|
|
||||||
mdlTabs.addEventListener('beforetabchange', function (e) {
|
mdlTabs.addEventListener('beforetabchange', function (e) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['datetime', 'scrollStyles'], function (datetime) {
|
define(['datetime', 'scrollStyles', 'emby-itemscontainer'], function (datetime) {
|
||||||
|
|
||||||
function getUpcomingPromise(context, params) {
|
function getUpcomingPromise(context, params) {
|
||||||
|
|
||||||
|
@ -102,9 +102,9 @@
|
||||||
html += '<h1 class="listHeader">' + group.name + '</h1>';
|
html += '<h1 class="listHeader">' + group.name + '</h1>';
|
||||||
|
|
||||||
if (enableScrollX()) {
|
if (enableScrollX()) {
|
||||||
html += '<div class="itemsContainer hiddenScrollX">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX">';
|
||||||
} else {
|
} else {
|
||||||
html += '<div class="itemsContainer">';
|
html += '<div is="emby-itemscontainer" class="itemsContainer">';
|
||||||
}
|
}
|
||||||
|
|
||||||
html += LibraryBrowser.getPosterViewHtml({
|
html += LibraryBrowser.getPosterViewHtml({
|
||||||
|
@ -125,7 +125,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
elem.innerHTML = html;
|
elem.innerHTML = html;
|
||||||
LibraryBrowser.createCardMenus(elem);
|
|
||||||
ImageLoader.lazyChildren(elem);
|
ImageLoader.lazyChildren(elem);
|
||||||
}
|
}
|
||||||
return function (view, params, tabContent) {
|
return function (view, params, tabContent) {
|
||||||
|
|
|
@ -43,6 +43,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="searchResults hide itemsContainer"></div>
|
<div is="emby-itemscontainer" class="searchResults hide itemsContainer"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
|
@ -22,7 +22,7 @@
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="resumableItems" class="itemsContainer noautoinit">
|
<div is="emby-itemscontainer" id="resumableItems" class="itemsContainer">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
<span>${ButtonSync}</span>
|
<span>${ButtonSync}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="nextUpItems" class="itemsContainer">
|
<div is="emby-itemscontainer" id="nextUpItems" class="itemsContainer">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p class="noNextUpItems" style="display: none;">${NoNextUpItemsMessage}</p>
|
<p class="noNextUpItems" style="display: none;">${NoNextUpItemsMessage}</p>
|
||||||
|
@ -48,7 +48,7 @@
|
||||||
<span>${ButtonSync}</span>
|
<span>${ButtonSync}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="latestEpisodes" class="itemsContainer">
|
<div is="emby-itemscontainer" id="latestEpisodes" class="itemsContainer">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -96,14 +96,14 @@
|
||||||
<div style="text-align: center; display: flex; align-items: center; justify-content: center;">
|
<div style="text-align: center; display: flex; align-items: center; justify-content: center;">
|
||||||
<button is="paper-icon-button-light" class="btnSelectView autoSize" title="${ButtonSelectView}"><i class="md-icon">view_comfy</i></button>
|
<button is="paper-icon-button-light" class="btnSelectView autoSize" title="${ButtonSelectView}"><i class="md-icon">view_comfy</i></button>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pageTabContent ehsContent" id="studiosTab" data-index="6">
|
<div class="pageTabContent ehsContent" id="studiosTab" data-index="6">
|
||||||
<div class="viewSettings">
|
<div class="viewSettings">
|
||||||
<div class="listTopPaging">
|
<div class="listTopPaging">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="items" class="itemsContainer paddedItemsContainer" style="text-align: center;"></div>
|
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer" style="text-align: center;"></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div data-role="content">
|
<div data-role="content">
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue