update listviews

This commit is contained in:
Luke Pulverenti 2016-07-17 14:55:07 -04:00
parent d9c694f564
commit f3cde16786
51 changed files with 402 additions and 333 deletions

View File

@ -15,12 +15,12 @@
},
"devDependencies": {},
"ignore": [],
"version": "1.4.91",
"_release": "1.4.91",
"version": "1.4.93",
"_release": "1.4.93",
"_resolution": {
"type": "version",
"tag": "1.4.91",
"commit": "a4c5466d5a59e57b157aa941fcadb1e0df602f75"
"tag": "1.4.93",
"commit": "8b6b445547b02a088fbafed08120ed87c4004df5"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0",

View File

@ -1,4 +1,4 @@
define(['itemShortcuts', 'connectionManager', 'registerElement'], function (itemShortcuts, connectionManager) {
define(['itemShortcuts', 'connectionManager', 'layoutManager', 'browser', 'registerElement'], function (itemShortcuts, connectionManager, layoutManager, browser) {
var ItemsContainerProtoType = Object.create(HTMLDivElement.prototype);
@ -85,23 +85,99 @@
function onClick(e) {
var itemsContainer = this;
var target = e.target;
var menuButton = parentWithClass(e.target, 'menuButton');
var menuButton = parentWithClass(target, 'menuButton');
if (menuButton) {
showContextMenu(menuButton, itemsContainer);
e.stopPropagation();
return false;
var card = parentWithAttribute(target, 'data-id');
if (card) {
showContextMenu(card, target);
e.stopPropagation();
return false;
}
}
itemShortcuts.onClick.call(this, e);
}
function disableEvent(e) {
e.preventDefault();
e.stopPropagation();
return false;
}
function showContextMenu(card, target, options) {
var itemId = card.getAttribute('data-id');
var serverId = card.getAttribute('data-serverid');
var type = card.getAttribute('data-type');
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: target
}));
});
});
}
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, {});
//}
showContextMenu(card, target, {
identify: false
});
}
e.preventDefault();
e.stopPropagation();
return false;
}
function getShortcutOptions() {
return {
click: false
};
}
ItemsContainerProtoType.attachedCallback = function () {
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);
}
itemShortcuts.on(this, getShortcutOptions());
};
ItemsContainerProtoType.detachedCallback = function () {
this.removeEventListener('click', onClick);
itemShortcuts.off(this);
this.removeEventListener('contextmenu', onContextMenu);
this.removeEventListener('contextmenu', disableEvent);
itemShortcuts.off(this, getShortcutOptions());
};
document.registerElement('emby-itemscontainer', {

View File

@ -39,20 +39,24 @@ 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 (!isTheater) {
if (options.edit !== false) {
commands.push({
name: globalize.translate('sharedcomponents#EditInfo'),
id: 'edit'
});
}
if (options.editImages !== false) {
commands.push({
name: globalize.translate('sharedcomponents#EditImages'),
id: 'editimages'
});
}
if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') {
}
if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') {
if (options.editSubtitles !== false) {
commands.push({
name: globalize.translate('sharedcomponents#EditSubtitles'),
id: 'editsubtitles'

View File

@ -282,7 +282,12 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
html += '</div>';
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) {

View File

@ -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") {
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);
}
if (item.Type == 'Audio' && item.Container) {
if (options.container !== false && item.Type == 'Audio' && item.Container) {
miscInfo.push(item.Container);
}

View File

@ -235,6 +235,10 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
if (action) {
executeAction(card, action);
e.preventDefault();
e.stopPropagation();
return false;
}
}
}
@ -277,20 +281,34 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
}
}
function on(context) {
context.addEventListener('click', onClick);
inputManager.on(context, onCommand);
function on(context, options) {
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);
inputManager.off(context, onCommand);
if (options.command !== false) {
inputManager.off(context, onCommand);
}
}
return {
on: on,
off: off,
execute: executeAction
execute: executeAction,
onClick: onClick
};
});

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Special - {0}",
"Share": "Del",
"ServerUpdateNeeded": "Denne Emby server b\u00f8r opdateres. For at downloade den nyeste version bes\u00f8g venligst {0}",

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Special - {0}",
"Share": "Teilen",
"ServerUpdateNeeded": "Dieser Emby Server sollte aktualisiert werden. Um die neueste Version zu laden, besuche bitte {0}",

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Especial - {0}",
"Share": "Compartir",
"ServerUpdateNeeded": "Este Servidor Emby necesita ser actualizado. Para descargar la ultima versi\u00f3n, por favor visite {0}",

