mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
rework playlist ui
This commit is contained in:
parent
81cfd99137
commit
59466a8ff3
4 changed files with 120 additions and 130 deletions
|
@ -128,10 +128,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="tabPlaylist tabContent" style="display: none;">
|
<div class="tabPlaylist tabContent" style="display: none;">
|
||||||
|
|
||||||
<div class="readOnlyContent" style="margin: 0 auto; padding: 0 1em;">
|
<div class="playlist itemsContainer" style="max-width:800px;margin: 0 auto;">
|
||||||
|
|
||||||
<div class="playlist detailTableContainer">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -887,6 +887,14 @@
|
||||||
|
|
||||||
itemsContainer.trigger('playallfromhere', [index]);
|
itemsContainer.trigger('playallfromhere', [index]);
|
||||||
}
|
}
|
||||||
|
else if (action == 'setplaylistindex') {
|
||||||
|
|
||||||
|
index = elemWithAttributes.getAttribute('data-index');
|
||||||
|
|
||||||
|
closeContextMenu();
|
||||||
|
|
||||||
|
MediaController.currentPlaylistIndex(index);
|
||||||
|
}
|
||||||
else if (action == 'photoslideshow') {
|
else if (action == 'photoslideshow') {
|
||||||
|
|
||||||
if (!$(elem).hasClass('card')) {
|
if (!$(elem).hasClass('card')) {
|
||||||
|
|
|
@ -629,57 +629,36 @@
|
||||||
|
|
||||||
var html = '';
|
var html = '';
|
||||||
|
|
||||||
html += '<table class="detailTable">';
|
//ApiClient.getItems(Dashboard.getCurrentUserId(), {
|
||||||
|
|
||||||
html += '<thead><tr>';
|
// SortBy: "SortName",
|
||||||
html += '<th></th>';
|
// SortOrder: "Ascending",
|
||||||
html += '<th>' + Globalize.translate('HeaderName') + '</th>';
|
// IncludeItemTypes: "Audio",
|
||||||
html += '<th>' + Globalize.translate('HeaderAlbum') + '</th>';
|
// Recursive: true,
|
||||||
html += '<th>' + Globalize.translate('HeaderArtist') + '</th>';
|
// Fields: "PrimaryImageAspectRatio,SortName,MediaSourceCount,IsUnidentified,SyncInfo",
|
||||||
html += '<th>' + Globalize.translate('HeaderAlbumArtist') + '</th>';
|
// StartIndex: 0,
|
||||||
html += '<th>' + Globalize.translate('HeaderTime') + '</th>';
|
// ImageTypeLimit: 1,
|
||||||
html += '</tr></thead>';
|
// EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
|
||||||
|
// Limit: 100
|
||||||
|
|
||||||
html += '<tbody>';
|
//}).done(function (result) {
|
||||||
|
|
||||||
$.each(MediaController.playlist(), function (i, item) {
|
// html += LibraryBrowser.getListViewHtml({
|
||||||
|
// items: result.Items,
|
||||||
|
// smallIcon: true,
|
||||||
|
// defaultAction: 'setplaylistindex'
|
||||||
|
// });
|
||||||
|
|
||||||
var name = LibraryBrowser.getPosterViewDisplayName(item);
|
// $(".playlist", page).html(html).trigger('create').lazyChildren();
|
||||||
|
//});
|
||||||
|
|
||||||
var parentName = item.SeriesName || item.Album;
|
html += LibraryBrowser.getListViewHtml({
|
||||||
|
items: MediaController.playlist(),
|
||||||
html += '<tr>';
|
smallIcon: true,
|
||||||
html += '<td><button type="button" data-index="' + i + '" class="lnkPlayFromIndex" data-icon="play" data-iconpos="notext">' + Globalize.translate('ButtonPlay') + '</button></td>';
|
defaultAction: 'play'
|
||||||
html += '<td>';
|
|
||||||
html += '<a href="itemdetails.html?id=' + item.Id + '">' + name + '</a>';
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td>';
|
|
||||||
if (parentName) {
|
|
||||||
var parentId = item.AlbumId || item.SeriesId || item.ParentId;
|
|
||||||
html += '<a href="itemdetails.html?id=' + parentId + '">' + parentName + '</a>';
|
|
||||||
}
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td>';
|
|
||||||
html += LibraryBrowser.getArtistLinksHtml(item.ArtistItems || []);
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td>';
|
|
||||||
if (item.AlbumArtist) {
|
|
||||||
html += LibraryBrowser.getArtistLinksHtml(item.AlbumArtists || []);
|
|
||||||
}
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td>' + Dashboard.getDisplayTime(item.RunTimeTicks) + '</td>';
|
|
||||||
html += '<td><button type="button" data-index="' + i + '" class="lnkRemoveFromIndex" data-icon="delete" data-iconpos="notext">' + Globalize.translate('ButtonRemove') + '</button></td>';
|
|
||||||
html += '</tr>';
|
|
||||||
});
|
});
|
||||||
|
|
||||||
html += '</tbody>';
|
$(".playlist", page).html(html).trigger('create').lazyChildren();
|
||||||
html += '</table>';
|
|
||||||
|
|
||||||
$(".playlist", page).html(html).trigger('create');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).on('pageinit', "#nowPlayingPage", function () {
|
$(document).on('pageinit', "#nowPlayingPage", function () {
|
||||||
|
|
|
@ -1412,121 +1412,127 @@ var Dashboard = {
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
$(function () {
|
(function() {
|
||||||
|
|
||||||
var videoPlayerHtml = '<div id="mediaPlayer" data-theme="b" class="ui-bar-b" style="display: none;">';
|
function onReady() {
|
||||||
|
|
||||||
videoPlayerHtml += '<div class="videoBackdrop">';
|
var videoPlayerHtml = '<div id="mediaPlayer" data-theme="b" class="ui-bar-b" style="display: none;">';
|
||||||
videoPlayerHtml += '<div id="videoPlayer">';
|
|
||||||
|
|
||||||
videoPlayerHtml += '<div id="videoElement">';
|
videoPlayerHtml += '<div class="videoBackdrop">';
|
||||||
videoPlayerHtml += '<div id="play" class="status"></div>';
|
videoPlayerHtml += '<div id="videoPlayer">';
|
||||||
videoPlayerHtml += '<div id="pause" class="status"></div>';
|
|
||||||
videoPlayerHtml += '</div>';
|
|
||||||
|
|
||||||
videoPlayerHtml += '<div class="videoTopControls hiddenOnIdle">';
|
videoPlayerHtml += '<div id="videoElement">';
|
||||||
videoPlayerHtml += '<div class="videoTopControlsLogo"></div>';
|
videoPlayerHtml += '<div id="play" class="status"></div>';
|
||||||
videoPlayerHtml += '<div class="videoAdvancedControls">';
|
videoPlayerHtml += '<div id="pause" class="status"></div>';
|
||||||
|
videoPlayerHtml += '</div>';
|
||||||
|
|
||||||
videoPlayerHtml += '<button class="mediaButton videoTrackControl previousTrackButton" title="Previous video" type="button" onclick="MediaPlayer.previousTrack();" data-icon="previous-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPreviousTrack') + '</button>';
|
videoPlayerHtml += '<div class="videoTopControls hiddenOnIdle">';
|
||||||
videoPlayerHtml += '<button class="mediaButton videoTrackControl nextTrackButton" title="Next video" type="button" onclick="MediaPlayer.nextTrack();" data-icon="next-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonNextTrack') + '</button>';
|
videoPlayerHtml += '<div class="videoTopControlsLogo"></div>';
|
||||||
|
videoPlayerHtml += '<div class="videoAdvancedControls">';
|
||||||
|
|
||||||
videoPlayerHtml += '<button class="mediaButton videoAudioButton" title="Audio tracks" type="button" data-icon="audiocd" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonAudioTracks') + '</button>';
|
videoPlayerHtml += '<button class="mediaButton videoTrackControl previousTrackButton" title="Previous video" type="button" onclick="MediaPlayer.previousTrack();" data-icon="previous-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPreviousTrack') + '</button>';
|
||||||
videoPlayerHtml += '<div data-role="popup" class="videoAudioPopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
videoPlayerHtml += '<button class="mediaButton videoTrackControl nextTrackButton" title="Next video" type="button" onclick="MediaPlayer.nextTrack();" data-icon="next-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonNextTrack') + '</button>';
|
||||||
|
|
||||||
videoPlayerHtml += '<button class="mediaButton videoSubtitleButton" title="Subtitles" type="button" data-icon="subtitles" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonFullscreen') + '</button>';
|
videoPlayerHtml += '<button class="mediaButton videoAudioButton" title="Audio tracks" type="button" data-icon="audiocd" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonAudioTracks') + '</button>';
|
||||||
videoPlayerHtml += '<div data-role="popup" class="videoSubtitlePopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
videoPlayerHtml += '<div data-role="popup" class="videoAudioPopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
||||||
|
|
||||||
videoPlayerHtml += '<button class="mediaButton videoChaptersButton" title="Scenes" type="button" data-icon="video" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonScenes') + '</button>';
|
videoPlayerHtml += '<button class="mediaButton videoSubtitleButton" title="Subtitles" type="button" data-icon="subtitles" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonFullscreen') + '</button>';
|
||||||
videoPlayerHtml += '<div data-role="popup" class="videoChaptersPopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
videoPlayerHtml += '<div data-role="popup" class="videoSubtitlePopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
||||||
|
|
||||||
videoPlayerHtml += '<button class="mediaButton videoQualityButton" title="Quality" type="button" data-icon="gear" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonQuality') + '</button>';
|
videoPlayerHtml += '<button class="mediaButton videoChaptersButton" title="Scenes" type="button" data-icon="video" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonScenes') + '</button>';
|
||||||
videoPlayerHtml += '<div data-role="popup" class="videoQualityPopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
videoPlayerHtml += '<div data-role="popup" class="videoChaptersPopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
||||||
|
|
||||||
videoPlayerHtml += '<button class="mediaButton" title="Stop" type="button" onclick="MediaPlayer.stop();" data-icon="delete" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonStop') + '</button>';
|
videoPlayerHtml += '<button class="mediaButton videoQualityButton" title="Quality" type="button" data-icon="gear" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonQuality') + '</button>';
|
||||||
|
videoPlayerHtml += '<div data-role="popup" class="videoQualityPopup videoPlayerPopup" data-history="false" data-theme="b"></div>';
|
||||||
|
|
||||||
videoPlayerHtml += '</div>'; // videoAdvancedControls
|
videoPlayerHtml += '<button class="mediaButton" title="Stop" type="button" onclick="MediaPlayer.stop();" data-icon="delete" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonStop') + '</button>';
|
||||||
videoPlayerHtml += '</div>'; // videoTopControls
|
|
||||||
|
|
||||||
// Create controls
|
videoPlayerHtml += '</div>'; // videoAdvancedControls
|
||||||
videoPlayerHtml += '<div class="videoControls hiddenOnIdle">';
|
videoPlayerHtml += '</div>'; // videoTopControls
|
||||||
|
|
||||||
videoPlayerHtml += '<button id="video-previousTrackButton" class="mediaButton previousTrackButton videoTrackControl" title="Previous Track" type="button" onclick="MediaPlayer.previousTrack();" data-icon="previous-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPreviousTrack') + '</button>';
|
// Create controls
|
||||||
videoPlayerHtml += '<button id="video-playButton" class="mediaButton" title="Play" type="button" onclick="MediaPlayer.unpause();" data-icon="play" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPlay') + '</button>';
|
videoPlayerHtml += '<div class="videoControls hiddenOnIdle">';
|
||||||
videoPlayerHtml += '<button id="video-pauseButton" class="mediaButton" title="Pause" type="button" onclick="MediaPlayer.pause();" data-icon="pause" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPause') + '</button>';
|
|
||||||
videoPlayerHtml += '<button id="video-nextTrackButton" class="mediaButton nextTrackButton videoTrackControl" title="Next Track" type="button" onclick="MediaPlayer.nextTrack();" data-icon="next-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonNextTrack') + '</button>';
|
|
||||||
|
|
||||||
videoPlayerHtml += '<div class="positionSliderContainer sliderContainer">';
|
videoPlayerHtml += '<button id="video-previousTrackButton" class="mediaButton previousTrackButton videoTrackControl" title="Previous Track" type="button" onclick="MediaPlayer.previousTrack();" data-icon="previous-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPreviousTrack') + '</button>';
|
||||||
videoPlayerHtml += '<input type="range" class="mediaSlider positionSlider slider" step=".001" min="0" max="100" value="0" style="display:none;" data-mini="true" data-theme="a" data-highlight="true" />';
|
videoPlayerHtml += '<button id="video-playButton" class="mediaButton" title="Play" type="button" onclick="MediaPlayer.unpause();" data-icon="play" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPlay') + '</button>';
|
||||||
videoPlayerHtml += '</div>';
|
videoPlayerHtml += '<button id="video-pauseButton" class="mediaButton" title="Pause" type="button" onclick="MediaPlayer.pause();" data-icon="pause" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonPause') + '</button>';
|
||||||
|
videoPlayerHtml += '<button id="video-nextTrackButton" class="mediaButton nextTrackButton videoTrackControl" title="Next Track" type="button" onclick="MediaPlayer.nextTrack();" data-icon="next-track" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonNextTrack') + '</button>';
|
||||||
|
|
||||||
videoPlayerHtml += '<div class="currentTime">--:--</div>';
|
videoPlayerHtml += '<div class="positionSliderContainer sliderContainer">';
|
||||||
|
videoPlayerHtml += '<input type="range" class="mediaSlider positionSlider slider" step=".001" min="0" max="100" value="0" style="display:none;" data-mini="true" data-theme="a" data-highlight="true" />';
|
||||||
|
videoPlayerHtml += '</div>';
|
||||||
|
|
||||||
videoPlayerHtml += '<div class="nowPlayingInfo hiddenOnIdle">';
|
videoPlayerHtml += '<div class="currentTime">--:--</div>';
|
||||||
videoPlayerHtml += '<div class="nowPlayingImage"></div>';
|
|
||||||
videoPlayerHtml += '<div class="nowPlayingText"></div>';
|
|
||||||
videoPlayerHtml += '</div>'; // nowPlayingInfo
|
|
||||||
|
|
||||||
videoPlayerHtml += '<button id="video-muteButton" class="mediaButton muteButton" title="Mute" type="button" onclick="MediaPlayer.mute();" data-icon="audio" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonMute') + '</button>';
|
videoPlayerHtml += '<div class="nowPlayingInfo hiddenOnIdle">';
|
||||||
videoPlayerHtml += '<button id="video-unmuteButton" class="mediaButton unmuteButton" title="Unmute" type="button" onclick="MediaPlayer.unMute();" data-icon="volume-off" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonUnmute') + '</button>';
|
videoPlayerHtml += '<div class="nowPlayingImage"></div>';
|
||||||
|
videoPlayerHtml += '<div class="nowPlayingText"></div>';
|
||||||
|
videoPlayerHtml += '</div>'; // nowPlayingInfo
|
||||||
|
|
||||||
videoPlayerHtml += '<div class="volumeSliderContainer sliderContainer">';
|
videoPlayerHtml += '<button id="video-muteButton" class="mediaButton muteButton" title="Mute" type="button" onclick="MediaPlayer.mute();" data-icon="audio" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonMute') + '</button>';
|
||||||
videoPlayerHtml += '<input type="range" class="mediaSlider volumeSlider slider" step=".05" min="0" max="1" value="0" style="display:none;" data-mini="true" data-theme="a" data-highlight="true" />';
|
videoPlayerHtml += '<button id="video-unmuteButton" class="mediaButton unmuteButton" title="Unmute" type="button" onclick="MediaPlayer.unMute();" data-icon="volume-off" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonUnmute') + '</button>';
|
||||||
videoPlayerHtml += '</div>';
|
|
||||||
|
|
||||||
videoPlayerHtml += '<button onclick="MediaPlayer.toggleFullscreen();" id="video-fullscreenButton" class="mediaButton fullscreenButton" title="Fullscreen" type="button" data-icon="expand" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonFullscreen') + '</button>';
|
videoPlayerHtml += '<div class="volumeSliderContainer sliderContainer">';
|
||||||
|
videoPlayerHtml += '<input type="range" class="mediaSlider volumeSlider slider" step=".05" min="0" max="1" value="0" style="display:none;" data-mini="true" data-theme="a" data-highlight="true" />';
|
||||||
|
videoPlayerHtml += '</div>';
|
||||||
|
|
||||||
videoPlayerHtml += '</div>'; // videoControls
|
videoPlayerHtml += '<button onclick="MediaPlayer.toggleFullscreen();" id="video-fullscreenButton" class="mediaButton fullscreenButton" title="Fullscreen" type="button" data-icon="expand" data-iconpos="notext" data-inline="true">' + Globalize.translate('ButtonFullscreen') + '</button>';
|
||||||
|
|
||||||
videoPlayerHtml += '</div>'; // videoPlayer
|
videoPlayerHtml += '</div>'; // videoControls
|
||||||
videoPlayerHtml += '</div>'; // videoBackdrop
|
|
||||||
videoPlayerHtml += '</div>'; // mediaPlayer
|
|
||||||
|
|
||||||
$(document.body).append(videoPlayerHtml);
|
videoPlayerHtml += '</div>'; // videoPlayer
|
||||||
|
videoPlayerHtml += '</div>'; // videoBackdrop
|
||||||
|
videoPlayerHtml += '</div>'; // mediaPlayer
|
||||||
|
|
||||||
var mediaPlayerElem = $('#mediaPlayer', document.body);
|
$(document.body).append(videoPlayerHtml);
|
||||||
mediaPlayerElem.trigger('create');
|
|
||||||
|
|
||||||
var footerHtml = '<div id="footer" data-theme="b" class="ui-bar-b">';
|
var mediaPlayerElem = $('#mediaPlayer', document.body);
|
||||||
|
mediaPlayerElem.trigger('create');
|
||||||
|
|
||||||
footerHtml += '<div id="footerNotifications"></div>';
|
var footerHtml = '<div id="footer" data-theme="b" class="ui-bar-b">';
|
||||||
footerHtml += '</div>';
|
|
||||||
|
|
||||||
$(document.body).append(footerHtml);
|
footerHtml += '<div id="footerNotifications"></div>';
|
||||||
|
footerHtml += '</div>';
|
||||||
|
|
||||||
var footerElem = $('#footer', document.body);
|
$(document.body).append(footerHtml);
|
||||||
footerElem.trigger('create');
|
|
||||||
|
|
||||||
$(window).on("beforeunload", function () {
|
var footerElem = $('#footer', document.body);
|
||||||
|
footerElem.trigger('create');
|
||||||
|
|
||||||
var apiClient = ConnectionManager.currentApiClient();
|
$(window).on("beforeunload", function () {
|
||||||
|
|
||||||
// Close the connection gracefully when possible
|
var apiClient = ConnectionManager.currentApiClient();
|
||||||
if (apiClient && apiClient.isWebSocketOpen() && !MediaPlayer.isPlaying()) {
|
|
||||||
|
|
||||||
console.log('Sending close web socket command');
|
// Close the connection gracefully when possible
|
||||||
apiClient.closeWebSocket();
|
if (apiClient && apiClient.isWebSocketOpen() && !MediaPlayer.isPlaying()) {
|
||||||
|
|
||||||
|
console.log('Sending close web socket command');
|
||||||
|
apiClient.closeWebSocket();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('contextmenu', '.ui-popup-screen', function (e) {
|
||||||
|
|
||||||
|
$('.ui-popup').popup('close');
|
||||||
|
|
||||||
|
e.preventDefault();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
function isTouchDevice() {
|
||||||
|
return (('ontouchstart' in window)
|
||||||
|
|| (navigator.MaxTouchPoints > 0)
|
||||||
|
|| (navigator.msMaxTouchPoints > 0));
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
$(document).on('contextmenu', '.ui-popup-screen', function (e) {
|
if (isTouchDevice()) {
|
||||||
|
$(document.body).addClass('touch');
|
||||||
$('.ui-popup').popup('close');
|
}
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
|
|
||||||
function isTouchDevice() {
|
|
||||||
return (('ontouchstart' in window)
|
|
||||||
|| (navigator.MaxTouchPoints > 0)
|
|
||||||
|| (navigator.msMaxTouchPoints > 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isTouchDevice()) {
|
$(onReady);
|
||||||
$(document.body).addClass('touch');
|
|
||||||
}
|
})();
|
||||||
});
|
|
||||||
|
|
||||||
Dashboard.jQueryMobileInit();
|
Dashboard.jQueryMobileInit();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue