diff --git a/dashboard-ui/bower_components/emby-apiclient/.bower.json b/dashboard-ui/bower_components/emby-apiclient/.bower.json index d68eeba61f..945ed79613 100644 --- a/dashboard-ui/bower_components/emby-apiclient/.bower.json +++ b/dashboard-ui/bower_components/emby-apiclient/.bower.json @@ -16,12 +16,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.1.64", - "_release": "1.1.64", + "version": "1.1.65", + "_release": "1.1.65", "_resolution": { "type": "version", - "tag": "1.1.64", - "commit": "a1d00ddc6a767b00a588729b13c8202b99b1eadb" + "tag": "1.1.65", + "commit": "7ba3ab66a503b3cf099ff63a7dc923490401c0bc" }, "_source": "https://github.com/MediaBrowser/Emby.ApiClient.Javascript.git", "_target": "^1.1.51", diff --git a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js index 71845c59bf..68061a87cf 100644 --- a/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js +++ b/dashboard-ui/bower_components/emby-apiclient/connectionmanager.js @@ -215,7 +215,7 @@ return connectUser; }; - var minServerVersion = '3.0.5882'; + var minServerVersion = '3.0.5911'; self.minServerVersion = function (val) { if (val) { diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index 3080f5b978..4480485a45 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -15,12 +15,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.78", - "_release": "1.4.78", + "version": "1.4.91", + "_release": "1.4.91", "_resolution": { "type": "version", - "tag": "1.4.78", - "commit": "33c9381ec8872ebd87e46def5a2b86dcbf952f0d" + "tag": "1.4.91", + "commit": "a4c5466d5a59e57b157aa941fcadb1e0df602f75" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.0", diff --git a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js index 3ff151b3dd..6d40530d21 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js +++ b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js @@ -112,8 +112,8 @@ } else { dialogOptions.modal = false; - dialogOptions.entryAnimationDuration = 160; - dialogOptions.exitAnimationDuration = 200; + dialogOptions.entryAnimationDuration = 140; + dialogOptions.exitAnimationDuration = 180; dialogOptions.autoFocus = false; } diff --git a/dashboard-ui/bower_components/emby-webcomponents/browser.js b/dashboard-ui/bower_components/emby-webcomponents/browser.js index bb64e7b349..955c1dafc5 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/browser.js +++ b/dashboard-ui/bower_components/emby-webcomponents/browser.js @@ -134,7 +134,7 @@ browser.xboxOne = userAgent.toLowerCase().indexOf('xbox') != -1; browser.animate = document.documentElement.animate != null; - browser.tizen = userAgent.toLowerCase().indexOf('tizen') != -1; + browser.tizen = userAgent.toLowerCase().indexOf('tizen') != -1 || userAgent.toLowerCase().indexOf('smarthub') != -1; browser.web0s = userAgent.toLowerCase().indexOf('Web0S'.toLowerCase()) != -1; browser.tv = isTv(); diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js b/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js new file mode 100644 index 0000000000..751c121495 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-itemscontainer/emby-itemscontainer.js @@ -0,0 +1,111 @@ +define(['itemShortcuts', 'connectionManager', 'registerElement'], function (itemShortcuts, connectionManager) { + + 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) { + + while (!elem.getAttribute(name)) { + elem = elem.parentNode; + + if (!elem) { + return null; + } + } + + 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) { + + var itemsContainer = this; + + var menuButton = parentWithClass(e.target, 'menuButton'); + if (menuButton) { + showContextMenu(menuButton, itemsContainer); + e.stopPropagation(); + return false; + } + } + + ItemsContainerProtoType.attachedCallback = function () { + this.addEventListener('click', onClick); + itemShortcuts.on(this); + }; + + ItemsContainerProtoType.detachedCallback = function () { + this.removeEventListener('click', onClick); + itemShortcuts.off(this); + }; + + document.registerElement('emby-itemscontainer', { + prototype: ItemsContainerProtoType, + extends: 'div' + }); +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css index 0ce002f1a1..dc35703038 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css +++ b/dashboard-ui/bower_components/emby-webcomponents/indicators/indicators.css @@ -8,8 +8,58 @@ top: 0; left: 0; bottom: 0; + background-color: #52B54B; } .timerIndicator { color: #CB272A; -} \ No newline at end of file +} + +.indicator + .indicator { + margin-left: .25em; +} + +.countIndicator { + background: rgba(82,181,75,1); + border-radius: 500px; + display: -ms-flex; + display: -webkit-flex; + display: flex; + align-items: center; + justify-content: center; + font-weight: 500; + color: #fff; +} + +.playedIndicator { + background: rgba(82,181,75,1); + border-radius: 500px; + display: -ms-flex; + display: -webkit-flex; + display: flex; + align-items: center; + justify-content: center; + color: #fff; +} + +.countIndicator, .playedIndicator { + width: 28px; + height: 28px; +} + + .playedIndicator i { + width: 22px; + height: 22px; + font-size: 22px; + } + +.layout-tv .countIndicator, .layout-tv .playedIndicator { + width: 3.8vh; + height: 3.8vh; +} + + .layout-tv .playedIndicator i { + width: 2.6vh; + height: 2.6vh; + font-size: 2.6vh; + } diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js index 67b09637a1..8d8afc0752 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js @@ -1,4 +1,9 @@ -define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (appHost, globalize, connectionManager, itemHelper) { +define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter', 'playbackManager'], function (appHost, globalize, connectionManager, itemHelper, embyRouter, playbackManager) { + + var isTheater = true; + appHost.appInfo().then(function (result) { + isTheater = result.appName.toLowerCase().indexOf('theater') != -1; + }); function getCommands(options) { @@ -7,6 +12,8 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap var serverId = item.ServerId; var apiClient = connectionManager.getApiClient(serverId); + var canPlay = playbackManager.canPlay(item); + return apiClient.getCurrentUser().then(function (user) { var commands = []; @@ -32,12 +39,25 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap }); } - if (user.Policy.IsAdministrator) { - if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') { - commands.push({ - name: globalize.translate('sharedcomponents#EditSubtitles'), - id: 'editsubtitles' - }); + if (options.edit !== false) { + if (itemHelper.canEdit(user, item.Type)) { + + if (!isTheater) { + commands.push({ + name: globalize.translate('sharedcomponents#EditInfo'), + id: 'edit' + }); + commands.push({ + name: globalize.translate('sharedcomponents#EditImages'), + id: 'editimages' + }); + } + if (item.MediaType == 'Video' && item.Type != 'TvChannel' && item.Type != 'Program' && item.LocationType != 'Virtual') { + commands.push({ + name: globalize.translate('sharedcomponents#EditSubtitles'), + id: 'editsubtitles' + }); + } } } @@ -48,18 +68,135 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap }); } - if (user.Policy.IsAdministrator) { + if (!isTheater && options.identify !== false) { + if (itemHelper.canIdentify(user, item.Type)) { + commands.push({ + name: globalize.translate('sharedcomponents#Identify'), + id: 'identify' + }); + } + } + + if (item.MediaType == "Audio" || item.Type == "MusicAlbum" || item.Type == "MusicArtist" || item.Type == "MusicGenre" || item.CollectionType == "music") { + if (options.instantMix !== false) { + commands.push({ + name: globalize.translate('sharedcomponents#InstantMix'), + id: 'instantmix' + }); + } + } + + if (options.open !== false) { + if (item.Type != 'Timer' && item.Type != 'Audio') { + commands.push({ + name: globalize.translate('sharedcomponents#Open'), + id: 'open' + }); + } + } + + if (canPlay) { + if (options.play !== false) { + commands.push({ + name: globalize.translate('sharedcomponents#Play'), + id: 'resume' + }); + } + + if (options.playAllFromHere) { + commands.push({ + name: globalize.translate('sharedcomponents#PlayAllFromHere'), + id: 'playallfromhere' + }); + } + + if (playbackManager.canQueueMediaType(item.MediaType)) { + if (options.queue !== false) { + commands.push({ + name: globalize.translate('sharedcomponents#Queue'), + id: 'queue' + }); + } + + if (options.queueAllFromHere) { + commands.push({ + name: globalize.translate('sharedcomponents#QueueAllFromHere'), + id: 'queueallfromhere' + }); + } + } + } + + if (item.Type == 'Program' && (!item.TimerId && !item.SeriesTimerId)) { commands.push({ - name: globalize.translate('Refresh'), - id: 'refresh' + name: Globalize.translate('sharedcomponents#Record'), + id: 'record' }); } - if (item.Type != 'Timer' && user.Policy.EnablePublicSharing && appHost.supports('sharing')) { + if (user.Policy.IsAdministrator) { + + if (item.Type != 'Timer') { + commands.push({ + name: globalize.translate('sharedcomponents#Refresh'), + id: 'refresh' + }); + } + } + + if (item.PlaylistItemId && options.playlistId) { commands.push({ - name: globalize.translate('Share'), - id: 'share' + name: globalize.translate('sharedcomponents#RemoveFromPlaylist'), + id: 'removefromplaylist' + }); + } + + if (options.collectionId) { + commands.push({ + name: globalize.translate('sharedcomponents#RemoveFromCollection'), + id: 'removefromcollection' + }); + } + + if (options.share !== false) { + if (itemHelper.canShare(user, item)) { + commands.push({ + name: globalize.translate('sharedcomponents#Share'), + id: 'share' + }); + } + } + + if (item.IsFolder || item.Type == "MusicArtist" || item.Type == "MusicGenre") { + if (options.shuffle !== false) { + commands.push({ + name: globalize.translate('sharedcomponents#Shuffle'), + id: 'shuffle' + }); + } + } + + if (!isTheater && options.sync !== false) { + if (itemHelper.canSync(user, item)) { + commands.push({ + name: globalize.translate('sharedcomponents#Sync'), + id: 'sync' + }); + } + } + + if (options.openAlbum !== false && item.AlbumId) { + commands.push({ + name: Globalize.translate('sharedcomponents#ViewAlbum'), + id: 'album' + }); + } + + if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) { + commands.push({ + name: Globalize.translate('sharedcomponents#ViewArtist'), + id: 'artist' }); } @@ -67,7 +204,18 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap }); } - function executeCommand(item, id) { + function getResolveFunction(resolve, id, changed, deleted) { + + return function () { + resolve({ + command: id, + updated: changed, + deleted: deleted + }); + }; + } + + function executeCommand(item, id, options) { var itemId = item.Id; var serverId = item.ServerId; @@ -85,7 +233,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap items: [itemId], serverId: serverId - }).then(reject, reject); + }).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); }); break; } @@ -97,7 +245,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap items: [itemId], serverId: serverId - }).then(reject, reject); + }).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); }); break; } @@ -115,7 +263,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap serverId: serverId }]); - reject(); + getResolveFunction(getResolveFunction(resolve, id), id)(); }); break; @@ -125,21 +273,81 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap require(['subtitleEditor'], function (subtitleEditor) { var serverId = apiClient.serverInfo().Id; - subtitleEditor.show(itemId, serverId).then(resolve, reject); + subtitleEditor.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); + }); + break; + } + case 'edit': + { + editItem(apiClient, item).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); + break; + } + case 'editimages': + { + require(['components/imageeditor/imageeditor'], function (ImageEditor) { + + ImageEditor.show(itemId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); + }); + break; + } + case 'identify': + { + require(['components/itemidentifier/itemidentifier'], function (itemidentifier) { + + itemidentifier.show(itemId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); }); break; } case 'refresh': { refresh(apiClient, itemId); - reject(); + getResolveFunction(resolve, id)(); + break; + } + case 'open': + { + embyRouter.showItem(item); + getResolveFunction(resolve, id)(); + break; + } + case 'play': + { + play(item, false); + getResolveFunction(resolve, id)(); + break; + } + case 'resume': + { + play(item, true); + getResolveFunction(resolve, id)(); + break; + } + case 'queue': + { + play(item, false, true); + getResolveFunction(resolve, id)(); + break; + } + case 'record': + require(['recordingCreator'], function (recordingCreator) { + recordingCreator.show(itemId, serverId).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id)); + }); + break; + case 'shuffle': + { + playbackManager.shuffle(item); + getResolveFunction(resolve, id)(); + break; + } + case 'instantmix': + { + playbackManager.instantMix(item); + getResolveFunction(resolve, id)(); break; } case 'delete': { - deleteItem(apiClient, itemId).then(function () { - resolve(true); - }); + deleteItem(apiClient, itemId).then(getResolveFunction(resolve, id, true, true), getResolveFunction(resolve, id)); break; } case 'share': @@ -149,10 +357,76 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap serverId: serverId, itemId: itemId - }).then(reject); + }).then(getResolveFunction(resolve, id)); }); break; } + case 'album': + { + embyRouter.showItem(item.AlbumId, item.ServerId); + getResolveFunction(resolve, id)(); + break; + } + case 'artist': + { + embyRouter.showItem(item.ArtistItems[0].Id, item.ServerId); + getResolveFunction(resolve, id)(); + break; + } + case 'playallfromhere': + { + getResolveFunction(resolve, id)(); + break; + } + case 'queueallfromhere': + { + getResolveFunction(resolve, id)(); + break; + } + case 'sync': + { + require(['syncDialog'], function (syncDialog) { + syncDialog.showMenu({ + items: [ + { + Id: itemId + }] + }); + }); + getResolveFunction(resolve, id)(); + break; + } + case 'removefromplaylist': + + apiClient.ajax({ + + url: apiClient.getUrl('Playlists/' + options.playlistId + '/Items', { + EntryIds: [item.PlaylistItemId].join(',') + }), + + type: 'DELETE' + + }).then(function () { + + getResolveFunction(resolve, id, true)(); + }); + + break; + case 'removefromcollection': + + apiClient.ajax({ + type: "DELETE", + url: apiClient.getUrl("Collections/" + options.collectionId + "/Items", { + + Ids: [item.Id].join(',') + }) + + }).then(function () { + + getResolveFunction(resolve, id, true)(); + }); + + break; default: reject(); break; @@ -160,6 +434,40 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap }); } + function play(item, resume, queue) { + + var method = queue ? 'queue' : 'play'; + + if (item.Type == 'Program') { + playbackManager[method]({ + ids: [item.ChannelId] + }); + } else { + playbackManager[method]({ + items: [item] + }); + } + } + + function editItem(apiClient, item) { + + 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 deleteItem(apiClient, itemId) { return new Promise(function (resolve, reject) { @@ -200,9 +508,12 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper'], function (ap require(['actionsheet'], function (actionSheet) { actionSheet.show({ - items: commands + + items: commands, + positionTo: options.positionTo + }).then(function (id) { - executeCommand(options.item, id).then(resolve); + executeCommand(options.item, id, options).then(resolve); }, reject); }); }); diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js b/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js index 1056f685f2..65bb913559 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js @@ -1,4 +1,4 @@ -define([], function () { +define(['apphost'], function (appHost) { function getDisplayName(item, options) { @@ -49,6 +49,11 @@ define([], function () { } function supportsAddingToCollection(item) { + + if (item.Type == 'Timer') { + return false; + } + var invalidTypes = ['Person', 'Genre', 'MusicGenre', 'Studio', 'GameGenre', 'BoxSet', 'Playlist', 'UserView', 'CollectionFolder', 'Audio', 'TvChannel', 'Program', 'MusicAlbum', 'Timer']; return !item.CollectionType && invalidTypes.indexOf(item.Type) == -1 && item.MediaType != 'Photo'; @@ -67,6 +72,58 @@ define([], function () { return { getDisplayName: getDisplayName, supportsAddingToCollection: supportsAddingToCollection, - supportsAddingToPlaylist: supportsAddingToPlaylist + supportsAddingToPlaylist: supportsAddingToPlaylist, + + canIdentify: function (user, itemType) { + + if (itemType == "Movie" || + itemType == "Trailer" || + itemType == "Series" || + itemType == "Game" || + itemType == "BoxSet" || + itemType == "Person" || + itemType == "Book" || + itemType == "MusicAlbum" || + itemType == "MusicArtist") { + + if (user.Policy.IsAdministrator) { + + return true; + } + } + + return false; + }, + + canEdit: function (user, itemType) { + + if (itemType == "UserRootFolder" || /*itemType == "CollectionFolder" ||*/ itemType == "UserView") { + return false; + } + + if (user.Policy.IsAdministrator) { + + return true; + } + + return false; + }, + + canSync: function (user, item) { + + if (user && !user.Policy.EnableSync) { + return false; + } + + return item.SupportsSync; + }, + + canShare: function (user, item) { + + if (item.Type == 'Timer') { + return false; + } + return user.Policy.EnablePublicSharing && appHost.supports('sharing'); + } }; }); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css index 4b6d505654..539d832121 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css +++ b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.css @@ -1,6 +1,7 @@ button.listItem { background: transparent; border: 0 !important; + border-bottom: 1px solid #2a2a2a !important; cursor: pointer; outline: none !important; color: inherit; @@ -11,29 +12,43 @@ button.listItem { } .listItem { + margin: 0; display: block; align-items: center; text-align: left; - padding: 0 1em !important; + padding: .25em .25em .25em .25em !important; line-height: 170%; + border-bottom: 1px solid #2a2a2a; } - .listItem.largeImage { - padding: 1em 0 1em 1em; - } +div.listItem { + cursor: pointer; +} - .listItem > *:not(.listItemBody) { - flex-shrink: 0; - } +.listItem.largeImage { + padding: .5em !important; +} - .listItem > * { - display: inline-block; - vertical-align: middle; - } +.listItem > *:not(.listItemBody) { + flex-shrink: 0; +} + +.listItem > * { + display: inline-block; + vertical-align: middle; +} + +.listItem [is=paper-icon-button-light] { + margin: 0; +} + +.listViewDragHandle { + margin-left: -.25em !important; +} .listItemBody { flex-grow: 1; - padding: 0 1.15em; + padding: 0 1em; overflow: hidden; text-overflow: ellipsis; flex-direction: column; @@ -54,9 +69,8 @@ button.listItem { padding-bottom: 0; } - .listItemBody h3 { + .listItemBody h2, .listItemBody h3 { margin: 0; - font-weight: normal; padding: 0; overflow: hidden; text-overflow: ellipsis; @@ -78,10 +92,13 @@ button.listItem { .listItemImage { width: 7.4vh; height: 7.4vh; + min-width: 40px; + min-height: 40px; background-repeat: no-repeat; background-size: contain; flex-shrink: 0; - margin-left: -.75em; + background-position: center center; + position: relative; } .listItemIcon { @@ -94,7 +111,6 @@ button.listItem { width: 45vh; height: 30vh; background-position: center center; - position: relative; margin-right: 2%; margin-left: 1%; } @@ -133,10 +149,48 @@ button.listItem { background-color: transparent !important; } +.listItemMediaInfo { + align-items: center; +} + +.layout-tv .listItemMediaInfo { + margin: .5em 0; +} + +.listItemMediaInfo > * { + display: inline-block; +} + +.listGroupHeader { + margin: 2em 0 1em; +} + + .listGroupHeader.first { + margin-top: 0; + } + +.listItem .indicators { + right: .5vh; + top: .5vh; + position: absolute; + display: flex; + align-items: center; +} @supports (display: flex) { - .listItem, .listItemBody { + .listItem > * { + display: flex; + } + + .listItem, .listItemBody, .listItemMediaInfo { display: flex; } } + +@media all and (max-width: 800px) { + + .listItem .endsAt, .listItem .criticRating { + display: none !important; + } +} diff --git a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js index f987dc5981..a2d52f8edc 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js +++ b/dashboard-ui/bower_components/emby-webcomponents/listview/listview.js @@ -1,8 +1,116 @@ -define(['itemHelper', 'mediaInfo', 'indicators', 'css!./listview'], function (itemHelper, mediaInfo, indicators) { +define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutManager', 'globalize', 'userdataButtons', 'css!./listview'], function (itemHelper, mediaInfo, indicators, connectionManager, layoutManager, globalize, userdataButtons) { + + function getIndex(item, options) { + + if (options.index == 'disc') { + + return item.ParentIndexNumber == null ? '' : globalize.translate('sharedcomponents#ValueDiscNumber', item.ParentIndexNumber); + } + + var sortBy = (options.sortBy || '').toLowerCase(); + var code, name; + + if (sortBy.indexOf('sortname') == 0) { + + if (item.Type == 'Episode') return ''; + + // SortName + name = (item.SortName || item.Name || '?')[0].toUpperCase(); + + code = name.charCodeAt(0); + if (code < 65 || code > 90) { + return '#'; + } + + return name.toUpperCase(); + } + if (sortBy.indexOf('officialrating') == 0) { + + return item.OfficialRating || globalize.translate('sharedcomponents#Unrated'); + } + if (sortBy.indexOf('communityrating') == 0) { + + if (item.CommunityRating == null) { + return globalize.translate('sharedcomponents#Unrated'); + } + + return Math.floor(item.CommunityRating); + } + if (sortBy.indexOf('criticrating') == 0) { + + if (item.CriticRating == null) { + return globalize.translate('sharedcomponents#Unrated'); + } + + return Math.floor(item.CriticRating); + } + if (sortBy.indexOf('metascore') == 0) { + + if (item.Metascore == null) { + return globalize.translate('sharedcomponents#Unrated'); + } + + return Math.floor(item.Metascore); + } + if (sortBy.indexOf('albumartist') == 0) { + + // SortName + if (!item.AlbumArtist) return ''; + + name = item.AlbumArtist[0].toUpperCase(); + + code = name.charCodeAt(0); + if (code < 65 || code > 90) { + return '#'; + } + + return name.toUpperCase(); + } + return ''; + } + + function getImageUrl(item, width) { + + var apiClient = connectionManager.getApiClient(item.ServerId); + + var options = { + width: width, + type: "Primary" + }; + + if (item.ImageTags && item.ImageTags['Primary']) { + + options.tag = item.ImageTags['Primary']; + return apiClient.getScaledImageUrl(item.Id, options); + } + + if (item.AlbumId && item.AlbumPrimaryImageTag) { + + options.tag = item.AlbumPrimaryImageTag; + return apiClient.getScaledImageUrl(item.AlbumId, options); + } + + else if (item.SeriesId && item.SeriesPrimaryImageTag) { + + options.tag = item.SeriesPrimaryImageTag; + return apiClient.getScaledImageUrl(item.SeriesId, options); + + } + else if (item.ParentPrimaryImageTag) { + + options.tag = item.ParentPrimaryImageTag; + return apiClient.getScaledImageUrl(item.ParentPrimaryImageItemId, options); + } + + return null; + } function getListViewHtml(items, options) { - var outerHtml = ""; + if (arguments.length == 1) { + options = items; + items = options.items; + } var index = 0; var groupTitle = ''; @@ -11,11 +119,46 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'css!./listview'], function (it var isLargeStyle = options.imageSize == 'large'; var enableOverview = options.enableOverview; + var clickEntireItem = layoutManager.tv ? true : false; + var outerTagName = clickEntireItem ? 'button' : 'div'; + var enableSideMediaInfo = options.enableSideMediaInfo != null ? options.enableSideMediaInfo : clickEntireItem; + + var outerHtml = ''; + outerHtml += items.map(function (item) { var html = ''; - var cssClass = "itemAction listItem"; + if (options.showIndex) { + + var itemGroupTitle = getIndex(item, options); + + if (itemGroupTitle != groupTitle) { + + if (html) { + html += ''; + } + + if (index == 0) { + html += '

'; + } + else { + html += '

'; + } + html += itemGroupTitle; + html += '

'; + + html += '
'; + + groupTitle = itemGroupTitle; + } + } + + var cssClass = "listItem"; + + if (clickEntireItem) { + cssClass += ' itemAction'; + } var downloadWidth = 80; @@ -24,24 +167,20 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'css!./listview'], function (it downloadWidth = 500; } - html += ''; } + var imgUrl = getImageUrl(item, downloadWidth); + if (imgUrl) { html += '
'; } else { - html += '
'; + html += '
'; } var indicatorsHtml = ''; @@ -63,8 +202,6 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'css!./listview'], function (it if (options.showParentTitle) { if (item.Type == 'Episode') { textlines.push(item.SeriesName || ' '); - } else if (item.Type == 'MusicAlbum') { - textlines.push(item.AlbumArtist || ' '); } } @@ -75,27 +212,47 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'css!./listview'], function (it } textlines.push(displayName); - if (item.Type == 'Audio') { + if (item.ArtistItems && item.Type != 'MusicAlbum') { textlines.push(item.ArtistItems.map(function (a) { return a.Name; }).join(', ') || ' '); } + if (item.AlbumArtist && item.Type == 'MusicAlbum') { + textlines.push(item.AlbumArtist || ' '); + } + + if (item.Type == 'Game') { + textlines.push(item.GameSystem || ' '); + } + + if (item.Type == 'TvChannel') { + + if (item.CurrentProgram) { + textlines.push(itemHelper.getDisplayName(item.CurrentProgram)); + } + } + var lineCount = textlines.length; - if (!options.enableSideMediaInfo) { + if (!enableSideMediaInfo) { lineCount++; } if (enableOverview && item.Overview) { lineCount++; } - html += '
'; + cssClass = 'listItemBody'; + if (!clickEntireItem) { + cssClass += ' itemAction'; + } + + html += '
'; for (var i = 0, textLinesLength = textlines.length; i < textLinesLength; i++) { if (i == 0 && isLargeStyle) { - html += '

'; + html += '

'; } else if (i == 0) { html += '
'; @@ -105,12 +262,14 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'css!./listview'], function (it html += textlines[i] || ' '; if (i == 0 && isLargeStyle) { html += '

'; + } else if (i == 0) { + html += '
'; } else { html += '
'; } } - if (!options.enableSideMediaInfo) { + if (!enableSideMediaInfo) { html += '
' + mediaInfo.getPrimaryMediaInfoHtml(item) + '
'; } @@ -122,11 +281,18 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'css!./listview'], function (it html += '
'; - if (options.enableSideMediaInfo) { + if (enableSideMediaInfo) { html += '
' + mediaInfo.getPrimaryMediaInfoHtml(item) + '
'; } - html += ''; + if (!clickEntireItem) { + html += ''; + html += ''; + html += userdataButtons.getIconsHtml(item, false); + html += ''; + } + + html += ''; index++; return html; diff --git a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.css b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.css index f76ba59727..d0868c7da1 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.css +++ b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.css @@ -3,9 +3,9 @@ } i.mediaInfoItem { - width: 3vh; - height: 3vh; - font-size: 3vh; + width: auto; + height: auto; + font-size: 1.6em; margin-right: .6em; } @@ -24,17 +24,17 @@ i.mediaInfoItem { .starRatingContainer i { color: #CB272A; - width: 3vh; - height: 3vh; - font-size: 3vh; + width: auto !important; + height: auto !important; + font-size: 120%; } .mediaInfoItem.criticRating { - padding-left: 3.15vh; + padding-left: 1.5em; background-position: left center; background-repeat: no-repeat; - background-size: auto 2.6vh; - min-height: 2.6vh; + background-size: auto 1.2em; + min-height: 1.2em; display: flex; align-items: center; } @@ -63,15 +63,3 @@ i.mediaInfoItem { font-size: 90%; padding: .1em .5em; } - -.layout-tv i.mediaInfoItem { - width: 4vh; - height: 4vh; - font-size: 4vh; -} - -.layout-tv .starRatingContainer i { - width: 3.4vh; - height: 3.4vh; - font-size: 3.4vh; -} diff --git a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js index dec497e8a1..77e78850e5 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js +++ b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js @@ -237,6 +237,10 @@ define(['datetime', 'globalize', 'embyRouter', 'material-icons', 'css!./mediainf miscInfo.push(item.Width + "x" + item.Height); } + if (item.Type == 'Audio' && item.Container) { + miscInfo.push(item.Container); + } + html += miscInfo.map(function (m) { return getMediaInfoItem(m); }).join(''); diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js index 4d9cbff24e..73ac37a8d5 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js @@ -134,7 +134,10 @@ dlg.addEventListener('close', function () { if (recordingUpdated) { - resolve(); + resolve({ + updated: true, + deleted: false + }); } else { reject(); } diff --git a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js index ffaf0a4a12..3138b5ec9e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js +++ b/dashboard-ui/bower_components/emby-webcomponents/shortcuts.js @@ -1,7 +1,11 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'globalize', 'loading'], function (playbackManager, inputManager, connectionManager, embyRouter, globalize, loading) { - function playAllFromHere(card, serverId) { - var cards = card.parentNode.querySelectorAll('.itemAction[data-id]'); + function playAllFromHere(card, serverId, queue) { + + var parent = card.parentNode; + var className = card.classList.length ? ('.' + card.classList[0]) : ''; + var cards = parent.querySelectorAll(className + '[data-id]'); + var ids = []; var foundCard = false; @@ -13,10 +17,22 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g ids.push(cards[i].getAttribute('data-id')); } } - playbackManager.play({ - ids: ids, - serverId: serverId - }); + + if (!ids.length) { + return; + } + + if (queue) { + playbackManager.queue({ + ids: ids, + serverId: serverId + }); + } else { + playbackManager.play({ + ids: ids, + serverId: serverId + }); + } } function showSlideshow(startItemId, serverId) { @@ -75,7 +91,14 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g } function executeAction(card, action) { + var id = card.getAttribute('data-id'); + + if (!id) { + card = parentWithAttribute(card, 'data-id'); + id = card.getAttribute('data-id'); + } + var serverId = card.getAttribute('data-serverid'); var type = card.getAttribute('data-type'); var isfolder = card.getAttribute('data-isfolder') == 'true'; @@ -108,8 +131,12 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g playAllFromHere(card, serverId); } - else if (action == 'setplaylistindex') { + else if (action == 'queueallfromhere') { + playAllFromHere(card, serverId, true); + } + else if (action == 'setplaylistindex') { + playbackManager.currentPlaylistIndex(parseInt(card.getAttribute('data-index'))); } else if (action == 'record') { @@ -197,7 +224,14 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g var card = parentWithClass(e.target, 'itemAction'); if (card) { - var action = card.getAttribute('data-action'); + + var actionElement = card; + var action = actionElement.getAttribute('data-action'); + + if (!action) { + actionElement = parentWithAttribute(actionElement, 'data-action'); + action = actionElement.getAttribute('data-action'); + } if (action) { executeAction(card, action); @@ -205,6 +239,19 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g } } + function parentWithAttribute(elem, name) { + + while (!elem.getAttribute(name)) { + elem = elem.parentNode; + + if (!elem) { + return null; + } + } + + return elem; + } + function parentWithClass(elem, className) { while (!elem.classList || !elem.classList.contains(className)) { @@ -242,7 +289,8 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g return { on: on, - off: off + off: off, + execute: executeAction }; }); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/da.json b/dashboard-ui/bower_components/emby-webcomponents/strings/da.json index 0520621d32..c536180e89 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/da.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/da.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "No items found.", - "HeaderSaySomethingLike": "Say Something Like...", - "HeaderYouSaid": "You Said...", - "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", - "ButtonTryAgain": "Try Again", - "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", "ValueSpecialEpisodeName": "Special - {0}", "Share": "Del", "ServerUpdateNeeded": "Denne Emby server b\u00f8r opdateres. For at downloade den nyeste version bes\u00f8g venligst {0}", @@ -92,5 +86,29 @@ "ReplaceAllMetadata": "Replace all metadata", "SearchForMissingMetadata": "Search for missing metadata", "LabelRefreshMode": "Refresh mode:", - "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard." + "NoItemsFound": "No items found.", + "HeaderSaySomethingLike": "Say Something Like...", + "ButtonTryAgain": "Try Again", + "HeaderYouSaid": "You Said...", + "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", + "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/de.json b/dashboard-ui/bower_components/emby-webcomponents/strings/de.json index 49667818ad..c2601c7826 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/de.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/de.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "No items found.", - "HeaderSaySomethingLike": "Say Something Like...", - "HeaderYouSaid": "You Said...", - "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", - "ButtonTryAgain": "Try Again", - "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", "ValueSpecialEpisodeName": "Special - {0}", "Share": "Teilen", "ServerUpdateNeeded": "Dieser Emby Server sollte aktualisiert werden. Um die neueste Version zu laden, besuche bitte {0}", @@ -92,5 +86,29 @@ "ReplaceAllMetadata": "Replace all metadata", "SearchForMissingMetadata": "Search for missing metadata", "LabelRefreshMode": "Refresh mode:", - "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard." + "NoItemsFound": "No items found.", + "HeaderSaySomethingLike": "Say Something Like...", + "ButtonTryAgain": "Try Again", + "HeaderYouSaid": "You Said...", + "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", + "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json index 5d410526e3..3078e9bbed 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json @@ -92,5 +92,25 @@ "HeaderYouSaid": "You Said...", "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", - "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard." + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.", + "Open": "Open", + "Play": "Play", + "Queue": "Queue", + "Shuffle": "Shuffle", + "Identify": "Identify", + "EditImages": "Edit Images", + "EditInfo": "Edit Info", + "Sync": "Sync", + "InstantMix": "Instant Mix", + "ViewAlbum": "View Album", + "ViewArtist": "View Artist", + "QueueAllFromHere": "Queue All from Here", + "PlayAllFromHere": "Play All from Here", + "RemoveFromPlaylist": "Remove from Playlist" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json b/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json index a03bcaeca6..c89a812496 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/es-MX.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "No se encontraron \u00edtems.", - "HeaderSaySomethingLike": "Decir Algo Como...", - "HeaderYouSaid": "Ha Dicho...", - "MessageIfYouBlockedVoice": "Si ha negado el acceso por voz a la aplicaci\u00f3n necesitara reconfigurar antes de intentarlo de nuevo.", - "ButtonTryAgain": "Intentar de Nuevo", - "MessageWeDidntRecognizeCommand": "Lo sentimos, no reconocimos ese comando.", "ValueSpecialEpisodeName": "Especial - {0}", "Share": "Compartir", "ServerUpdateNeeded": "Este Servidor Emby necesita ser actualizado. Para descargar la ultima versi\u00f3n, por favor visite {0}", @@ -92,5 +86,29 @@ "ReplaceAllMetadata": "Remplazar todos los metadatos", "SearchForMissingMetadata": "Buscar metadatos faltantes", "LabelRefreshMode": "Modo de actualizaci\u00f3n:", - "RefreshDialogHelp": "Los metadatos son actualizados bas\u00e1ndose en las configuraciones y servicios de internet que que est\u00e9n activados en el panel de control de su Servidor de Emby." + "NoItemsFound": "No se encontraron \u00edtems.", + "HeaderSaySomethingLike": "Decir Algo Como...", + "ButtonTryAgain": "Intentar de Nuevo", + "HeaderYouSaid": "Ha Dicho...", + "MessageWeDidntRecognizeCommand": "Lo sentimos, no reconocimos ese comando.", + "MessageIfYouBlockedVoice": "Si ha negado el acceso por voz a la aplicaci\u00f3n necesitara reconfigurar antes de intentarlo de nuevo.", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "Los metadatos son actualizados bas\u00e1ndose en las configuraciones y servicios de internet que que est\u00e9n activados en el panel de control de su Servidor de Emby.", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json b/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json index b311487bed..da34f0b3de 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/kk.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "\u0415\u0448\u049b\u0430\u043d\u0434\u0430\u0439 \u0442\u0430\u0440\u043c\u0430\u049b\u0442\u0430\u0440 \u0442\u0430\u0431\u044b\u043b\u043c\u0430\u0434\u044b.", - "HeaderSaySomethingLike": "\u041e\u0441\u044b\u043d\u0434\u0430\u0439 \u0441\u0438\u044f\u049b\u0442\u044b\u043d\u044b \u0430\u0439\u0442\u044b\u04a3\u044b\u0437...", - "HeaderYouSaid": "\u0421\u0456\u0437 \u0430\u0439\u0442\u049b\u0430\u043d\u044b\u04a3\u044b\u0437...", - "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.", - "ButtonTryAgain": "\u04d8\u0440\u0435\u043a\u0435\u0442\u0442\u0456 \u049b\u0430\u0439\u0442\u0430\u043b\u0430\u0443", - "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.", "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,5 +86,29 @@ "ReplaceAllMetadata": "\u0411\u0430\u0440\u043b\u044b\u049b \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u0430\u0443\u044b\u0441\u0442\u044b\u0440\u0443", "SearchForMissingMetadata": "\u0416\u043e\u049b \u043c\u0435\u0442\u0430\u0434\u0435\u0440\u0435\u043a\u0442\u0435\u0440\u0434\u0456 \u0456\u0437\u0434\u0435\u0443", "LabelRefreshMode": "\u0416\u0430\u04a3\u0493\u044b\u0440\u0442\u0443 \u0440\u0435\u0436\u0456\u043c\u0456:", - "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." + "NoItemsFound": "\u0415\u0448\u049b\u0430\u043d\u0434\u0430\u0439 \u0442\u0430\u0440\u043c\u0430\u049b\u0442\u0430\u0440 \u0442\u0430\u0431\u044b\u043b\u043c\u0430\u0434\u044b.", + "HeaderSaySomethingLike": "\u041e\u0441\u044b\u043d\u0434\u0430\u0439 \u0441\u0438\u044f\u049b\u0442\u044b\u043d\u044b \u0430\u0439\u0442\u044b\u04a3\u044b\u0437...", + "ButtonTryAgain": "\u04d8\u0440\u0435\u043a\u0435\u0442\u0442\u0456 \u049b\u0430\u0439\u0442\u0430\u043b\u0430\u0443", + "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", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json b/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json index 3af2788277..4f250fabd7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/nb.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "No items found.", - "HeaderSaySomethingLike": "Say Something Like...", - "HeaderYouSaid": "You Said...", - "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", - "ButtonTryAgain": "Try Again", - "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", "ValueSpecialEpisodeName": "Spesial - {0}", "Share": "Del", "ServerUpdateNeeded": "Denne Emby serveren trenger en oppdatering. For \u00e5 laste ned nyeste versjon, vennligst bes\u00f8k: {0}", @@ -92,5 +86,29 @@ "ReplaceAllMetadata": "Replace all metadata", "SearchForMissingMetadata": "Search for missing metadata", "LabelRefreshMode": "Refresh mode:", - "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard." + "NoItemsFound": "No items found.", + "HeaderSaySomethingLike": "Say Something Like...", + "ButtonTryAgain": "Try Again", + "HeaderYouSaid": "You Said...", + "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", + "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/nl.json b/dashboard-ui/bower_components/emby-webcomponents/strings/nl.json index 66e1996118..2724e702d8 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/nl.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/nl.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "Geen items gevonden.", - "HeaderSaySomethingLike": "Zeg iets zoals...", - "HeaderYouSaid": "U zei...", - "MessageIfYouBlockedVoice": "Als u spraak toegang uitgeschakeld heeft moet u dit opnieuw configureren voordat u verder gaat.", - "ButtonTryAgain": "Probeer opnieuw", - "MessageWeDidntRecognizeCommand": "Sorry, dat commando herkennen we niet.", "ValueSpecialEpisodeName": "Speciaal - {0}", "Share": "Delen", "ServerUpdateNeeded": "Deze Emby Server moet worden bijgewerkt. Om de laatste versie te downloaden, gaat u naar {0}", @@ -92,5 +86,29 @@ "ReplaceAllMetadata": "Alle metadata vervangen", "SearchForMissingMetadata": "Zoeken naar missende metadata", "LabelRefreshMode": "Vernieuw-modus", - "RefreshDialogHelp": "Metadata wordt vernieuwd op basis van de instellingen en internet diensten die zijn ingeschakeld in het dashboard van de Emby Server." + "NoItemsFound": "Geen items gevonden.", + "HeaderSaySomethingLike": "Zeg iets zoals...", + "ButtonTryAgain": "Probeer opnieuw", + "HeaderYouSaid": "U zei...", + "MessageWeDidntRecognizeCommand": "Sorry, dat commando herkennen we niet.", + "MessageIfYouBlockedVoice": "Als u spraak toegang uitgeschakeld heeft moet u dit opnieuw configureren voordat u verder gaat.", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "Metadata wordt vernieuwd op basis van de instellingen en internet diensten die zijn ingeschakeld in het dashboard van de Emby Server.", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json b/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json index c42672e1f8..e658df31cc 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/pt-BR.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "No items found.", - "HeaderSaySomethingLike": "Say Something Like...", - "HeaderYouSaid": "You Said...", - "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", - "ButtonTryAgain": "Try Again", - "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", "ValueSpecialEpisodeName": "Especial - {0}", "Share": "Compartilhar", "ServerUpdateNeeded": "Este servidor Emby precisa ser atualizado. Para baixar a \u00faltima vers\u00e3o, por favor visite {0}", @@ -92,5 +86,29 @@ "ReplaceAllMetadata": "Substituir todos os metadados", "SearchForMissingMetadata": "Buscar por metadados que faltam", "LabelRefreshMode": "Mode de atualiza\u00e7\u00e3o:", - "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." + "NoItemsFound": "No items found.", + "HeaderSaySomethingLike": "Say Something Like...", + "ButtonTryAgain": "Try Again", + "HeaderYouSaid": "You Said...", + "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", + "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "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", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/pt-PT.json b/dashboard-ui/bower_components/emby-webcomponents/strings/pt-PT.json index 8502fa5411..96464ac699 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/pt-PT.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/pt-PT.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "No items found.", - "HeaderSaySomethingLike": "Say Something Like...", - "HeaderYouSaid": "You Said...", - "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", - "ButtonTryAgain": "Try Again", - "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", "ValueSpecialEpisodeName": "Especial - {0}", "Share": "Partilhar", "ServerUpdateNeeded": "Este Servidor Emby precisa ser atualizado. Para fazer download da vers\u00e3o mais recente, por favor visite {0}", @@ -92,5 +86,29 @@ "ReplaceAllMetadata": "Replace all metadata", "SearchForMissingMetadata": "Search for missing metadata", "LabelRefreshMode": "Refresh mode:", - "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard." + "NoItemsFound": "No items found.", + "HeaderSaySomethingLike": "Say Something Like...", + "ButtonTryAgain": "Try Again", + "HeaderYouSaid": "You Said...", + "MessageWeDidntRecognizeCommand": "We're sorry, we didn't recognize that command.", + "MessageIfYouBlockedVoice": "If you denied voice access to the app you'll need to reconfigure before trying again.", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json b/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json index d3e25e5f80..4c9e62a2c7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/ru.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.", - "HeaderSaySomethingLike": "\u0421\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435...", - "HeaderYouSaid": "\u0412\u044b \u0441\u043a\u0430\u0437\u0430\u043b\u0438...", - "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.", - "ButtonTryAgain": "\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443", - "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.", "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,5 +86,29 @@ "ReplaceAllMetadata": "\u0417\u0430\u043c\u0435\u043d\u0430 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "SearchForMissingMetadata": "\u041f\u043e\u0438\u0441\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0445", "LabelRefreshMode": "\u0420\u0435\u0436\u0438\u043c \u043f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f:", - "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." + "NoItemsFound": "\u041d\u0438\u043a\u0430\u043a\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e.", + "HeaderSaySomethingLike": "\u0421\u043a\u0430\u0436\u0438\u0442\u0435 \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435...", + "ButtonTryAgain": "\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u043f\u044b\u0442\u043a\u0443", + "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", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/sv.json b/dashboard-ui/bower_components/emby-webcomponents/strings/sv.json index 20bd918094..8242707c4c 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/sv.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/sv.json @@ -1,10 +1,4 @@ { - "NoItemsFound": "Inga objekt hittades.", - "HeaderSaySomethingLike": "S\u00e4g n\u00e5got som...", - "HeaderYouSaid": "Du sa...", - "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.", - "ButtonTryAgain": "F\u00f6rs\u00f6k igen", - "MessageWeDidntRecognizeCommand": "Ledsen, men vi k\u00e4nner inte igen det kommandot.", "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,5 +86,29 @@ "ReplaceAllMetadata": "Ers\u00e4tt all metadata", "SearchForMissingMetadata": "S\u00f6k efter saknad metadata", "LabelRefreshMode": "Uppdateringsl\u00e4ge:", - "RefreshDialogHelp": "Metadata uppdateras baserat p\u00e5 inst\u00e4llningar och internettj\u00e4nster som har aktiverats under Emby servers kontrollpanel." + "NoItemsFound": "Inga objekt hittades.", + "HeaderSaySomethingLike": "S\u00e4g n\u00e5got som...", + "ButtonTryAgain": "F\u00f6rs\u00f6k igen", + "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", + "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" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/zh-TW.json b/dashboard-ui/bower_components/emby-webcomponents/strings/zh-TW.json new file mode 100644 index 0000000000..2b90b06e19 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/zh-TW.json @@ -0,0 +1,114 @@ +{ + "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", + "LiveTvGuideRequiresUnlock": "\u96fb\u8996\u6307\u5357\u76ee\u524d\u53ea\u9650\u65bc{0}\u500b\u983b\u9053\u3002\u9ede\u9078\u300c\u89e3\u9396\u300d\u4ee5\u4e86\u89e3\u5982\u4f55\u7372\u5f97\u66f4\u5b8c\u6574\u7684\u9ad4\u9a57", + "AttributeNew": "New", + "AttributePremiere": "\u9996\u64ad", + "AttributeLive": "\u6b63\u5728\u64ad\u653e", + "TrackCount": "{0}\u500b\u66f2\u76ee", + "ItemCount": "{0}\u500b\u9805\u76ee", + "ValueSeriesYearToPresent": "{0}-Present", + "ReleaseYearValue": "\u63a8\u51fa\u65e5\u671f\uff1a{0}", + "OriginalAirDateValue": "\u539f\u59cb\u64ad\u51fa\u65e5\u671f\uff1a{0}", + "EndsAtValue": "\u5b8c\u7d50\u65bc{0}", + "OptionSundayShort": "\u65e5", + "OptionMondayShort": "\u4e00", + "OptionTuesdayShort": "\u4e8c", + "OptionWednesdayShort": "\u4e09", + "OptionThursdayShort": "\u56db", + "OptionFridayShort": "\u4e94", + "OptionSaturdayShort": "\u516d", + "HeaderSelectDate": "\u9078\u64c7\u65e5\u671f", + "ButtonOk": "\u78ba\u5b9a", + "ButtonCancel": "\u53d6\u6d88", + "ButtonGotIt": "\u6211\u77e5\u9053\u4e86", + "RecordingCancelled": "\u5df2\u53d6\u6d88\u6392\u7a0b\u9304\u88fd", + "RecordingScheduled": "\u5df2\u6392\u7a0b\u9304\u88fd", + "SeriesRecordingScheduled": "\u5df2\u6392\u7a0b\u9304\u88fd\u6574\u500b\u7cfb\u5217", + "HeaderNewRecording": "\u65b0\u9304\u88fd", + "Sunday": "\u661f\u671f\u65e5", + "Monday": "\u661f\u671f\u4e00", + "Tuesday": "\u661f\u671f\u4e8c", + "Wednesday": "\u661f\u671f\u4e09", + "Thursday": "\u661f\u671f\u56db", + "Friday": "\u661f\u671f\u4e94", + "Saturday": "\u661f\u671f\u516d", + "Days": "\u65e5", + "RecordSeries": "\u9304\u88fd\u6574\u500b\u7cfb\u5217", + "LabelPrePaddingMinutes": "\u63d0\u524d\u958b\u59cb\u5206\u9418\u6578\uff1a", + "LabelPostPaddingMinutes": "\u5ef6\u5f8c\u7d50\u675f\u5206\u9418\u6578\uff1a", + "RecordOnAllChannels": "\u5728\u6240\u6709\u983b\u9053\u9304\u88fd", + "RecordAnytime": "\u5728\u4efb\u4f55\u6642\u9593\u9304\u88fd", + "RecordOnlyNewEpisodes": "\u53ea\u9304\u88fd\u65b0\u96c6\u6578", + "HeaderBecomeProjectSupporter": "\u53d6\u5f97Emby\u8c6a\u83ef\u7248", + "HeaderEnjoyDayTrial": "\u514d\u8cbb\u8a66\u752814\u5929", + "MessageActiveSubscriptionRequiredSeriesRecordings": "\u8981\u4f7f\u7528\u81ea\u52d5\u9304\u88fd\u7cfb\u5217\u7684\u529f\u80fd\uff0c\u9700\u8981\u6709\u6548\u7684Emby\u8c6a\u83ef\u7248\u8a02\u95b1", + "OptionConvertRecordingsToStreamingFormat": "\u81ea\u52d5\u5c07\u9304\u88fd\u5167\u5bb9\u8f49\u63db\u6210\u9069\u7528\u65bc\u4e32\u6d41\u7684\u683c\u5f0f", + "OptionConvertRecordingsToStreamingFormatHelp": "\u9304\u88fd\u7684\u5167\u5bb9\u5c07\u6703\u8f49\u63db\u6210MP4\uff0c\u4ee5\u4fbf\u66f4\u5bb9\u6613\u5730\u5728\u60a8\u7684\u88dd\u7f6e\u4e0a\u64ad\u653e", + "FeatureRequiresEmbyPremiere": "\u6b64\u529f\u80fd\u9700\u8981\u6709\u6548\u7684Emby\u8c6a\u83ef\u7248\u8a02\u95b1", + "Record": "\u9304\u88fd", + "Save": "\u5132\u5b58", + "Edit": "\u7de8\u8f2f", + "Download": "\u4e0b\u8f09", + "Advanced": "\u9032\u968e", + "Delete": "\u522a\u9664", + "HeaderDeleteItem": "\u522a\u9664\u9805\u76ee", + "ConfirmDeleteItem": "\u522a\u9664\u6b64\u9805\u76ee\u6642\uff0c\u4e5f\u6703\u4e00\u4f75\u5f9e\u6a94\u6848\u7cfb\u7d71\u53ca\u5a92\u9ad4\u6ac3\u4e2d\u522a\u9664\u3002\u78ba\u5b9a\u8981\u522a\u9664\u55ce\uff1f", + "Refresh": "\u91cd\u65b0\u6574\u7406", + "RefreshQueued": "Refresh queued.", + "AddToCollection": "\u65b0\u589e\u5230\u6536\u85cf\u6ac3", + "NewCollection": "\u65b0\u6536\u85cf\u6ac3", + "LabelCollection": "\u6536\u85cf\u6ac3\uff1a", + "Help": "\u8aaa\u660e", + "NewCollectionHelp": "\u6536\u85cf\u6ac3\u8b93\u60a8\u80fd\u5920\u5efa\u7acb\u500b\u4eba\u5316\u7684\u5f71\u97f3\u53ca\u5176\u4ed6\u5a92\u9ad4\u7684\u5206\u985e", + "SearchForCollectionInternetMetadata": "\u5728\u7db2\u8def\u4e0a\u641c\u5c0b\u76f8\u95dc\u7684\u5c01\u9762\u5716\u53ca\u8a73\u7d30\u8cc7\u6599", + "LabelName": "\u540d\u7a31\uff1a", + "NewCollectionNameExample": "\u4f8b\u5982\uff1a\u661f\u969b\u5927\u6230\u7e3d\u532f", + "MessageItemsAdded": "\u5df2\u65b0\u589e\u9805\u76ee", + "OptionNew": "\u65b0\u589e...", + "LabelPlaylist": "\u64ad\u653e\u6e05\u55ae\uff1a", + "AddToPlaylist": "\u65b0\u589e\u5230\u64ad\u653e\u6e05\u55ae", + "Subtitles": "\u5b57\u5e55", + "SearchForSubtitles": "\u641c\u5c0b\u5b57\u5e55", + "LabelLanguage": "\u8a9e\u8a00\uff1a", + "Search": "\u641c\u5c0b", + "NoSubtitleSearchResultsFound": "\u7121\u7d50\u679c", + "File": "\u6a94\u6848", + "MessageAreYouSureDeleteSubtitles": "\u60a8\u771f\u7684\u8981\u522a\u9664\u9019\u500b\u5b57\u5e55\u6a94\u55ce\uff1f", + "ConfirmDeletion": "\u78ba\u5b9a\u522a\u9664", + "MySubtitles": "\u6211\u7684\u5b57\u5e55", + "MessageDownloadQueued": "\u9700\u8981\u4e0b\u8f09", + "EditSubtitles": "\u7de8\u8f2f\u5b57\u5e55", + "UnlockGuide": "\u89e3\u9396\u65b9\u5f0f", + "RefreshMetadata": "\u66f4\u65b0\u8a73\u7d30\u8cc7\u6599", + "ReplaceExistingImages": "\u53d6\u4ee3\u73fe\u6709\u5716\u7247", + "ReplaceAllMetadata": "\u53d6\u4ee3\u6240\u6709\u8a73\u7d30\u8cc7\u6599", + "SearchForMissingMetadata": "\u641c\u5c0b\u907a\u5931\u7684\u8a73\u7d30\u8cc7\u6599", + "LabelRefreshMode": "\u66f4\u65b0\u6a21\u5f0f\uff1a", + "NoItemsFound": "\u7121\u9805\u76ee", + "HeaderSaySomethingLike": "\u8aaa\u9ede\u6771\u897f\uff0c\u50cf\u662f...", + "ButtonTryAgain": "\u91cd\u8a66", + "HeaderYouSaid": "\u60a8\u662f\u6307...", + "MessageWeDidntRecognizeCommand": "\u5f88\u62b1\u6b49\uff0c\u6211\u5011\u7121\u6cd5\u8fa8\u8b58\u6b64\u6307\u4ee4", + "MessageIfYouBlockedVoice": "\u5982\u679c\u60a8\u62d2\u7d55\u7a0b\u5f0f\u4f7f\u7528\u8a9e\u97f3\u8fa8\u8b58\uff0c\u60a8\u5c07\u9700\u8981\u5728\u91cd\u8a66\u4e4b\u524d\u518d\u6b21\u8a2d\u5b9a", + "ValueDiscNumber": "Disc {0}", + "Unrated": "Unrated", + "Favorite": "Favorite", + "Like": "Like", + "Dislike": "Dislike", + "Played": "Played", + "RefreshDialogHelp": "\u8a73\u7d30\u8cc7\u6599\u7684\u66f4\u65b0\u65b9\u5f0f\u6703\u4f9d\u64daEmby\u7684\u8a2d\u5b9a\u53ca\u5df2\u7d93\u555f\u7528\u7684\u7db2\u8def\u670d\u52d9\u4f86\u9032\u884c", + "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" +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.css b/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.css new file mode 100644 index 0000000000..f0abdff812 --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.css @@ -0,0 +1,8 @@ + +.btnUserData { + color: #aaa; +} + +.btnUserDataOn, .btnUserDataOn i { + color: #cc3333 !important; +} \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js b/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js new file mode 100644 index 0000000000..f44875f51e --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/userdatabuttons/userdatabuttons.js @@ -0,0 +1,188 @@ +define(['connectionManager', 'globalize', 'paper-icon-button-light', 'material-icons', 'emby-button', 'css!./userdatabuttons'], function (connectionManager, globalize) { + + function getUserDataButtonHtml(method, itemId, iconCssClass, icon, tooltip, style) { + + var is = style == 'fab' ? 'emby-button' : 'paper-icon-button-light'; + var className = style == 'fab' ? 'autoSize fab' : 'autoSize'; + + className += ' ' + iconCssClass; + + return ''; + } + + function fill(options) { + + var html = getIconsHtml(options.item, options.includePlayed, options.buttonClass, options.style); + + options.element.innerHTML = html; + } + + function getIconsHtml(item, includePlayed, cssClass, style) { + + var html = ''; + + var userData = item.UserData || {}; + + var itemId = item.Id; + + var btnCssClass = "btnUserData"; + + if (cssClass) { + btnCssClass += " " + cssClass; + } + + if (includePlayed !== false) { + var tooltipPlayed = globalize.translate('sharedcomponents#Played'); + + if (item.MediaType == 'Video' || item.Type == 'Series' || item.Type == 'Season' || item.Type == 'BoxSet' || item.Type == 'Playlist') { + if (item.Type != 'TvChannel') { + if (userData.Played) { + html += getUserDataButtonHtml('markPlayed', itemId, btnCssClass + ' btnUserDataOn', 'check', tooltipPlayed, style); + } else { + html += getUserDataButtonHtml('markPlayed', itemId, btnCssClass, 'check', tooltipPlayed, style); + } + } + } + } + + var tooltipLike = globalize.translate('sharedcomponents#Like'); + var tooltipDislike = globalize.translate('sharedcomponents#Dislike'); + + //if (typeof userData.Likes == "undefined") { + // html += getUserDataButtonHtml('markDislike', itemId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike); + // html += getUserDataButtonHtml('markLike', itemId, btnCssClass + ' btnUserData btnLike', 'thumb-up', tooltipLike); + //} + //else if (userData.Likes) { + // html += getUserDataButtonHtml('markDislike', itemId, btnCssClass + ' btnUserData btnDislike', 'thumb-down', tooltipDislike); + // html += getUserDataButtonHtml('markLike', itemId, btnCssClass + ' btnUserData btnLike btnUserDataOn', 'thumb-up', tooltipLike); + //} + //else { + // html += getUserDataButtonHtml('markDislike', itemId, btnCssClass + ' btnUserData btnDislike btnUserDataOn', 'thumb-down', tooltipDislike); + // html += getUserDataButtonHtml('markLike', itemId, btnCssClass + ' btnUserData btnLike', 'thumb-up', tooltipLike); + //} + + var tooltipFavorite = globalize.translate('sharedcomponents#Favorite'); + if (userData.IsFavorite) { + + html += getUserDataButtonHtml('markFavorite', itemId, btnCssClass + ' btnUserData btnUserDataOn', 'favorite', tooltipFavorite, style); + } else { + html += getUserDataButtonHtml('markFavorite', itemId, btnCssClass + ' btnUserData', 'favorite', tooltipFavorite, style); + } + + return html; + } + + function markFavorite(link) { + + var id = link.getAttribute('data-itemid'); + + var markAsFavorite = !link.classList.contains('btnUserDataOn'); + + favorite(id, markAsFavorite); + + if (markAsFavorite) { + link.classList.add('btnUserDataOn'); + } else { + link.classList.remove('btnUserDataOn'); + } + } + + function markLike(link) { + + var id = link.getAttribute('data-itemid'); + + if (!link.classList.contains('btnUserDataOn')) { + + likes(id, true); + + link.classList.add('btnUserDataOn'); + + } else { + + clearLike(id); + + link.classList.remove('btnUserDataOn'); + } + + link.parentNode.querySelector('.btnDislike').classList.remove('btnUserDataOn'); + } + + function markDislike(link) { + + var id = link.getAttribute('data-itemid'); + + if (!link.classList.contains('btnUserDataOn')) { + + likes(id, false); + + link.classList.add('btnUserDataOn'); + + } else { + + clearLike(id); + + link.classList.remove('btnUserDataOn'); + } + + link.parentNode.querySelector('.btnLike').classList.remove('btnUserDataOn'); + } + + function markPlayed(link) { + + var id = link.getAttribute('data-itemid'); + + if (!link.classList.contains('btnUserDataOn')) { + + played(id, true); + + link.classList.add('btnUserDataOn'); + + } else { + + played(id, false); + + link.classList.remove('btnUserDataOn'); + } + } + + function likes(id, isLiked) { + var apiClient = connectionManager.currentApiClient(); + return apiClient.updateUserItemRating(apiClient.getCurrentUserId(), id, isLiked); + } + + function played(id, isPlayed) { + var apiClient = connectionManager.currentApiClient(); + + var method = isPlayed ? 'markPlayed' : 'markUnplayed'; + + return apiClient[method](apiClient.getCurrentUserId(), id, new Date()); + } + + function favorite(id, isFavorite) { + var apiClient = connectionManager.currentApiClient(); + + return apiClient.updateFavoriteStatus(apiClient.getCurrentUserId(), id, isFavorite); + } + + function clearLike(id) { + + var apiClient = connectionManager.currentApiClient(); + + return apiClient.clearUserItemRating(apiClient.getCurrentUserId(), id); + } + + window.UserDataButtons = { + markPlayed: markPlayed, + markDislike: markDislike, + markLike: markLike, + markFavorite: markFavorite + }; + + return { + fill: fill, + getIconsHtml: getIconsHtml + }; + +}); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js index 9d8a2e9187..3fe09760ee 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js +++ b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js @@ -150,7 +150,7 @@ define(['browser', 'css!./viewcontainer-lite'], function (browser) { return new Promise(function (resolve, reject) { var timings = { - duration: 200, + duration: 300, iterations: 1, easing: 'ease-out', fill: 'both' diff --git a/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json b/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json index d0996a0614..2352a576a7 100644 --- a/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json +++ b/dashboard-ui/bower_components/iron-a11y-announcer/.bower.json @@ -1,6 +1,6 @@ { "name": "iron-a11y-announcer", - "version": "1.0.4", + "version": "1.0.5", "description": "A singleton element that simplifies announcing text to screen readers.", "keywords": [ "web-components", @@ -18,7 +18,7 @@ "main": "iron-a11y-announcer.html", "license": "http://polymer.github.io/LICENSE.txt", "dependencies": { - "polymer": "polymer/polymer#^1.0.0" + "polymer": "polymer/polymer#^1.1.0" }, "devDependencies": { "iron-component-page": "polymerelements/iron-component-page#^1.0.0", @@ -27,15 +27,15 @@ "paper-styles": "polymerelements/paper-styles#^1.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0" + "web-component-tester": "^4.0.0" }, "ignore": [], "homepage": "https://github.com/PolymerElements/iron-a11y-announcer", - "_release": "1.0.4", + "_release": "1.0.5", "_resolution": { "type": "version", - "tag": "v1.0.4", - "commit": "5ce3eb8c4282bb53cd72e348858dc6be6b4c50b9" + "tag": "v1.0.5", + "commit": "2432d39a1693ccd728cbe7eb55810063737d3403" }, "_source": "git://github.com/PolymerElements/iron-a11y-announcer.git", "_target": "^1.0.0", diff --git a/dashboard-ui/bower_components/iron-scroll-target-behavior/.github/ISSUE_TEMPLATE.md b/dashboard-ui/bower_components/iron-a11y-announcer/.github/ISSUE_TEMPLATE.md similarity index 84% rename from dashboard-ui/bower_components/iron-scroll-target-behavior/.github/ISSUE_TEMPLATE.md rename to dashboard-ui/bower_components/iron-a11y-announcer/.github/ISSUE_TEMPLATE.md index c430c402e0..594376ff9e 100644 --- a/dashboard-ui/bower_components/iron-scroll-target-behavior/.github/ISSUE_TEMPLATE.md +++ b/dashboard-ui/bower_components/iron-a11y-announcer/.github/ISSUE_TEMPLATE.md @@ -1,4 +1,4 @@ - + ### Description diff --git a/dashboard-ui/bower_components/iron-a11y-announcer/.travis.yml b/dashboard-ui/bower_components/iron-a11y-announcer/.travis.yml index 2b3df2cd90..146620909d 100644 --- a/dashboard-ui/bower_components/iron-a11y-announcer/.travis.yml +++ b/dashboard-ui/bower_components/iron-a11y-announcer/.travis.yml @@ -1,22 +1,23 @@ language: node_js -sudo: false +sudo: required before_script: - - npm install web-component-tester - - npm install bower - - 'export PATH=$PWD/node_modules/.bin:$PATH' - - bower install +- npm install -g bower polylint web-component-tester +- bower install +- polylint env: global: - - secure: lNcOb1qPO7R65VYIQ6ekoc4I8wg98E/DRdqRMGAWrvr9eZ6lbz4hqwVvgnl05Ukc62lFsEGdaykFdcQ5QG5rDxXxh1Dofl8dfE8ohBZzR9gQ5g9808CVVbV/0kfafAMts/KYGVLAuy+30aU/xA+DQ4oR76E1glZOGoz4FDxUotIFpMyPR77HC1WDuFiF/HUOUgs8zO5v02171URdYG33ywVx6n0j1akCKksQ9Odcxn+VF51xziSuP+Hd+mju4j6xiAsvkc8EhdFMTXBKDHH0LEjP6zVLQ+lA4ePX2YxPAocFUcWFlGsfDwLdbY18zrP9vXK0AqpoU0d3hW1bLdxoH+4Fd8WkFzYB5rjtV0jT8BOWjEK+1g7GBzofZYQs+h9kRUoNQA5m7NNo3dz/NM8NxvDCALscH2kWTEYpzvaX/Gy653psOkKe8MRawa6nqgXreaNEn3dtVqlonz3KpgVLJpgBtLYvQDQ8lczntuBw6BlnCZRZw8wy0hLHIIpld/GbxrH1O13XGpT07CAny10wZYMk9J0OiEuMPd23UNdcEXibNnfDS18UKW64JoILqqBMyl10WY6dOqLt7DAd5eDoKqZ/heU3vXFm9/JcebtUB3NmOG+qkgb1UOChEtzxJFCXa3S3NFsLiHra6CgdV78gHM5WizlT0kldecgrlDtz/tQ= - - secure: ig1L3SPuNpnAqzk8wXc8SqprhF7ajVuD1MQa0KfmkCxFZCXSmAHnt9tsuwrkea0J3s3Mmj+UQBI3WX5jsFEAlwNy239uRIUxHTz/tsKznmo5Jf+u/u7jHR4H/x0+kNbA/D56eInlNeR9bwE/72kiWB2ZI9nxHIggNxJrsTK4d+CQC863V763P8sJaBNP7BXq/2igs2/wHgfsF126oKOf0fxMbeBm3tFYB0VBdkLZJvQ+NowZGn/RTvmdAMJZe/UuICf9jTl/YQXp7q3b/hF5h/CMlQckkNoiQZ8FY3yz4yg8eJc2Pe1NjuCYl8YE7nUY+mUX8B/hqB9g05LmKxAdFg1icsq14Rmb54MBa6CsYIPo5ZZNXSeCkiQvfHOOhubnB4lBxDYGSLwFIDwpRtRRkwIzpz/5sul6OP9RR/g0kXnmktFEYbu2/OQk89H2GymOdrIlUrJ9Rat74X4My3DO7I7QnGi/04I7sLxP5PxUShqcjDi5q4rZTXG/ssaLS3O4YvXigy0ZzK6PsKX8jYVTlQdMQHBY5IwYH6reJ5IM0KjJoum95VoZTTKtIAIxOjLnbVu8khwxYDyzFhrfUKkvcULCCrGx7PphBPNV6SN+/0TFNmuabhp1nLb/+lZ61bVFiV5Mfs7DF8WVVMvwhBMw68HqIyts/b5g68e/yjwV6do= -node_js: 4 + - secure: QlyQxWnziNgzWqptOtM0Oq1s/q6YHT/GPuslA31yC0nex7Wi6X9DFoF5rNlDEY0Y6WxCh8xzsZpwXrI9vZypgKoZlAwO1e3RLDsGV0APPrWg66MyImAwlHAJolvJg+ASsLJ8pm9nxMP/xapRamciqUMTUTeZh0V/5SR82BXQCf3zXe+9cMmAFNXBrIg6LDCm77AwW+1vkE/IZAL1oShSBwXEybn9kpYsdCiOGdnvMlChhaeqRlOUXkr3LHPUDtV8hbd2EswmPeHSV+RGdB/UFyRGa4g7gPgqtz7U2FS0/BqT0G2iJlAXGCttJnS6fXwyCriREplYjXzqrX0MeRWHD5vNxAucO/Va1n2tHEmJM3OhIYgO8VDM8S3nRRUDE/ifSjsu1UgBN7b1vml0zWo7rdvpD8fedx6+g4ph390kg5XRFNJZJ03YijfcNVUfnOTEWt9LntGRq5aKPB6RSbEvkuZFjLGHHD/xQu2LfyIjmueIWJNk4JeCNrm3zFPMhBAZfu7WTJPTk3dZ2L+0mty1QbaJ/lyTWIBYbTVBwwHzXKrPbgg5u/9e6DjhT8Zg/eJvmN/+sXAlUqnmTAE9coQ0LIivg6COWPoRDmdGl2uMygiCaLkFAy4sqhjP99Aq5/ekZWXUrTTa4NGw2qnvM4JY9YcEzUC0ZqzM11gj8x8ATi0= + - secure: d0wz93AwXyNVmCr33od+TFC51nZgUzcdwHiJWxX0E+msZ8VgYCjj21D6OOZy84O7vYiPFy8vO03dvyqkj1uclEvfu2YlfiEaRxifKaxN6mQx142WjBtdHFjEUfBJR5eqm5qSeGj7aSZzPgerUl6yAkYH5tFldBatevF5Ax98Yr1dCsgpegsLCmBmusPH7tERnBilalcvXKVBfRXrnrkFkVoWroBb04W79aZSTlLGTlpBJCzR9Xe7RiXqnanSQQb1LjyCl55P0NvVVRjwpoVnikRqkIV/jehcNfIiJSC/vetepqqUehD6RdP2T8Nio7YvlLtXnW9vptlKYL2uZjhg23DyhgGW/4ZPaIABWVBqVUBbyaX6GCXo3EMyQcZhi17qCWEKnFGCrorC/4ZM6A0kJ+olOfQxszf9HrAX8+9DCaiKscn2Lz+ON/opFKFRAQngCJ9swBc27twavUxx4qNzOVJLdH8oGhCdl5DA4mgGGDWZz463X0HzagGUpi/RfME26uQnTkyK8eErL2yac+1VmA/QOx0RkYlrZ/pIEywkZPWusjJepCm9nlZGylaBr2mDpk8Kea+7IytO6sefiBwjX1RiqmnjnszO3jb/w5s0giUItWuFmDr14sOaFmj6wQB643eSGi42LSPG+FMea1RwUupyEPeLZq/aoJ0jmewGLv4= +node_js: stable addons: - firefox: '42.0' + firefox: '46.0' apt: sources: - - google-chrome + - google-chrome packages: - - google-chrome-stable + - google-chrome-stable + sauce_connect: true script: - - xvfb-run wct - - "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi" +- xvfb-run wct +- if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s 'default'; fi +dist: trusty diff --git a/dashboard-ui/bower_components/iron-a11y-announcer/CONTRIBUTING.md b/dashboard-ui/bower_components/iron-a11y-announcer/CONTRIBUTING.md index 7b10141565..093090d435 100644 --- a/dashboard-ui/bower_components/iron-a11y-announcer/CONTRIBUTING.md +++ b/dashboard-ui/bower_components/iron-a11y-announcer/CONTRIBUTING.md @@ -1,11 +1,16 @@ - + # Polymer Elements ## Guide for Contributors @@ -41,7 +46,7 @@ Polymer Elements are built in the open, and the Polymer authors eagerly encourag 3. Click the `paper-foo` element. ``` - 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [http://jsbin.com/cagaye](http://jsbin.com/cagaye/edit?html,output). + 2. **A reduced test case that demonstrates the problem.** If possible, please include the test case as a JSBin. Start with this template to easily import and use relevant Polymer Elements: [https://jsbin.com/cagaye/edit?html,output](https://jsbin.com/cagaye/edit?html,output). 3. **A list of browsers where the problem occurs.** This can be skipped if the problem is the same across all browsers. @@ -51,14 +56,14 @@ Polymer Elements are built in the open, and the Polymer authors eagerly encourag When submitting pull requests, please provide: - 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues using the following syntax: + 1. **A reference to the corresponding issue** or issues that will be closed by the pull request. Please refer to these issues in the pull request description using the following syntax: ```markdown (For a single issue) Fixes #20 (For multiple issues) - Fixes #32, #40 + Fixes #32, fixes #40 ``` 2. **A succinct description of the design** used to fix any related issues. For example: diff --git a/dashboard-ui/bower_components/iron-a11y-announcer/bower.json b/dashboard-ui/bower_components/iron-a11y-announcer/bower.json index ed8d8d0081..c049390d9d 100644 --- a/dashboard-ui/bower_components/iron-a11y-announcer/bower.json +++ b/dashboard-ui/bower_components/iron-a11y-announcer/bower.json @@ -1,6 +1,6 @@ { "name": "iron-a11y-announcer", - "version": "1.0.4", + "version": "1.0.5", "description": "A singleton element that simplifies announcing text to screen readers.", "keywords": [ "web-components", @@ -18,7 +18,7 @@ "main": "iron-a11y-announcer.html", "license": "http://polymer.github.io/LICENSE.txt", "dependencies": { - "polymer": "polymer/polymer#^1.0.0" + "polymer": "polymer/polymer#^1.1.0" }, "devDependencies": { "iron-component-page": "polymerelements/iron-component-page#^1.0.0", @@ -27,7 +27,7 @@ "paper-styles": "polymerelements/paper-styles#^1.0.0", "test-fixture": "polymerelements/test-fixture#^1.0.0", "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0", - "web-component-tester": "polymer/web-component-tester#^3.4.0" + "web-component-tester": "^4.0.0" }, "ignore": [] } diff --git a/dashboard-ui/bower_components/iron-a11y-announcer/demo/x-announces.html b/dashboard-ui/bower_components/iron-a11y-announcer/demo/x-announces.html index 404f7c09b5..15c43c0d45 100644 --- a/dashboard-ui/bower_components/iron-a11y-announcer/demo/x-announces.html +++ b/dashboard-ui/bower_components/iron-a11y-announcer/demo/x-announces.html @@ -1,4 +1,13 @@ + - - diff --git a/dashboard-ui/bower_components/iron-a11y-announcer/test/index.html b/dashboard-ui/bower_components/iron-a11y-announcer/test/index.html index c65b8014a6..4307eb38a1 100644 --- a/dashboard-ui/bower_components/iron-a11y-announcer/test/index.html +++ b/dashboard-ui/bower_components/iron-a11y-announcer/test/index.html @@ -1,5 +1,4 @@ - - - - - +--> iron-a11y-announcer tests @@ -19,8 +15,10 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN - - + + + diff --git a/dashboard-ui/bower_components/iron-a11y-keys-behavior/.bower.json b/dashboard-ui/bower_components/iron-a11y-keys-behavior/.bower.json index 22dfa4486b..e5df09dd89 100644 --- a/dashboard-ui/bower_components/iron-a11y-keys-behavior/.bower.json +++ b/dashboard-ui/bower_components/iron-a11y-keys-behavior/.bower.json @@ -1,6 +1,6 @@ { "name": "iron-a11y-keys-behavior", - "version": "1.1.6", + "version": "1.1.7", "description": "A behavior that enables keybindings for greater a11y.", "keywords": [ "web-components", @@ -19,7 +19,7 @@ "main": "iron-a11y-keys-behavior.html", "license": "http://polymer.github.io/LICENSE.txt", "dependencies": { - "polymer": "Polymer/polymer#^1.0.0" + "polymer": "Polymer/polymer#^1.1.0" }, "devDependencies": { "paper-styles": "PolymerElements/paper-styles#^1.0.2", @@ -31,11 +31,11 @@ }, "ignore": [], "homepage": "https://github.com/PolymerElements/iron-a11y-keys-behavior", - "_release": "1.1.6", + "_release": "1.1.7", "_resolution": { "type": "version", - "tag": "v1.1.6", - "commit": "28435b2e02d0e5e5268e984d925b03643cea5e34" + "tag": "v1.1.7", + "commit": "cde403dee704a1d3ea5f7cb49067f0eab31a8afa" }, "_source": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git", "_target": "^1.0.0", diff --git a/dashboard-ui/bower_components/iron-a11y-keys-behavior/.travis.yml b/dashboard-ui/bower_components/iron-a11y-keys-behavior/.travis.yml index bb7b10a3e2..2658368915 100644 --- a/dashboard-ui/bower_components/iron-a11y-keys-behavior/.travis.yml +++ b/dashboard-ui/bower_components/iron-a11y-keys-behavior/.travis.yml @@ -6,8 +6,10 @@ before_script: - polylint env: global: - - secure: OZhLlPsjjnWU4FyZ+RKq5i/Nv/tElvcjr9+OT04ENGKfh9+fkuij/XdHJQe6EpOCjrNkwt23c+I6V5YWRrSatRX/AxEkViW8EXnF32rX3HV8fWnjD6Vfn+4Qz82y4huc9II8OV5I7jFDln6yzEGZn08zAtbmhj5dSpYtT1spSf/ZuUkqn4mMRJW2wCOnzbjueP56Ry40IwQm0enLXVQLPYB3LC4fBWfT+VFrsE9qH1ZgGKcSD/n2dOD3d6xjts4FSilNp2IZ8Km5RNAFUxYmkcwrY4O2ltNtKUngWwIpeplpz0bNj5k8kOpT5xA/FT630M5sFd1ODVp846kTr/EyYTq/VCiwTaA/vDfZL85DC3O+Zt0vTHAvkxKAaXkg9sMp8gJOJ6gt6cK8rV8z7npeAUVsK1gmuHYXne1Z76SRgWwbE0/z82vyFLNgitmZDLLM1fP3TpzsK1QQg1ikn6iYXdWpHcrzBi6lk8mCafnP7D7B/yFB/Z6Y9AFI6NQI/jWP2FMMJjMWbaJVG9DAU4PWlVTiFnhfVjPI7FUEmW46/QjH1ztSZWpDA9SBozJluIpKRA1qk1EgGX1RBFBHrbFtHG//x0AGyAV6gWOfdKjl/nqcM02xFUSrDb0tkNUnEAS6K7l+X1eDaBbiaAQiakPt9Je2WvvHyc+OiZviSc72Gmc= - - secure: vIs86+z7s1QwihkHtLBRQzlmJRSIWIadq3SlDdZHS4HOivH7fNV0d4hm8QnZYZ9X8yvSvxFCzEFdLuX1TpU0H3oy5wgYky7DnfJtsEhuOfW8dobHHZeCNi/t2FQAXpobqpRwojC3A+1b1lNrY1XNpYRz7aEialO4Yr8e1SQSLex5zw/pqm7g9Vz6PnQwobDQcGXKc6ZWc84+DqOo9qfkSlnEJC/1vQxHYpUa172UnnAnmHJ7gZKdhf9aLWJSZcSpPcoKEnvslRFmeDyRMNRDWVzcg2vHnV+tc1aYzp1wsrRW3P+oqwYlvGlxo+5U92QLXKIcKZhGblVWxe8BtXgiVzgS1sz5D11vKs61Xe46onbguG/XK3UxX9bPRK5uklkC5fwAY2hhvOTGXqimTb2YrlyEWO3BCKGBk6Is3KGyCe7c2nNEmXPUSun9X1JLGRPivJb9iBR4/WSEFvibYHl6/gIke9LdXPOCHuJ3+Iu14lCz+pwi8ADIWVuGpDIxFcorG8a3BCoxQo5VouUbSe0mcNttAvSzBNxhljaaBuFs56DLDpLRr0sGhqvfA1JzdCyzVyrk4WECfZw26pAnYCyTczVXmu5msVdKnjPJKtDqWazvIhHk2G1mk8CKb14lrN58u/Kh6PQ3miJ+61c1stBWhRDlp2QffOkBJiOATKHF+AA= + - secure: >- + XJ31r/5USVGZRtziCLfr8qM1pJKKQMUN1AeYbCdDFEc6i293WxZneR8PwUVhvyptu+qdyd28uy24sH+Ob7kShFbZTUaif5P4gqHPekrYToI0aHyhmVX7C1LmT7nEL8IcT62NhUwh+83eHTAdodkXgnhfQhPn9FHV24Dkvwm8OKhhzEhtTgUGVuGX9j9FyNV6n1+gf4X3Zq63+NkEUh5vpolpue4W7ul2u0sf4l0fzg9pvKPCmywUwX2i7wwAEf3CJghMu2xup54OzXTEkjjSou/ebt1ZnxaUNV1+dblfUne0v9wTD0dPF8H3DwgewwzcZSbOZmj6lFVHRzmLzWcRJOEKdDrpJkjpg7HIhNPGCKDUcNylekafqi7ezhzrkzFwkh6JCdAj7He4mv/X/OUDNjNCClB7Ms/+WPZwtACvIcR2/pvgZ+1PHbIkbIInyAe6iVMMR0oUecei/X+d04DH7iW7rrODVEu6qdibsJki0R0lR2184rrDO9pGek4rLu9sUQBDNgEM6ZLEXXByO8lpG4xStRdkg0/uR5i1/Q8kux4gIJ9yV8WLANkS8NVlmuJgIi6kbh5n4VVKaihGhbBUuTt2aL7fLnH2I6YRwjyNI9TOIRxwk4afppFYUuq6Fv+nfPcdqDOi5Y2AOXLJ3Yvco0+H57nXe/Ny29gFVW4Kftg= + - secure: >- + huEi/Ja2qnLatb7EJ4Jdc/XAeKphhdH6G+px7/XZY33oDawjStxakx0N/MpT0LPE1BdEWOYTzc17CzKv9R2L3ybWksqXyv/Zs+1NMTmpEAS/54Sk4E61aE3nrV5cfS2R8dBGbJhFoH1W237BDsbw9A4XhsTvhxlIsluWsZgeurbleGg+DgAmg8KlHGRddsfBFgXEk+Khhj6KPsbgPUiWhXpdnXKBPJKF7fJEAbsGR4aFK2eFbYd1OAgJg2Aye0n93IHe+SsxcKRUYteg6UK9V8fk7q5PBlvaodly4F3gH82l+zbnhcTFVW+qN0s6xDBTQzsQ55eTlO3pEezIo3u/1Lq41Yoe6scEkLs63pSYqoB3kakbhLMDJAen080ggdNg9evqvgyznKFYM7sqEcPu+KxHd043DyLTTW11y9lZ/hV3xSTdG4W8mV7+ILbIi54wMaYAcWSGMTOVM0JC/KDoVjze3tzDmfcZwiutLPBFgfrkfJQf3fyqcgvhoLKtHaWHI+76XDsXwEOS2Q5OX9oDtjoZaZ7r8Gp4dqwaKYceOrlsLbaZOLh5nJ4WnDbf4AqZkeM22QWWIfUN6aK+yhsDpQ/d+xJ+/WFENDADrMEKp0Lf3CkzAAcpHp3u65B9qsqweD5/5Je9t0GsA/NvK2xCasnNz6inYy4tAx9i4NWPcOY= node_js: stable addons: firefox: '46.0' @@ -19,5 +21,5 @@ addons: sauce_connect: true script: - xvfb-run wct - - "if [ \"${TRAVIS_PULL_REQUEST}\" = \"false\" ]; then wct -s 'default'; fi" + - 'if [ "${TRAVIS_PULL_REQUEST}" = "false" ]; then wct -s ''default''; fi' dist: trusty diff --git a/dashboard-ui/bower_components/iron-a11y-keys-behavior/bower.json b/dashboard-ui/bower_components/iron-a11y-keys-behavior/bower.json index ae6cb65598..28428683c7 100644 --- a/dashboard-ui/bower_components/iron-a11y-keys-behavior/bower.json +++ b/dashboard-ui/bower_components/iron-a11y-keys-behavior/bower.json @@ -1,6 +1,6 @@ { "name": "iron-a11y-keys-behavior", - "version": "1.1.6", + "version": "1.1.7", "description": "A behavior that enables keybindings for greater a11y.", "keywords": [ "web-components", @@ -19,7 +19,7 @@ "main": "iron-a11y-keys-behavior.html", "license": "http://polymer.github.io/LICENSE.txt", "dependencies": { - "polymer": "Polymer/polymer#^1.0.0" + "polymer": "Polymer/polymer#^1.1.0" }, "devDependencies": { "paper-styles": "PolymerElements/paper-styles#^1.0.2", diff --git a/dashboard-ui/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html b/dashboard-ui/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html index 16b9b2a518..5914bb9999 100644 --- a/dashboard-ui/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html +++ b/dashboard-ui/bower_components/iron-a11y-keys-behavior/demo/x-key-aware.html @@ -13,29 +13,30 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN -