mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update context menu
This commit is contained in:
parent
289b252066
commit
0ce19d6e79
7 changed files with 148 additions and 29 deletions
|
@ -15,12 +15,12 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {},
|
"devDependencies": {},
|
||||||
"ignore": [],
|
"ignore": [],
|
||||||
"version": "1.4.86",
|
"version": "1.4.87",
|
||||||
"_release": "1.4.86",
|
"_release": "1.4.87",
|
||||||
"_resolution": {
|
"_resolution": {
|
||||||
"type": "version",
|
"type": "version",
|
||||||
"tag": "1.4.86",
|
"tag": "1.4.87",
|
||||||
"commit": "ddbdeddbe5f3fec3e7024a009077256d14f2ec0b"
|
"commit": "66ba0bbe4db51edaebe898f5672e6da45aafbed9"
|
||||||
},
|
},
|
||||||
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
|
||||||
"_target": "^1.2.0",
|
"_target": "^1.2.0",
|
||||||
|
|
|
@ -48,6 +48,8 @@
|
||||||
positionTo: button,
|
positionTo: button,
|
||||||
item: item
|
item: item
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO: playallfromhere, queueallfromhere
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter'], function (appHost, globalize, connectionManager, itemHelper, embyRouter) {
|
define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter', 'playbackManager'], function (appHost, globalize, connectionManager, itemHelper, embyRouter, playbackManager) {
|
||||||
|
|
||||||
function getCommands(options) {
|
function getCommands(options) {
|
||||||
|
|
||||||
|
@ -48,38 +48,86 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter']
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 (options.open !== false) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: globalize.translate('Open'),
|
name: globalize.translate('sharedcomponents#Open'),
|
||||||
id: 'open'
|
id: 'open'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (options.play) {
|
||||||
|
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) {
|
||||||
|
commands.push({
|
||||||
|
name: globalize.translate('sharedcomponents#Queue'),
|
||||||
|
id: 'queue'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.queueAllFromHere) {
|
||||||
|
commands.push({
|
||||||
|
name: globalize.translate('sharedcomponents#QueueAllFromHere'),
|
||||||
|
id: 'queueallfromhere'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (user.Policy.IsAdministrator) {
|
if (user.Policy.IsAdministrator) {
|
||||||
|
|
||||||
commands.push({
|
commands.push({
|
||||||
name: globalize.translate('Refresh'),
|
name: globalize.translate('sharedcomponents#Refresh'),
|
||||||
id: 'refresh'
|
id: 'refresh'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.Type != 'Timer' && user.Policy.EnablePublicSharing && appHost.supports('sharing')) {
|
if (item.Type != 'Timer' && user.Policy.EnablePublicSharing && appHost.supports('sharing')) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: globalize.translate('Share'),
|
name: globalize.translate('sharedcomponents#Share'),
|
||||||
id: '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 (options.openAlbum !== false && item.AlbumId) {
|
if (options.openAlbum !== false && item.AlbumId) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: Globalize.translate('ViewAlbum'),
|
name: Globalize.translate('sharedcomponents#ViewAlbum'),
|
||||||
id: 'album'
|
id: 'album'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) {
|
if (options.openArtist !== false && item.ArtistItems && item.ArtistItems.length) {
|
||||||
commands.push({
|
commands.push({
|
||||||
name: Globalize.translate('ViewArtist'),
|
name: Globalize.translate('sharedcomponents#ViewArtist'),
|
||||||
id: 'artist'
|
id: 'artist'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -88,6 +136,17 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter']
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getResolveFunction(resolve, id, changed, deleted) {
|
||||||
|
|
||||||
|
return function () {
|
||||||
|
resolve({
|
||||||
|
command: id,
|
||||||
|
updated: changed,
|
||||||
|
deleted: deleted
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function executeCommand(item, id) {
|
function executeCommand(item, id) {
|
||||||
|
|
||||||
var itemId = item.Id;
|
var itemId = item.Id;
|
||||||
|
@ -106,7 +165,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter']
|
||||||
items: [itemId],
|
items: [itemId],
|
||||||
serverId: serverId
|
serverId: serverId
|
||||||
|
|
||||||
}).then(reject, reject);
|
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -118,7 +177,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter']
|
||||||
items: [itemId],
|
items: [itemId],
|
||||||
serverId: serverId
|
serverId: serverId
|
||||||
|
|
||||||
}).then(reject, reject);
|
}).then(getResolveFunction(resolve, id, true), getResolveFunction(resolve, id));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -136,7 +195,7 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter']
|
||||||
serverId: serverId
|
serverId: serverId
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
reject();
|
getResolveFunction(getResolveFunction(resolve, id), id)();
|
||||||
});
|
});
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -146,27 +205,61 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter']
|
||||||
require(['subtitleEditor'], function (subtitleEditor) {
|
require(['subtitleEditor'], function (subtitleEditor) {
|
||||||
|
|
||||||
var serverId = apiClient.serverInfo().Id;
|
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;
|
break;
|
||||||
}
|
}
|
||||||
case 'refresh':
|
case 'refresh':
|
||||||
{
|
{
|
||||||
refresh(apiClient, itemId);
|
refresh(apiClient, itemId);
|
||||||
reject();
|
getResolveFunction(resolve, id)();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'open':
|
case 'open':
|
||||||
{
|
{
|
||||||
embyRouter.showItem(item);
|
embyRouter.showItem(item);
|
||||||
reject();
|
getResolveFunction(resolve, id)();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'play':
|
||||||
|
{
|
||||||
|
playbackManager.play({
|
||||||
|
items: [item]
|
||||||
|
});
|
||||||
|
getResolveFunction(resolve, id)();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'resume':
|
||||||
|
{
|
||||||
|
playbackManager.play({
|
||||||
|
items: [item]
|
||||||
|
});
|
||||||
|
getResolveFunction(resolve, id)();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'queue':
|
||||||
|
{
|
||||||
|
playbackManager.queue({
|
||||||
|
items: [item]
|
||||||
|
});
|
||||||
|
getResolveFunction(resolve, id)();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'shuffle':
|
||||||
|
{
|
||||||
|
playbackManager.shuffle(item);
|
||||||
|
getResolveFunction(resolve, id)();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'instantmix':
|
||||||
|
{
|
||||||
|
playbackManager.instantMix(item);
|
||||||
|
getResolveFunction(resolve, id)();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'delete':
|
case 'delete':
|
||||||
{
|
{
|
||||||
deleteItem(apiClient, itemId).then(function () {
|
deleteItem(apiClient, itemId).then(getResolveFunction(resolve, id, true, true), getResolveFunction(resolve, id));
|
||||||
resolve(true);
|
|
||||||
});
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'share':
|
case 'share':
|
||||||
|
@ -176,20 +269,30 @@ define(['apphost', 'globalize', 'connectionManager', 'itemHelper', 'embyRouter']
|
||||||
serverId: serverId,
|
serverId: serverId,
|
||||||
itemId: itemId
|
itemId: itemId
|
||||||
|
|
||||||
}).then(reject);
|
}).then(getResolveFunction(resolve, id));
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'album':
|
case 'album':
|
||||||
{
|
{
|
||||||
embyRouter.showItem(item.AlbumId, item.ServerId);
|
embyRouter.showItem(item.AlbumId, item.ServerId);
|
||||||
reject();
|
getResolveFunction(resolve, id)();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'artist':
|
case 'artist':
|
||||||
{
|
{
|
||||||
embyRouter.showItem(item.ArtistItems[0].Id, item.ServerId);
|
embyRouter.showItem(item.ArtistItems[0].Id, item.ServerId);
|
||||||
reject();
|
getResolveFunction(resolve, id)();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'playallfromhere':
|
||||||
|
{
|
||||||
|
getResolveFunction(resolve, id)();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 'queueallfromhere':
|
||||||
|
{
|
||||||
|
getResolveFunction(resolve, id)();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -179,6 +179,10 @@ div.listItem {
|
||||||
|
|
||||||
@supports (display: flex) {
|
@supports (display: flex) {
|
||||||
|
|
||||||
|
.listItem > * {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
.listItem, .listItemBody, .listItemMediaInfo {
|
.listItem, .listItemBody, .listItemMediaInfo {
|
||||||
display: flex;
|
display: flex;
|
||||||
}
|
}
|
||||||
|
|
|
@ -121,6 +121,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
|
||||||
|
|
||||||
var clickEntireItem = layoutManager.tv ? true : false;
|
var clickEntireItem = layoutManager.tv ? true : false;
|
||||||
var outerTagName = clickEntireItem ? 'button' : 'div';
|
var outerTagName = clickEntireItem ? 'button' : 'div';
|
||||||
|
var enableSideMediaInfo = options.enableSideMediaInfo != null ? options.enableSideMediaInfo : clickEntireItem;
|
||||||
|
|
||||||
var outerHtml = '';
|
var outerHtml = '';
|
||||||
|
|
||||||
|
@ -234,7 +235,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
|
||||||
}
|
}
|
||||||
|
|
||||||
var lineCount = textlines.length;
|
var lineCount = textlines.length;
|
||||||
if (!options.enableSideMediaInfo) {
|
if (!enableSideMediaInfo) {
|
||||||
lineCount++;
|
lineCount++;
|
||||||
}
|
}
|
||||||
if (enableOverview && item.Overview) {
|
if (enableOverview && item.Overview) {
|
||||||
|
@ -268,7 +269,7 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!options.enableSideMediaInfo) {
|
if (!enableSideMediaInfo) {
|
||||||
html += '<div class="secondary listItemMediaInfo">' + mediaInfo.getPrimaryMediaInfoHtml(item) + '</div>';
|
html += '<div class="secondary listItemMediaInfo">' + mediaInfo.getPrimaryMediaInfoHtml(item) + '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -280,6 +281,10 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
|
||||||
|
|
||||||
html += '</div>';
|
html += '</div>';
|
||||||
|
|
||||||
|
if (enableSideMediaInfo) {
|
||||||
|
html += '<div class="secondary listItemMediaInfo">' + mediaInfo.getPrimaryMediaInfoHtml(item) + '</div>';
|
||||||
|
}
|
||||||
|
|
||||||
if (!clickEntireItem) {
|
if (!clickEntireItem) {
|
||||||
html += '<button is="paper-icon-button-light" class="menuButton autoSize"><i class="md-icon"></i></button>';
|
html += '<button is="paper-icon-button-light" class="menuButton autoSize"><i class="md-icon"></i></button>';
|
||||||
html += '<span class="listViewUserDataButtons">';
|
html += '<span class="listViewUserDataButtons">';
|
||||||
|
@ -287,10 +292,6 @@ define(['itemHelper', 'mediaInfo', 'indicators', 'connectionManager', 'layoutMan
|
||||||
html += '</span>';
|
html += '</span>';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.enableSideMediaInfo) {
|
|
||||||
html += '<div class="secondary listItemMediaInfo">' + mediaInfo.getPrimaryMediaInfoHtml(item) + '</div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '</' + outerTagName + '>';
|
html += '</' + outerTagName + '>';
|
||||||
|
|
||||||
index++;
|
index++;
|
||||||
|
|
|
@ -100,6 +100,12 @@
|
||||||
"Played": "Played",
|
"Played": "Played",
|
||||||
"RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.",
|
"RefreshDialogHelp": "Metadata is refreshed based on settings and internet services that are enabled in the Emby Server dashboard.",
|
||||||
"Open": "Open",
|
"Open": "Open",
|
||||||
|
"Play": "Play",
|
||||||
|
"Queue": "Queue",
|
||||||
|
"Shuffle": "Shuffle",
|
||||||
|
"InstantMix": "Instant Mix",
|
||||||
"ViewAlbum": "View Album",
|
"ViewAlbum": "View Album",
|
||||||
"ViewArtist": "View Artist"
|
"ViewArtist": "View Artist",
|
||||||
|
"QueueAllFromHere": "Queue All from Here",
|
||||||
|
"PlayAllFromHere": "Play All from Here"
|
||||||
}
|
}
|
|
@ -2029,6 +2029,9 @@ var AppInfo = {};
|
||||||
},
|
},
|
||||||
currentPlaylistIndex: function (options) {
|
currentPlaylistIndex: function (options) {
|
||||||
return MediaController.currentPlaylistIndex(options);
|
return MediaController.currentPlaylistIndex(options);
|
||||||
|
},
|
||||||
|
canQueueMediaType: function(mediaType) {
|
||||||
|
return MediaController.canQueueMediaType(mediaType);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue