1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

update now playing screen

This commit is contained in:
Luke Pulverenti 2017-01-18 08:33:18 -05:00
parent 3ead8a75b4
commit ad285bf734
20 changed files with 265 additions and 119 deletions

View file

@ -14,12 +14,12 @@
}, },
"devDependencies": {}, "devDependencies": {},
"ignore": [], "ignore": [],
"version": "1.4.474", "version": "1.4.475",
"_release": "1.4.474", "_release": "1.4.475",
"_resolution": { "_resolution": {
"type": "version", "type": "version",
"tag": "1.4.474", "tag": "1.4.475",
"commit": "6e74a88452ec9dee906696b042c969dcc1aee842" "commit": "ee9afc32bf7c7da8a40158d556cb217bd2c80ef5"
}, },
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.1", "_target": "^1.2.1",

View file

@ -971,15 +971,19 @@
}); });
}; };
self.getPlaylist = function () {
return Promise.resolve([]);
};
self.getCurrentPlaylistIndex = function () { self.getCurrentPlaylistIndex = function () {
return 0; return 0;
}; };
self.setCurrentPlaylistIndex = function (index) { self.setCurrentPlaylistItem = function (playlistItemId) {
return Promise.resolve(); return Promise.resolve();
}; };
self.removeFromPlaylist = function (index) { self.removeFromPlaylist = function (playlistItemIds) {
return Promise.resolve(); return Promise.resolve();
}; };

View file

@ -107,20 +107,35 @@
function onDrop(evt, itemsContainer) { function onDrop(evt, itemsContainer) {
loading.show();
var el = evt.item; var el = evt.item;
var newIndex = evt.newIndex; var newIndex = evt.newIndex;
var itemId = el.getAttribute('data-playlistitemid'); var itemId = el.getAttribute('data-playlistitemid');
var playlistId = el.getAttribute('data-playlistid'); var playlistId = el.getAttribute('data-playlistid');
if (!playlistId) {
var oldIndex = evt.oldIndex;
el.dispatchEvent(new CustomEvent('itemdrop', {
detail: {
oldIndex: oldIndex,
newIndex: newIndex,
playlistItemId: itemId
},
bubbles: true,
cancelable: false
}));
return;
}
var serverId = el.getAttribute('data-serverid'); var serverId = el.getAttribute('data-serverid');
var apiClient = connectionManager.getApiClient(serverId); var apiClient = connectionManager.getApiClient(serverId);
newIndex = Math.max(0, newIndex - 1); newIndex = Math.max(0, newIndex - 1);
loading.show();
apiClient.ajax({ apiClient.ajax({
url: apiClient.getUrl('Playlists/' + playlistId + '/Items/' + itemId + '/Move/' + newIndex), url: apiClient.getUrl('Playlists/' + playlistId + '/Items/' + itemId + '/Move/' + newIndex),
@ -129,7 +144,6 @@
}).then(function () { }).then(function () {
el.setAttribute('data-index', newIndex);
loading.hide(); loading.hide();
}, function () { }, function () {
@ -171,7 +185,7 @@
// dragging ended // dragging ended
onEnd: function (/**Event*/evt) { onEnd: function (/**Event*/evt) {
onDrop(evt, self); return onDrop(evt, self);
} }
}); });
}); });

View file