View File

@ -0,0 +1,116 @@
{
"EditInfo": "Modifier les informations",
"RemoveFromPlaylist": "Supprimer de la liste de lecture",
"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"
}

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "\u0410\u0440\u043d\u0430\u0439\u044b - {0}",
"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",
@ -92,23 +94,23 @@
"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.",
"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}",
"Unrated": "Unrated",
"Favorite": "Favorite",
"Like": "Like",
"Dislike": "Dislike",
"Played": "Played",
"ValueDiscNumber": "{0}-\u0434\u0438\u0441\u043a\u0456",
"Unrated": "\u0411\u0430\u0493\u0430\u043b\u0430\u043d\u0431\u0430\u0493\u0430\u043d",
"Favorite": "\u0422\u0430\u04a3\u0434\u0430\u0443\u043b\u044b",
"Like": "\u04b0\u043d\u0430\u0439\u0434\u044b",
"Dislike": "\u04b0\u043d\u0430\u043c\u0430\u0439\u0434\u044b",
"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.",
"Open": "Open",
"Play": "Play",
"Queue": "Queue",
"Shuffle": "Shuffle",
"Identify": "Identify",
"EditImages": "Edit Images",
"Sync": "Sync",
"InstantMix": "Instant Mix",
"ViewAlbum": "View Album",
"ViewArtist": "View Artist",
"QueueAllFromHere": "Queue All from Here",
"PlayAllFromHere": "Play All from Here"
"Open": "\u0410\u0448\u0443",
"Play": "\u041e\u0439\u043d\u0430\u0442\u0443",
"Queue": "\u041a\u0435\u0437\u0435\u043a",
"Shuffle": "\u0410\u0440\u0430\u043b\u0430\u0441\u0442\u044b\u0440\u0443",
"Identify": "\u0410\u043d\u044b\u049b\u0442\u0430\u0443",
"EditImages": "\u0421\u0443\u0440\u0435\u0442\u0442\u0435\u0440\u0434\u0456 \u04e9\u04a3\u0434\u0435\u0443",
"Sync": "\u04ae\u043d\u0434\u0435\u0441\u0442\u0456\u0440\u0443",
"InstantMix": "\u041b\u0435\u0437\u0434\u0456\u043a \u049b\u043e\u0441\u043f\u0430",
"ViewAlbum": "\u0410\u043b\u044c\u0431\u043e\u043c\u0434\u044b \u049b\u0430\u0440\u0430\u0443",
"ViewArtist": "\u041e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b\u043d\u044b \u049b\u0430\u0440\u0430\u0443",
"QueueAllFromHere": "\u0411\u04b1\u043b \u0430\u0440\u0430\u0434\u0430\u043d \u0431\u04d9\u0440\u0456\u043d \u043a\u0435\u0437\u0435\u043a\u043a\u0435",
"PlayAllFromHere": "\u0411\u04b1\u043b \u0430\u0440\u0430\u0434\u0430\u043d \u0431\u04d9\u0440\u0456\u043d \u043e\u0439\u043d\u0430\u0442\u0443"
}

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Spesial - {0}",
"Share": "Del",
"ServerUpdateNeeded": "Denne Emby serveren trenger en oppdatering. For \u00e5 laste ned nyeste versjon, vennligst bes\u00f8k: {0}",

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Speciaal - {0}",
"Share": "Delen",
"ServerUpdateNeeded": "Deze Emby Server moet worden bijgewerkt. Om de laatste versie te downloaden, gaat u naar {0}",

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Especial - {0}",
"Share": "Compartilhar",
"ServerUpdateNeeded": "Este servidor Emby precisa ser atualizado. Para baixar a \u00faltima vers\u00e3o, por favor visite {0}",

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Especial - {0}",
"Share": "Partilhar",
"ServerUpdateNeeded": "Este Servidor Emby precisa ser atualizado. Para fazer download da vers\u00e3o mais recente, por favor visite {0}",

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "\u0421\u043f\u0435\u0446\u044d\u043f\u0438\u0437\u043e\u0434 - {0}",
"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}",
@ -92,23 +94,23 @@
"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.",
"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}",
"Unrated": "Unrated",
"Favorite": "Favorite",
"Like": "Like",
"Dislike": "Dislike",
"Played": "Played",
"ValueDiscNumber": "\u0414\u0438\u0441\u043a {0}",
"Unrated": "\u0411\u0435\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438",
"Favorite": "\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435",
"Like": "\u041d\u0440\u0430\u0432\u0438\u0442\u0441\u044f",
"Dislike": "\u041d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f",
"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.",
"Open": "Open",
"Play": "Play",
"Queue": "Queue",
"Shuffle": "Shuffle",
"Identify": "Identify",
"EditImages": "Edit Images",
"Sync": "Sync",
"InstantMix": "Instant Mix",
"ViewAlbum": "View Album",
"ViewArtist": "View Artist",
"QueueAllFromHere": "Queue All from Here",
"PlayAllFromHere": "Play All from Here"
"Open": "\u041e\u0442\u043a\u0440\u044b\u0442\u044c",
"Play": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438",
"Queue": "\u041e\u0447\u0435\u0440\u0435\u0434\u044c",
"Shuffle": "\u041f\u0435\u0440\u0435\u043c\u0435\u0448\u0430\u0442\u044c",
"Identify": "\u0420\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c",
"EditImages": "\u041f\u0440\u0430\u0432\u0438\u0442\u044c \u0440\u0438\u0441\u0443\u043d\u043a\u0438",
"Sync": "\u0421\u0438\u043d\u0445\u0440\u043e",
"InstantMix": "\u0410\u0432\u0442\u043e\u043c\u0438\u043a\u0441",
"ViewAlbum": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u043b\u044c\u0431\u043e\u043c",
"ViewArtist": "\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044f",
"QueueAllFromHere": "\u0412 \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0432\u0441\u0435 \u043e\u0442\u0441\u044e\u0434\u0430",
"PlayAllFromHere": "\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0432\u0441\u0435 \u043e\u0442\u0441\u044e\u0434\u0430"
}

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Specialavsnitt - {0}",
"Share": "Dela",
"ServerUpdateNeeded": "Den h\u00e4r Emby servern beh\u00f6ver uppdateras. F\u00f6r att ladda ner senaste versionen, g\u00e5 till {0}",
@ -92,23 +94,23 @@
"HeaderYouSaid": "Du sa...",
"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.",
"ValueDiscNumber": "Disc {0}",
"Unrated": "Unrated",
"Favorite": "Favorite",
"Like": "Like",
"Dislike": "Dislike",
"Played": "Played",
"ValueDiscNumber": "Skiva {0}",
"Unrated": "Ej klassad",
"Favorite": "Favorit",
"Like": "Gilla",
"Dislike": "Ogilla",
"Played": "Visad",
"RefreshDialogHelp": "Metadata uppdateras baserat p\u00e5 inst\u00e4llningar och internettj\u00e4nster som har aktiverats under Emby servers kontrollpanel.",
"Open": "Open",
"Play": "Play",
"Queue": "Queue",
"Shuffle": "Shuffle",
"Identify": "Identify",
"EditImages": "Edit Images",
"Sync": "Sync",
"InstantMix": "Instant Mix",
"ViewAlbum": "View Album",
"ViewArtist": "View Artist",
"QueueAllFromHere": "Queue All from Here",
"PlayAllFromHere": "Play All from Here"
"Open": "\u00d6ppna",
"Play": "Spela",
"Queue": "K\u00f6a",
"Shuffle": "Blanda",
"Identify": "Identifiera",
"EditImages": "\u00c4ndra bilder",
"Sync": "Synk",
"InstantMix": "Instant mix",
"ViewAlbum": "Bl\u00e4ddra album",
"ViewArtist": "Bl\u00e4ddra artist",
"QueueAllFromHere": "K\u00f6a alla h\u00e4rifr\u00e5n",
"PlayAllFromHere": "Spela upp alla h\u00e4rifr\u00e5n"
}

View File

@ -1,4 +1,6 @@
{
"EditInfo": "Edit Info",
"RemoveFromPlaylist": "Remove from Playlist",
"ValueSpecialEpisodeName": "Special - {0}",
"Share": "\u5206\u4eab",
"ServerUpdateNeeded": "\u6b64Emby\u4f3a\u670d\u5668\u9700\u8981\u66f4\u65b0\uff0c\u8acb\u81f3{0}\u53d6\u5f97\u6700\u65b0\u7248\u672c",

View File

@ -6,6 +6,6 @@
<div class="listTopPaging">
</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>

View File

@ -10,7 +10,7 @@
<div class="pageTabContent ehsContent" id="channelsTab" data-index="1">
<div class="viewSettings">
</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 data-role="content">

View File

@ -1,4 +1,4 @@
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
function enableScrollX() {
return browserInfo.mobile && AppInfo.enableAppLayouts;
@ -83,9 +83,9 @@
html += '</div>';
if (enableScrollX()) {
html += '<div class="itemsContainer hiddenScrollX">';
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += libraryBrowser.getPosterViewHtml({
@ -109,7 +109,6 @@
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
libraryBrowser.createCardMenus(elem);
});
}

View File

@ -285,6 +285,8 @@
item: currentItem,
positionTo: button,
edit: false,
editImages: true,
editSubtitles: true,
sync: false,
share: false

View File

@ -769,9 +769,6 @@
});
Events.on(MediaController, 'playerchange', onPlayerChange);
libraryBrowser.createCardMenus(context.querySelector('.itemsContainer'));
}
function onDialogClosed(e) {

View File

@ -25,7 +25,7 @@
<span>${ButtonSync}</span>
</button>
</div>
<div id="nextUpItems" class="itemsContainer">
<div is="emby-itemscontainer" id="nextUpItems" class="itemsContainer">
</div>
</div>
<p class="noNextUpItems hide">${NoNextUpItemsMessage}</p>

View File

@ -74,14 +74,14 @@
<h1>
${HeaderNextUp}
</h1>
<div class="smallItemsContainer nextUpItems"></div>
<div is="emby-itemscontainer" class="smallItemsContainer nextUpItems"></div>
</div>
<div id="childrenCollapsible" class="hide detailSection">
<h1 class="childrenSectionHeader">
<span id="childrenTitle"></span>
</h1>
<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 id="additionalPartsCollapsible" class="detailSection hide">

View File

@ -12,12 +12,12 @@
<div class="is-active pageTabContent ehsContent" id="suggestionsTab" data-index="0">
<div id="activePrograms" class="homePageSection">
<h1 class="listHeader">${HeaderWhatsOnTV}</h1>
<div class="activeProgramItems itemsContainer noautoinit"></div>
<div is="emby-itemscontainer" class="activeProgramItems itemsContainer"></div>
<br />
</div>
<div id="upcomingPrograms" class="homePageSection" style="margin-top: 1em;">
<h1 class="listHeader">${HeaderUpcomingPrograms}</h1>
<div class="upcomingProgramItems itemsContainer noautoinit"></div>
<div is="emby-itemscontainer" class="upcomingProgramItems itemsContainer"></div>
<br />
</div>
<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>
<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 class="upcomingTvMovieItems itemsContainer noautoinit"></div>
<div is="emby-itemscontainer" class="upcomingTvMovieItems itemsContainer"></div>
<br />
</div>
<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>
<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 class="upcomingSportsItems itemsContainer noautoinit"></div>
<div is="emby-itemscontainer" class="upcomingSportsItems itemsContainer"></div>
<br />
</div>
<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>
<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 class="upcomingKidsItems itemsContainer noautoinit"></div>
<div is="emby-itemscontainer" class="upcomingKidsItems itemsContainer"></div>
<br />
</div>
</div>
@ -52,12 +52,12 @@
<div class="paging"></div>
<button is="paper-icon-button-light" class="btnFilter autoSize" title="${ButtonFilter}"><i class="md-icon">filter_list</i></button>
</div>
<div id="items" class="itemsContainer"></div>
<div is="emby-itemscontainer" id="items" class="itemsContainer"></div>
</div>
<div class="pageTabContent ehsContent" id="recordingsTab" data-index="3">
<div id="activeRecordings" class="homePageSection hide">
<h1 class="listHeader">${HeaderActiveRecordings}</h1>
<div class="recordingItems itemsContainer"></div>
<div is="emby-itemscontainer" class="recordingItems itemsContainer"></div>
<br />
</div>
<div id="latestRecordings" class="homePageSection hide">
@ -68,7 +68,7 @@
<span>${ButtonSync}</span>
</button>
</div>
<div class="recordingItems itemsContainer"></div>
<div is="emby-itemscontainer" class="recordingItems itemsContainer"></div>
<br />
</div>
<div id="upcomingRecordings" class="homePageSection hide">

View File

@ -4,7 +4,7 @@
<div class="viewSettings">
<div class="listTopPaging"></div>
</div>
<div id="items" class="itemsContainer paddedItemsContainer"></div>
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
</div>
</div>

View File

@ -20,7 +20,7 @@
</button>
</div>
<div id="resumableItems" class="itemsContainer noautoinit">
<div is="emby-itemscontainer" id="resumableItems" class="itemsContainer">
</div>
</div>
@ -33,7 +33,7 @@
</button>
</div>
<div id="recentlyAddedItems" class="itemsContainer noautoinit">
<div is="emby-itemscontainer" id="recentlyAddedItems" class="itemsContainer">
</div>
</div>
@ -98,14 +98,14 @@
<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>
</div>
<div id="items" class="itemsContainer paddedItemsContainer"></div>
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
</div>
<div class="pageTabContent ehsContent" id="studiosTab" data-index="5">
<div class="viewSettings">
<div class="listTopPaging">
</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 data-role="content">

View File

@ -15,28 +15,28 @@
<div class="homePageSection">
<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 id="playlists" class="homePageSection hide">
<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 id="recentlyPlayed" class="homePageSection hide">
<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 id="topPlayed" class="homePageSection hide">
<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>
@ -108,14 +108,14 @@
<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>
</div>
<div id="items" class="itemsContainer paddedItemsContainer"></div>
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
</div>
<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 class="paging"></div>
</div>
<div class="itemsContainer itemsContainerWithAlphaPicker">
<div is="emby-itemscontainer" class="itemsContainer itemsContainerWithAlphaPicker">
</div>
<div style="text-align: center; display: flex; flex-wrap: wrap; align-items: center; justify-content: center;padding:.7em .5em;">
<div class="paging"></div>

View File

@ -1,4 +1,4 @@
define(['jQuery'], function ($) {
define(['jQuery', 'emby-itemscontainer'], function ($) {
var data = {};

View File

@ -1,4 +1,4 @@
define(['libraryBrowser'], function (libraryBrowser) {
define(['libraryBrowser', 'emby-itemscontainer'], function (libraryBrowser) {
// The base query options
var query = {

View File

@ -1,4 +1,4 @@
define([], function () {
define(['emby-itemscontainer'], function () {
function getNextUpPromise() {

View File

@ -1,4 +1,4 @@
define(['datetime', 'scrollStyles'], function (datetime) {
define(['datetime', 'emby-itemscontainer', 'scrollStyles'], function (datetime) {
function getUpcomingPromise() {
@ -100,9 +100,9 @@
html += '<h1 class="listHeader">' + group.name + '</h1>';
if (enableScrollX()) {
html += '<div class="itemsContainer hiddenScrollX">';
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
@ -124,7 +124,6 @@
}
elem.innerHTML = html;
LibraryBrowser.createCardMenus(elem);
ImageLoader.lazyChildren(elem);
}
return function (view, params, tabContent) {

View File

@ -256,7 +256,6 @@
var itemsContainer = element.querySelector('.itemsContainer');
itemsContainer.innerHTML = html;
LibraryBrowser.createCardMenus(itemsContainer);
ImageLoader.lazyChildren(itemsContainer);
});
}

View File

@ -345,7 +345,6 @@
itemsContainer.innerHTML = html;
ImageLoader.lazyChildren(itemsContainer);
LibraryBrowser.createCardMenus(itemsContainer);
});
}
@ -765,9 +764,9 @@
var html = '';
if (enableScrollX()) {
html += '<div class="hiddenScrollX itemsContainer">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
@ -787,7 +786,6 @@
var similarContent = page.querySelector('#similarContent');
similarContent.innerHTML = html;
ImageLoader.lazyChildren(similarContent);
LibraryBrowser.createCardMenus(similarContent);
});
}
@ -1006,8 +1004,6 @@
elem.classList.remove('hiddenScrollX');
}
LibraryBrowser.createCardMenus(elem);
if (item.Type == "BoxSet") {
var collectionItemTypes = [
@ -1112,11 +1108,6 @@
if (!items.length) {
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) {

View File

@ -903,7 +903,7 @@
atts.push({
name: 'serverid',
value: item.ServerId
value: item.ServerId || options.serverId
});
atts.push({
@ -1546,7 +1546,7 @@
anchorCssClass += ' mediaItem';
if (options.defaultAction) {
anchorCssClass += ' itemWithAction';
anchorCssClass += ' itemAction';
}
var transition = options.transition === false || !AppInfo.enableSectionTransitions ? '' : ' data-transition="slide"';

View File

@ -216,45 +216,6 @@
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;
@ -525,14 +486,7 @@
curr.removeEventListener('click', onCardClick);
curr.addEventListener('click', onCardClick);
if (AppInfo.isTouchPreferred) {
curr.removeEventListener('contextmenu', disableEvent);
curr.addEventListener('contextmenu', disableEvent);
}
else {
curr.removeEventListener('contextmenu', onContextMenu);
curr.addEventListener('contextmenu', onContextMenu);
if (!AppInfo.isTouchPreferred) {
curr.removeEventListener('mouseenter', onHoverIn);
curr.addEventListener('mouseenter', onHoverIn, true);
@ -544,7 +498,7 @@
curr.addEventListener("touchstart", preventTouchHover);
}
initTapHoldMenus(curr);
//initTapHoldMenus(curr);
};
function initTapHoldMenus(elem) {
@ -616,12 +570,6 @@
});
}
function disableEvent(e) {
e.preventDefault();
e.stopPropagation();
return false;
}
function onTapHold(e) {
var card = parentWithClass(e.target, 'card');
@ -989,80 +937,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) {
var apiClient = window.ApiClient;
@ -1106,16 +980,8 @@
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');
for (i = 0, length = categorySyncButtons.length; i < length; i++) {
for (var i = 0, length = categorySyncButtons.length; i < length; i++) {
categorySyncButtons[i].addEventListener('click', onCategorySyncButtonClick);
}
});

View File

@ -1,4 +1,4 @@
define([], function () {
define(['emby-itemscontainer'], function () {
return function (view, params, tabContent) {

View File

@ -1,4 +1,4 @@
define([], function () {
define(['emby-itemscontainer'], function () {
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');

View File

@ -149,7 +149,6 @@
elem.querySelector('.recordingItems').innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}

View File

@ -1,4 +1,4 @@
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
function enableScrollX() {
return browserInfo.mobile && AppInfo.enableAppLayouts;
@ -133,7 +133,6 @@
} else {
containers[i].classList.remove('hiddenScrollX');
}
LibraryBrowser.createCardMenus(containers[i]);
}
};

View File

@ -1,4 +1,4 @@
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
function getView() {
@ -167,9 +167,9 @@
html += '<h1 class="listHeader">' + title + '</h1>';
if (enableScrollX()) {
html += '<div class="hiddenScrollX">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX">';
} else {
html += '<div>';
html += '<div is="emby-itemscontainer">';
}
var view = getView();
@ -247,8 +247,6 @@
} else {
containers[i].classList.remove('hiddenScrollX');
}
libraryBrowser.createCardMenus(containers[i]);
}
}
@ -281,8 +279,6 @@
loadSuggestionsTab(view, params, tabContent);
};
libraryBrowser.createCardMenus(view.querySelector('.recommendations'));
var mdlTabs = view.querySelector('.libraryViewNav');
var baseUrl = 'movies.html';

View File

@ -1,4 +1,4 @@
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
function itemsPerRow() {
@ -258,8 +258,6 @@
} else {
containers[i].classList.remove('hiddenScrollX');
}
LibraryBrowser.createCardMenus(containers[i]);
}
};

View File

@ -93,7 +93,6 @@
});
});
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
$('.btnNextPage', elem).on('click', function () {
query.StartIndex += query.Limit;

View File

@ -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) {
@ -121,7 +121,8 @@
centerImage: true,
centerText: true,
textLines: getAdditionalTextLines,
overlayPlayButton: true
overlayPlayButton: true,
serverId: ApiClient.serverInfo().Id
});
var itemsContainer = searchResults;
@ -176,8 +177,6 @@
loadSuggestions(view);
}
libraryBrowser.createCardMenus(searchResults);
view.querySelector('.txtSearch').addEventListener('input', function () {
onSearchChange(this.value);
});

View File

@ -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) {
@ -302,7 +302,7 @@
html += '</div>';
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
html += LibraryBrowser.getPosterViewHtml({
items: items,
@ -322,8 +322,6 @@
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}
@ -347,9 +345,9 @@
if (items.length) {
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestMovies') + '</h1>';
if (scrollX) {
html += '<div class="hiddenScrollX itemsContainer">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
items: items,
@ -366,8 +364,6 @@
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}
@ -391,9 +387,9 @@
if (items.length) {
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestEpisodes') + '</h1>';
if (scrollX) {
html += '<div class="hiddenScrollX itemsContainer">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
@ -411,8 +407,6 @@
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}
@ -434,7 +428,7 @@
if (result.Items.length) {
html += '<h1 class="listHeader">' + Globalize.translate('HeaderLatestChannelMedia') + '</h1>';
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: 'auto',
@ -449,8 +443,6 @@
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}
@ -478,9 +470,9 @@
var scrollX = enableScrollX() && browserInfo.safari && screenWidth > 800;
if (scrollX) {
html += '<div class="hiddenScrollX itemsContainer homeTopViews">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer homeTopViews">';
} else {
html += '<div class="itemsContainer homeTopViews">';
html += '<div is="emby-itemscontainer" class="itemsContainer homeTopViews">';
}
html += LibraryBrowser.getPosterViewHtml({
items: items,
@ -506,8 +498,6 @@
elem.innerHTML = html + infoHtml;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem, { showDetailsMenu: false });
});
});
}
@ -539,9 +529,9 @@
if (result.Items.length) {
html += '<h1 class="listHeader">' + Globalize.translate('HeaderResume') + '</h1>';
if (enableScrollX()) {
html += '<div class="hiddenScrollX itemsContainer">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
@ -562,7 +552,6 @@
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}
@ -584,9 +573,9 @@
if (result.Items.length) {
html += '<h1 class="listHeader">' + Globalize.translate('HeaderNextUp') + '</h1>';
if (enableScrollX()) {
html += '<div class="hiddenScrollX itemsContainer">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
@ -606,7 +595,6 @@
elem.innerHTML = html;
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 += '</div>';
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" is="emby-itemscontainer" class="itemsContainer">';
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
shape: 'autohome',
@ -685,8 +673,6 @@
var elem = page.querySelector('#channel' + channel.Id + '');
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}
@ -715,9 +701,9 @@
}
if (enableScrollX()) {
html += '<div class="hiddenScrollX itemsContainer">';
html += '<div is="emby-itemscontainer" class="hiddenScrollX itemsContainer">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
items: result.Items,
@ -734,7 +720,6 @@
elem.innerHTML = html;
ImageLoader.lazyChildren(elem);
LibraryBrowser.createCardMenus(elem);
});
}

View File

@ -2035,6 +2035,9 @@ var AppInfo = {};
},
canPlay: function (item) {
return MediaController.canPlay(item);
},
instantMix: function (item) {
return MediaController.instantMix(item);
}
};
});
@ -2287,7 +2290,7 @@ var AppInfo = {};
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) {
return {
@ -3248,7 +3251,7 @@ var AppInfo = {};
}
function upgradeLayouts() {
if (!AppInfo.enableAppLayouts && browserInfo.mobile) {
if (!AppInfo.enableAppLayouts) {
Dashboard.getPluginSecurityInfo().then(function (info) {
if (info.IsMBSupporter) {
AppInfo.enableAppLayouts = true;

View File

@ -1,4 +1,4 @@
define(['libraryBrowser', 'scrollStyles'], function (libraryBrowser) {
define(['libraryBrowser', 'scrollStyles', 'emby-itemscontainer'], function (libraryBrowser) {
return function (view, params) {
@ -165,7 +165,6 @@
} else {
tabContent.querySelector('#resumableItems').classList.remove('hiddenScrollX');
}
libraryBrowser.createCardMenus(tabContent.querySelector('#resumableItems'));
};
self.renderTab = function () {
@ -273,7 +272,6 @@
} else {
view.querySelector('#resumableItems').classList.remove('hiddenScrollX');
}
libraryBrowser.createCardMenus(view.querySelector('#resumableItems'));
libraryBrowser.configurePaperLibraryTabs(view, mdlTabs, view.querySelectorAll('.pageTabContent'), [0, 1, 2, 4, 5, 6]);
mdlTabs.addEventListener('beforetabchange', function (e) {

View File

@ -1,4 +1,4 @@
define(['datetime', 'scrollStyles'], function (datetime) {
define(['datetime', 'scrollStyles', 'emby-itemscontainer'], function (datetime) {
function getUpcomingPromise(context, params) {
@ -102,9 +102,9 @@
html += '<h1 class="listHeader">' + group.name + '</h1>';
if (enableScrollX()) {
html += '<div class="itemsContainer hiddenScrollX">';
html += '<div is="emby-itemscontainer" class="itemsContainer hiddenScrollX">';
} else {
html += '<div class="itemsContainer">';
html += '<div is="emby-itemscontainer" class="itemsContainer">';
}
html += LibraryBrowser.getPosterViewHtml({
@ -125,7 +125,6 @@
}
elem.innerHTML = html;
LibraryBrowser.createCardMenus(elem);
ImageLoader.lazyChildren(elem);
}
return function (view, params, tabContent) {

View File

@ -43,6 +43,6 @@
</div>
</div>
<div class="searchResults hide itemsContainer"></div>
<div is="emby-itemscontainer" class="searchResults hide itemsContainer"></div>
</div>
</div>

View File

@ -22,7 +22,7 @@
</button>
</div>
<div id="resumableItems" class="itemsContainer noautoinit">
<div is="emby-itemscontainer" id="resumableItems" class="itemsContainer">
</div>
</div>
@ -34,7 +34,7 @@
<span>${ButtonSync}</span>
</button>
</div>
<div id="nextUpItems" class="itemsContainer">
<div is="emby-itemscontainer" id="nextUpItems" class="itemsContainer">
</div>
</div>
<p class="noNextUpItems" style="display: none;">${NoNextUpItemsMessage}</p>
@ -48,7 +48,7 @@
<span>${ButtonSync}</span>
</button>
</div>
<div id="latestEpisodes" class="itemsContainer">
<div is="emby-itemscontainer" id="latestEpisodes" class="itemsContainer">
</div>
</div>
</div>
@ -96,14 +96,14 @@
<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>
</div>
<div id="items" class="itemsContainer paddedItemsContainer"></div>
<div is="emby-itemscontainer" id="items" class="itemsContainer paddedItemsContainer"></div>
</div>
<div class="pageTabContent ehsContent" id="studiosTab" data-index="6">
<div class="viewSettings">
<div class="listTopPaging">
</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 data-role="content">