@ -42,6 +42,7 @@
.listViewDragHandle { .listViewDragHandle {
margin-left: -.25em !important; margin-left: -.25em !important;
touch-action: none;
} }
.listItemBody { .listItemBody {

View file

@ -235,7 +235,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
var collectionTypeData = item.CollectionType ? (' data-collectiontype="' + item.CollectionType + '"') : ''; var collectionTypeData = item.CollectionType ? (' data-collectiontype="' + item.CollectionType + '"') : '';
var channelIdData = item.ChannelId ? (' data-channelid="' + item.ChannelId + '"') : ''; var channelIdData = item.ChannelId ? (' data-channelid="' + item.ChannelId + '"') : '';
html += '<' + outerTagName + ' class="' + cssClass + '" data-index="' + i + '"' + playlistItemId + ' data-action="' + action + '" data-isfolder="' + item.IsFolder + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-type="' + item.Type + '"' + mediaTypeData + collectionTypeData + channelIdData + positionTicksData + collectionIdData + playlistIdData + '>'; html += '<' + outerTagName + ' class="' + cssClass + '"' + playlistItemId + ' data-action="' + action + '" data-isfolder="' + item.IsFolder + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-type="' + item.Type + '"' + mediaTypeData + collectionTypeData + channelIdData + positionTicksData + collectionIdData + playlistIdData + '>';
if (!clickEntireItem && options.dragHandle) { if (!clickEntireItem && options.dragHandle) {
//html += '<button is="paper-icon-button-light" class="listViewDragHandle autoSize listItemButton"><i class="md-icon">&#xE25D;</i></button>'; //html += '<button is="paper-icon-button-light" class="listViewDragHandle autoSize listItemButton"><i class="md-icon">&#xE25D;</i></button>';

View file

@ -30,6 +30,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
var repeatMode = 'RepeatNone'; var repeatMode = 'RepeatNone';
var playlist = []; var playlist = [];
var currentPlaylistIndex; var currentPlaylistIndex;
var currentPlaylistItemId;
var currentPlayOptions; var currentPlayOptions;
var playNextAfterEnded = true; var playNextAfterEnded = true;
var playerStates = {}; var playerStates = {};
@ -454,8 +455,14 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
}); });
}; };
self.playlist = function () { self.getPlaylist = function (player) {
return playlist.slice(0);
player = player || currentPlayer;
if (player && !enableLocalPlaylistManagement(player)) {
return player.getPlaylist();
}
return Promise.resolve(playlist.slice(0));
}; };
self.getCurrentPlayer = function () { self.getCurrentPlayer = function () {
@ -916,9 +923,9 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
changeStream(player, ticks); changeStream(player, ticks);
}; };
self.nextChapter = function () { self.nextChapter = function (player) {
var player = currentPlayer; player = player || currentPlayer;
var item = self.currentItem(player); var item = self.currentItem(player);
var ticks = getCurrentTicks(player); var ticks = getCurrentTicks(player);
@ -930,15 +937,15 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
})[0]; })[0];
if (nextChapter) { if (nextChapter) {
self.seek(nextChapter.StartPositionTicks); self.seek(nextChapter.StartPositionTicks, player);
} else { } else {
self.nextTrack(); self.nextTrack(player);
} }
}; };
self.previousChapter = function () { self.previousChapter = function (player) {
var player = currentPlayer; player = player || currentPlayer;
var item = self.currentItem(player); var item = self.currentItem(player);
var ticks = getCurrentTicks(player); var ticks = getCurrentTicks(player);
@ -946,21 +953,26 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
// Go back 10 seconds // Go back 10 seconds
ticks -= 100000000; ticks -= 100000000;
// If there's no previous track, then at least rewind to beginning
if (self.getCurrentPlaylistIndex(player) === 0) {
ticks = Math.max(ticks, 0);
}
var previousChapters = (item.Chapters || []).filter(function (i) { var previousChapters = (item.Chapters || []).filter(function (i) {
return i.StartPositionTicks <= ticks; return i.StartPositionTicks <= ticks;
}); });
if (previousChapters.length) { if (previousChapters.length) {
self.seek(previousChapters[previousChapters.length - 1].StartPositionTicks); self.seek(previousChapters[previousChapters.length - 1].StartPositionTicks, player);
} else { } else {
self.previousTrack(); self.previousTrack(player);
} }
}; };
self.fastForward = function () { self.fastForward = function (player) {
var player = currentPlayer; player = player || currentPlayer;
if (player.fastForward != null) { if (player.fastForward != null) {
player.fastForward(userSettings.skipForwardLength()); player.fastForward(userSettings.skipForwardLength());
@ -979,9 +991,9 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
} }
}; };
self.rewind = function () { self.rewind = function (player) {
var player = currentPlayer; player = player || currentPlayer;
if (player.rewind != null) { if (player.rewind != null) {
player.rewind(userSettings.skipBackLength()); player.rewind(userSettings.skipBackLength());
@ -1492,7 +1504,15 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
} }
var afterPlayInternal = function () { var afterPlayInternal = function () {
setPlaylistState(0, items);
for (var i = 0, length = items.length; i < length; i++) {
addUniquePlaylistItemId(items[i]);
}
playlist = items.slice(0);
var playIndex = 0;
setPlaylistState(items[playIndex].PlaylistItemId, playIndex);
loading.hide(); loading.hide();
}; };
@ -1519,13 +1539,22 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
return true; return true;
} }
// Set currentPlaylistIndex and playlist. Using a method allows for overloading in derived player implementations var currentId = 0;
function setPlaylistState(i, items) { function addUniquePlaylistItemId(item) {
if (!isNaN(i)) {
currentPlaylistIndex = i; if (!item.PlaylistItemId) {
item.PlaylistItemId = "playlistItem" + currentId;
currentId++;
} }
if (items) { }
playlist = items.slice(0);
// Set playlist state. Using a method allows for overloading in derived player implementations
function setPlaylistState(playlistItemId, index) {
if (!isNaN(index)) {
currentPlaylistIndex = index;
currentPlaylistItemId = playlistItemId;
} }
} }
@ -2215,55 +2244,114 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
} }
} }
self.setCurrentPlaylistIndex = function (i, player) { function findPlaylistIndex(playlistItemId, list) {
for (var i = 0, length = playlist.length; i < length; i++) {
if (list[i].PlaylistItemId === playlistItemId) {
return i;
}
}
return -1;
}
self.setCurrentPlaylistItem = function (playlistItemId, player) {
player = player || currentPlayer; player = player || currentPlayer;
if (player && !enableLocalPlaylistManagement(player)) { if (player && !enableLocalPlaylistManagement(player)) {
return player.setCurrentPlaylistIndex(i); return player.setCurrentPlaylistItem(playlistItemId);
} }
var newItem = playlist[i]; var newItem;
var newItemIndex;
for (var i = 0, length = playlist.length; i < length; i++) {
if (playlist[i].PlaylistItemId === playlistItemId) {
newItem = playlist[i];
newItemIndex = i;
break;
}
}
var playOptions = Object.assign({}, currentPlayOptions, { if (newItem) {
startPositionTicks: 0 var playOptions = Object.assign({}, currentPlayOptions, {
}); startPositionTicks: 0
});
playInternal(newItem, playOptions, function () { playInternal(newItem, playOptions, function () {
currentPlaylistIndex = i; setPlaylistState(newItem.PlaylistItemId, newItemIndex);
}); });
}
}; };
self.removeFromPlaylist = function (index, player) { self.removeFromPlaylist = function (playlistItemIds, player) {
if (index < 0) { if (!playlistItemIds) {
throw new Error('Invalid playlist index'); throw new Error('Invalid playlistItemIds');
} }
player = player || currentPlayer; player = player || currentPlayer;
if (player && !enableLocalPlaylistManagement(player)) { if (player && !enableLocalPlaylistManagement(player)) {
return player.removeFromPlaylist(i); return player.removeFromPlaylist(playlistItemIds);
} }
if (playlist.length <= 1) { if (playlist.length <= playlistItemIds.length) {
return self.stop(); return self.stop();
} }
var isCurrentIndex = self.getCurrentPlaylistIndex(player) === index; var currentPlaylistItemId = self.currentItem(player).PlaylistItemId;
var isCurrentIndex = playlistItemIds.indexOf(currentPlaylistItemId) !== -1;
playlist.splice(index, 1);
playlist = playlist.filter(function (item) {
return playlistItemIds.indexOf(item.PlaylistItemId) === -1;
});
events.trigger(player, 'playlistitemremove', [ events.trigger(player, 'playlistitemremove', [
{ {
index: index playlistItemIds: playlistItemIds
}]); }]);
if (isCurrentIndex) { if (isCurrentIndex) {
return self.setCurrentPlaylistIndex(Math.min(index, playlist.length - 1), player); return self.setCurrentPlaylistItem(0, player);
} }
return Promise.resolve(); return Promise.resolve();
}; };
function moveInArray(array, from, to) {
array.splice(to, 0, array.splice(from, 1)[0]);
}
self.movePlaylistItem = function (playlistItemId, newIndex, player) {
player = player || currentPlayer;
if (player && !enableLocalPlaylistManagement(player)) {
return player.movePlaylistItem(playlistItemId, newIndex);
}
var oldIndex;
for (var i = 0, length = playlist.length; i < length; i++) {
if (playlist[i].PlaylistItemId === playlistItemId) {
oldIndex = i;
break;
}
}
if (oldIndex === -1 || oldIndex === newIndex) {
return;
}
if (newIndex >= playlist.length) {
throw new Error('newIndex out of bounds');
}
moveInArray(playlist, oldIndex, newIndex);
events.trigger(player, 'playlistitemmove', [
{
playlistItemId: playlistItemId,
newIndex: newIndex
}]);
};
self.getCurrentPlaylistIndex = function (i, player) { self.getCurrentPlaylistIndex = function (i, player) {
player = player || currentPlayer; player = player || currentPlayer;
@ -2271,7 +2359,17 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
return player.getCurrentPlaylistIndex(); return player.getCurrentPlaylistIndex();
} }
return currentPlaylistIndex; return findPlaylistIndex(currentPlaylistItemId, playlist);
};
self.getCurrentPlaylistItemId = function (i, player) {
player = player || currentPlayer;
if (player && !enableLocalPlaylistManagement(player)) {
return player.getCurrentPlaylistItemId();
}
return currentPlaylistItemId;
}; };
self.setRepeatMode = function (value, player) { self.setRepeatMode = function (value, player) {
@ -2295,7 +2393,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
return repeatMode; return repeatMode;
}; };
function getNextItemInfo() { function getNextItemInfo(player) {
var newIndex; var newIndex;
var playlistLength = playlist.length; var playlistLength = playlist.length;
@ -2303,16 +2401,16 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
switch (self.getRepeatMode()) { switch (self.getRepeatMode()) {
case 'RepeatOne': case 'RepeatOne':
newIndex = currentPlaylistIndex; newIndex = self.getCurrentPlaylistIndex(player);
break; break;
case 'RepeatAll': case 'RepeatAll':
newIndex = currentPlaylistIndex + 1; newIndex = self.getCurrentPlaylistIndex(player) + 1;
if (newIndex >= playlistLength) { if (newIndex >= playlistLength) {
newIndex = 0; newIndex = 0;
} }
break; break;
default: default:
newIndex = currentPlaylistIndex + 1; newIndex = self.getCurrentPlaylistIndex(player) + 1;
break; break;
} }
@ -2339,7 +2437,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
return player.nextTrack(); return player.nextTrack();
} }
var newItemInfo = getNextItemInfo(); var newItemInfo = getNextItemInfo(player);
if (newItemInfo) { if (newItemInfo) {
@ -2350,7 +2448,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
}); });
playInternal(newItemInfo.item, playOptions, function () { playInternal(newItemInfo.item, playOptions, function () {
setPlaylistState(newItemInfo.index); setPlaylistState(newItemInfo.item.PlaylistItemId, newItemInfo.index);
}); });
} }
}; };
@ -2362,7 +2460,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
return player.previousTrack(); return player.previousTrack();
} }
var newIndex = currentPlaylistIndex - 1; var newIndex = self.getCurrentPlaylistIndex(player) - 1;
if (newIndex >= 0) { if (newIndex >= 0) {
var newItem = playlist[newIndex]; var newItem = playlist[newIndex];
@ -2373,7 +2471,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
}); });
playInternal(newItem, playOptions, function () { playInternal(newItem, playOptions, function () {
setPlaylistState(newIndex); setPlaylistState(newItem.PlaylistItemId, newIndex);
}); });
} }
} }
@ -2431,6 +2529,8 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
function queueAll(items, mode) { function queueAll(items, mode) {
for (var i = 0, length = items.length; i < length; i++) { for (var i = 0, length = items.length; i < length; i++) {
addUniquePlaylistItemId(items[i]);
playlist.push(items[i]); playlist.push(items[i]);
} }
} }
@ -2531,7 +2631,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
clearProgressInterval(player); clearProgressInterval(player);
var nextItem = playNextAfterEnded ? getNextItemInfo() : null; var nextItem = playNextAfterEnded ? getNextItemInfo(player) : null;
var nextMediaType = (nextItem ? nextItem.item.MediaType : null); var nextMediaType = (nextItem ? nextItem.item.MediaType : null);
@ -2548,6 +2648,7 @@ define(['events', 'datetime', 'appSettings', 'pluginManager', 'userSettings', 'g
if (!nextItem) { if (!nextItem) {
playlist = []; playlist = [];
currentPlaylistIndex = -1; currentPlaylistIndex = -1;
currentPlaylistItemId = null;
} }
events.trigger(player, 'playbackstop', [state]); events.trigger(player, 'playbackstop', [state]);

View file

@ -44,13 +44,6 @@ define(['actionsheet', 'datetime', 'playbackManager', 'globalize', 'appSettings'
}); });
} }
if (playbackManager.canQueue(item)) {
menuItems.push({
name: globalize.translate('sharedcomponents#Queue'),
id: 'queue'
});
}
if (itemType === "Audio" || itemType === "MusicAlbum" || itemType === "MusicArtist" || itemType === "MusicGenre") { if (itemType === "Audio" || itemType === "MusicAlbum" || itemType === "MusicArtist" || itemType === "MusicGenre") {
menuItems.push({ menuItems.push({
name: globalize.translate('sharedcomponents#InstantMix'), name: globalize.translate('sharedcomponents#InstantMix'),

View file

@ -178,6 +178,7 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
isBack: isBackNav, isBack: isBackNav,
state: ctx.state, state: ctx.state,
type: route.type, type: route.type,
fullscreen: route.fullscreen,
controllerFactory: controllerFactory, controllerFactory: controllerFactory,
options: { options: {
supportsThemeMedia: route.supportsThemeMedia || false supportsThemeMedia: route.supportsThemeMedia || false

View file

@ -283,15 +283,19 @@
return state.MediaType === 'Audio'; return state.MediaType === 'Audio';
}; };
self.getPlaylist = function () {
return Promise.resolve([]);
};
self.getCurrentPlaylistIndex = function () { self.getCurrentPlaylistIndex = function () {
return 0; return 0;
}; };
self.setCurrentPlaylistIndex = function (index) { self.setCurrentPlaylistItem = function (playlistItemId) {
return Promise.resolve(); return Promise.resolve();
}; };
self.removeFromPlaylist = function (index) { self.removeFromPlaylist = function (playlistItemIds) {
return Promise.resolve(); return Promise.resolve();
}; };

View file

@ -288,7 +288,7 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
} }
else if (action === 'setplaylistindex') { else if (action === 'setplaylistindex') {
playbackManager.setCurrentPlaylistIndex(parseInt(card.getAttribute('data-index'))); playbackManager.setCurrentPlaylistItem(card.getAttribute('data-playlistitemid'));
} }
else if (action === 'record') { else if (action === 'record') {
@ -337,8 +337,7 @@ define(['playbackManager', 'inputManager', 'connectionManager', 'embyRouter', 'g
card.dispatchEvent(new CustomEvent('action-' + customAction, { card.dispatchEvent(new CustomEvent('action-' + customAction, {
detail: { detail: {
item: getItem(target), playlistItemId: card.getAttribute('data-playlistitemid')
index: parseInt(card.getAttribute('data-index') || '-1')
}, },
cancelable: false, cancelable: false,
bubbles: true bubbles: true

View file

@ -43,6 +43,16 @@ define(['browser', 'dom', 'css!./viewcontainer-lite'], function (browser, dom) {
if (options.type) { if (options.type) {
view.setAttribute('data-type', options.type); view.setAttribute('data-type', options.type);
} }
var properties = [];
if (options.fullscreen) {
properties.push('fullscreen');
}
if (properties.length) {
view.setAttribute('data-properties', properties.join(','));
}
view.innerHTML = options.view; view.innerHTML = options.view;
var currentPage = allPages[pageIndex]; var currentPage = allPages[pageIndex];

View file

@ -65,23 +65,33 @@ define(['viewcontainer', 'focusManager', 'queryString', 'layoutManager'], functi
} }
} }
function getProperties(view) {
var props = view.getAttribute('data-properties');
if (props) {
return props.split(',');
}
return [];
}
function dispatchViewEvent(view, eventName, isRestored, isCancellable) { function dispatchViewEvent(view, eventName, isRestored, isCancellable) {
var eventDetail = {
type: view.getAttribute('data-type'),
isRestored: isRestored,
properties: getProperties(view)
};
var eventResult = view.dispatchEvent(new CustomEvent(eventName, { var eventResult = view.dispatchEvent(new CustomEvent(eventName, {
detail: { detail: eventDetail,
type: view.getAttribute('data-type'),
isRestored: isRestored
},
bubbles: true, bubbles: true,
cancelable: isCancellable || false cancelable: isCancellable || false
})); }));
if (dispatchPageEvents) { if (dispatchPageEvents) {
view.dispatchEvent(new CustomEvent(eventName.replace('view', 'page'), { view.dispatchEvent(new CustomEvent(eventName.replace('view', 'page'), {
detail: { detail: eventDetail,
type: view.getAttribute('data-type'),
isRestored: isRestored
},
bubbles: true, bubbles: true,
cancelable: false cancelable: false
})); }));
@ -93,13 +103,13 @@ define(['viewcontainer', 'focusManager', 'queryString', 'layoutManager'], functi
function getViewEventDetail(view, options, isRestore) { function getViewEventDetail(view, options, isRestore) {
var url = options.url; var url = options.url;
var state = options.state;
var index = url.indexOf('?'); var index = url.indexOf('?');
var params = index === -1 ? {} : queryString.parse(url.substring(index + 1)); var params = index === -1 ? {} : queryString.parse(url.substring(index + 1));
return { return {
detail: { detail: {
type: view.getAttribute('data-type'), type: view.getAttribute('data-type'),
properties: getProperties(view),
params: params, params: params,
isRestored: isRestore, isRestored: isRestore,
state: options.state, state: options.state,

View file

@ -326,7 +326,7 @@
var instance; var instance;
function onViewShow(e) { function onViewShow(e) {
if (e.detail.type === 'video-osd' || !Dashboard.getCurrentUserId()) { if (e.detail.properties.indexOf('fullscreen') !== -1 || !Dashboard.getCurrentUserId()) {
instance.hide(); instance.hide();
} else { } else {
instance.show(); instance.show();

View file

@ -451,7 +451,7 @@
function getPlaylistItems(player) { function getPlaylistItems(player) {
return Promise.resolve(playbackManager.playlist(player)); return playbackManager.getPlaylist(player);
return ApiClient.getItems(Dashboard.getCurrentUserId(), { return ApiClient.getItems(Dashboard.getCurrentUserId(), {
@ -487,7 +487,8 @@
icon: '&#xE15D;', icon: '&#xE15D;',
title: globalize.translate('ButtonRemove'), title: globalize.translate('ButtonRemove'),
id: 'remove' id: 'remove'
}] }],
dragHandle: true
}); });
playlistNeedsRefresh = false; playlistNeedsRefresh = false;
@ -496,13 +497,12 @@
itemsContainer.innerHTML = html; itemsContainer.innerHTML = html;
var index = playbackManager.getCurrentPlaylistIndex(player); var playlistItemId = playbackManager.getCurrentPlaylistItemId(player);
if (index != -1) { if (playlistItemId) {
var item = itemsContainer.querySelectorAll('.listItem')[index]; var img = itemsContainer.querySelector('.listItem[data-playlistItemId="' + playlistItemId + '"] .listItemImage');
if (item) { if (img) {
var img = item.querySelector('.listItemImage');
img.classList.remove('lazy'); img.classList.remove('lazy');
img.classList.add('playlistIndexIndicatorImage'); img.classList.add('playlistIndexIndicatorImage');
@ -531,7 +531,7 @@
} }
function onPlaylistUpdate(e) { function onPlaylistUpdate(e) {
var player = this; var player = this;
playbackManager.getPlayerState(player).then(function (state) { playbackManager.getPlayerState(player).then(function (state) {
@ -598,6 +598,7 @@
events.off(player, 'statechange', onPlaybackStart); events.off(player, 'statechange', onPlaybackStart);
events.off(player, 'repeatmodechange', onRepeatModeChange); events.off(player, 'repeatmodechange', onRepeatModeChange);
events.off(player, 'playlistitemremove', onPlaylistUpdate); events.off(player, 'playlistitemremove', onPlaylistUpdate);
events.off(player, 'playlistitemmove', onPlaylistUpdate);
events.off(player, 'playbackstop', onPlaybackStopped); events.off(player, 'playbackstop', onPlaybackStopped);
events.off(player, 'volumechange', onVolumeChanged); events.off(player, 'volumechange', onVolumeChanged);
events.off(player, 'pause', onPlayPauseStateChanged); events.off(player, 'pause', onPlayPauseStateChanged);
@ -627,6 +628,7 @@
events.on(player, 'statechange', onPlaybackStart); events.on(player, 'statechange', onPlaybackStart);
events.on(player, 'repeatmodechange', onRepeatModeChange); events.on(player, 'repeatmodechange', onRepeatModeChange);
events.on(player, 'playlistitemremove', onPlaylistUpdate); events.on(player, 'playlistitemremove', onPlaylistUpdate);
events.on(player, 'playlistitemmove', onPlaylistUpdate);
events.on(player, 'playbackstop', onPlaybackStopped); events.on(player, 'playbackstop', onPlaybackStopped);
events.on(player, 'volumechange', onVolumeChanged); events.on(player, 'volumechange', onVolumeChanged);
events.on(player, 'pause', onPlayPauseStateChanged); events.on(player, 'pause', onPlayPauseStateChanged);
@ -768,10 +770,22 @@
playbackManager.toggleMute(currentPlayer); playbackManager.toggleMute(currentPlayer);
}); });
context.querySelector('.playlist').addEventListener('action-remove', function (e) {
playbackManager.removeFromPlaylist(e.detail.index, currentPlayer); var playlistContainer = context.querySelector('.playlist');
playlistContainer.addEventListener('action-remove', function (e) {
playbackManager.removeFromPlaylist([e.detail.playlistItemId], currentPlayer);
}); });
playlistContainer.addEventListener('itemdrop', function (e) {
var newIndex = e.detail.newIndex;
var playlistItemId = e.detail.playlistItemId;
playbackManager.movePlaylistItem(playlistItemId, newIndex, currentPlayer);
});
playlistContainer.enableDragReordering(true);
} }
function onPlayerChange() { function onPlayerChange() {

View file

@ -102,6 +102,15 @@ define(['browser'], function (browser) {
view.setAttribute('data-type', options.type); view.setAttribute('data-type', options.type);
} }
var properties = [];
if (options.fullscreen) {
properties.push('fullscreen');
}
if (properties.length) {
view.setAttribute('data-properties', properties.join(','));
}
var animatable = view; var animatable = view;
allPages[pageIndex] = view; allPages[pageIndex] = view;

View file

@ -286,7 +286,6 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
} }
.detailUserDataIcons { .detailUserDataIcons {
margin-left: .5em;
white-space: nowrap; white-space: nowrap;
} }

View file

@ -101,7 +101,7 @@
.nowPlayingPageImage { .nowPlayingPageImage {
width: auto; width: auto;
height: 40vh; height: 36vh;
} }
} }

View file

@ -17,7 +17,7 @@
<div class="detailLogo"></div> <div class="detailLogo"></div>
<div class="detailPageContent"> <div class="detailPageContent">
<div class="detailPagePrimaryContainer"> <div class="detailPagePrimaryContainer">
<div class="detailImageContainer"> <div class="detailImageContainer">
@ -55,8 +55,8 @@
<i class="md-icon">more_vert</i> <i class="md-icon">more_vert</i>
&nbsp; &nbsp;
</button> </button>
<button is="emby-button" type="button" class="btnDeleteItem fab mini hide" title="${DeleteMedia}" style="margin-left:.5em;"><i class="md-icon">&#xE872;</i></button>
<div class="detailUserDataIcons userDataIcons"></div> <div class="detailUserDataIcons userDataIcons"></div>
<button is="emby-button" type="button" class="btnDeleteItem fab mini hide" title="${DeleteMedia}"><i class="md-icon">&#xE872;</i></button>
</div> </div>
<div class="syncLocalContainer hide" style="margin: 1em 0;"> <div class="syncLocalContainer hide" style="margin: 1em 0;">

View file

@ -2095,7 +2095,8 @@ var AppInfo = {};
dependencies: ['paper-icon-button-light', 'emby-slider', 'emby-button', 'emby-input', 'emby-itemscontainer'], dependencies: ['paper-icon-button-light', 'emby-slider', 'emby-button', 'emby-input', 'emby-itemscontainer'],
controller: 'scripts/nowplayingpage', controller: 'scripts/nowplayingpage',
autoFocus: false, autoFocus: false,
transition: 'fade' transition: 'fade',
fullscreen: true
}); });
defineRoute({ defineRoute({
@ -2346,7 +2347,8 @@ var AppInfo = {};
controller: 'scripts/videoosd', controller: 'scripts/videoosd',
autoFocus: false, autoFocus: false,
type: 'video-osd', type: 'video-osd',
supportsThemeMedia: true supportsThemeMedia: true,
fullscreen: true
}); });
defineRoute({ defineRoute({

View file

@ -734,29 +734,14 @@
function updatePlaylist(player) { function updatePlaylist(player) {
var items = playbackManager.playlist(player);
var index = playbackManager.getCurrentPlaylistIndex(player);
var previousEnabled = index > 0;
var nextEnabled = (index < items.length - 1);
var btnPreviousTrack = view.querySelector('.btnPreviousTrack'); var btnPreviousTrack = view.querySelector('.btnPreviousTrack');
var btnNextTrack = view.querySelector('.btnNextTrack'); var btnNextTrack = view.querySelector('.btnNextTrack');
if (!nextEnabled && !previousEnabled) { btnPreviousTrack.classList.remove('hide');
btnNextTrack.classList.remove('hide');
btnPreviousTrack.classList.add('hide'); btnNextTrack.disabled = false;
btnNextTrack.classList.add('hide'); btnPreviousTrack.disabled = false;
} else {
btnPreviousTrack.classList.remove('hide');
btnNextTrack.classList.remove('hide');
btnNextTrack.disabled = !nextEnabled;
btnPreviousTrack.disabled = !previousEnabled;
}
} }
function updateTimeText(elem, ticks, divider) { function updateTimeText(elem, ticks, divider) {