mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
updated nuget
This commit is contained in:
parent
6c97b11f21
commit
f470541e59
20 changed files with 254 additions and 61 deletions
|
@ -73,7 +73,7 @@
|
|||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtDashboardSourcePath">${LabelDashboardSourcePath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtDashboardSourcePath" />
|
||||
</div>
|
||||
<button id="btnSelectDashboardSourcePath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
</li>
|
||||
<li>
|
||||
<label for="txtWatchFolder">${LabelWatchFolder}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtWatchFolder" name="txtWatchFolder" />
|
||||
</div>
|
||||
<button id="btnSelectWatchFolder" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -41,7 +41,7 @@
|
|||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtCachePath">${LabelChannelDownloadPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtCachePath" name="txtCachePath" />
|
||||
</div>
|
||||
<button id="btnSelectCachePath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
</li>
|
||||
<li>
|
||||
<label for="txtCustomIntrosPath">${LabelCustomIntrosPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtCustomIntrosPath" />
|
||||
</div>
|
||||
<button id="btnSelectCustomIntrosPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtCachePath">${LabelCachePath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtCachePath" name="txtCachePath" />
|
||||
</div>
|
||||
<button id="btnSelectCachePath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
</li>
|
||||
<li>
|
||||
<label for="txtCertificatePath">${LabelCustomCertificatePath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtCertificatePath" />
|
||||
</div>
|
||||
<button id="btnSelectCertPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
</li>
|
||||
<li id="fldCameraUploadPath" style="display:none;">
|
||||
<label for="txtUploadPath">${LabelCameraUploadPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtUploadPath" />
|
||||
</div>
|
||||
<button id="btnSelectUploadPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -32,7 +32,7 @@
|
|||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtUploadPath">${LabelCameraUploadPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtUploadPath" />
|
||||
</div>
|
||||
<button id="btnSelectUploadPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
</li>
|
||||
<li>
|
||||
<label for="txtTranscodingTempPath">${LabelTranscodingTempPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtTranscodingTempPath" />
|
||||
</div>
|
||||
<button id="btnSelectTranscodingTempPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<ul data-role="listview" class="ulForm">
|
||||
<li class="fldImagesByName" style="display:none;">
|
||||
<label for="txtItemsByNamePath">${LabelImagesByNamePath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtItemsByNamePath" name="txtItemsByNamePath" />
|
||||
</div>
|
||||
<button id="btnSelectIBNPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtMetadataPath">${LabelMetadataPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtMetadataPath" />
|
||||
</div>
|
||||
<button id="btnSelectMetadataPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -215,7 +215,7 @@
|
|||
<br />
|
||||
<div>
|
||||
<label for="txtSyncPath">${LabelSyncPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtSyncPath" readonly />
|
||||
</div>
|
||||
<button class="btnSelectSyncPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true"></button>
|
||||
|
|
|
@ -261,6 +261,12 @@
|
|||
}
|
||||
}
|
||||
|
||||
window.HtmlMediaRenderer = htmlMediaRenderer;
|
||||
if (!window.AudioRenderer) {
|
||||
window.AudioRenderer = htmlMediaRenderer;
|
||||
}
|
||||
|
||||
if (!window.VideoRenderer) {
|
||||
window.VideoRenderer = htmlMediaRenderer;
|
||||
}
|
||||
|
||||
})();
|
|
@ -33,10 +33,11 @@
|
|||
|
||||
html += '<button onclick="VoiceInputManager.startListening();" type="button" data-role="none" class="headerButton headerButtonRight headerVoiceButton" style="display:none;"><i class="material-icons">mic</i></button>';
|
||||
|
||||
//if (AppInfo.isNativeApp && $.browser.android)
|
||||
//{
|
||||
// html += '<button class="headerButtonViewMenu headerButton headerButtonRight" type="button" data-role="none"><i class="material-icons">more_vert</i></button>';
|
||||
//}
|
||||
if (!showUserAtTop()) {
|
||||
html += '<button class="headerButton headerButtonRight headerUserButton" type="button" data-role="none" onclick="Dashboard.showUserFlyout(this);">';
|
||||
html += '<div class="fa fa-user"></div>';
|
||||
html += '</button>';
|
||||
}
|
||||
|
||||
if (!$.browser.mobile && !AppInfo.isNativeApp) {
|
||||
html += '<a href="dashboard.html" class="headerButton headerButtonRight dashboardEntryHeaderButton" style="display:none;"><i class="material-icons">settings</i></a>';
|
||||
|
@ -91,6 +92,26 @@
|
|||
} else {
|
||||
$('.dashboardEntryHeaderButton', header).hide();
|
||||
}
|
||||
|
||||
var userButtonHtml = '';
|
||||
if (user.name) {
|
||||
|
||||
if (user.imageUrl && AppInfo.enableUserImage) {
|
||||
|
||||
var userButtonHeight = 26;
|
||||
|
||||
var url = user.imageUrl;
|
||||
|
||||
if (user.supportsImageParams) {
|
||||
url += "&height=" + (userButtonHeight * Math.max(devicePixelRatio || 1, 2));
|
||||
}
|
||||
|
||||
userButtonHtml += '<div class="lazy headerUserImage" data-src="' + url + '" style="width:' + userButtonHeight + 'px;height:' + userButtonHeight + 'px;"></div>';
|
||||
} else {
|
||||
userButtonHtml += '<div class="fa fa-user"></div>';
|
||||
}
|
||||
$('.headerUserButton', header).html(userButtonHtml).lazyChildren();
|
||||
}
|
||||
}
|
||||
|
||||
function bindMenuEvents() {
|
||||
|
@ -129,23 +150,6 @@
|
|||
}
|
||||
}
|
||||
|
||||
//function onViewButtonClick() {
|
||||
|
||||
// var html = '<div class="appViewMenuPanel" data-role="panel" data-position="right" data-display="overlay" data-position-fixed="true" data-theme="a">';
|
||||
|
||||
|
||||
// html += '</div>';
|
||||
|
||||
// $(document.body).append(html);
|
||||
|
||||
// var elem = $('.appViewMenuPanel').panel({}).trigger('create').panel("open").on("panelclose", function () {
|
||||
|
||||
// $(this).off("panelclose").remove();
|
||||
// });
|
||||
|
||||
|
||||
//}
|
||||
|
||||
function initViewMenuBarHeadroom() {
|
||||
|
||||
// grab an element
|
||||
|
@ -203,7 +207,10 @@
|
|||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="selectserver" href="selectserver.html"><span class="fa fa-globe sidebarLinkIcon"></span>' + Globalize.translate('ButtonSelectServer') + '</a>';
|
||||
}
|
||||
|
||||
if (showUserAtTop()) {
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="logout" href="#" onclick="Dashboard.logout();"><span class="fa fa-lock sidebarLinkIcon"></span>' + Globalize.translate('ButtonSignOut') + '</a>';
|
||||
}
|
||||
|
||||
html += '</div>';
|
||||
|
||||
|
||||
|
@ -407,22 +414,6 @@
|
|||
html += '<div class="lazy" data-src="css/images/mblogoicon.png" style="width:' + 28 + 'px;height:' + 28 + 'px;background-size:contain;background-repeat:no-repeat;background-position:center center;border-radius:1000px;vertical-align:middle;margin:0 1.4em 0 1.3em;display:inline-block;"></div>';
|
||||
html += Globalize.translate('ButtonHome');
|
||||
html += '</a>';
|
||||
|
||||
html += '<a class="sidebarLink lnkMediaFolder" href="' + userHref + '">';
|
||||
if (hasUserImage) {
|
||||
var imgWidth = 20;
|
||||
var url = user.imageUrl;
|
||||
|
||||
if (user.supportsImageParams) {
|
||||
url += "&width=" + (imgWidth * Math.max(devicePixelRatio || 1, 2));
|
||||
}
|
||||
|
||||
html += '<div class="lazy" data-src="' + url + '" style="width:' + imgWidth + 'px;height:' + imgWidth + 'px;background-size:contain;background-repeat:no-repeat;background-position:center center;border-radius:1000px;vertical-align:middle;margin:0 1.6em 0 1.6em;display:inline-block;"></div>';
|
||||
} else {
|
||||
html += '<span class="fa fa-user sidebarLinkIcon"></span>';
|
||||
}
|
||||
html += Globalize.translate('ButtonPreferences');
|
||||
html += '</a>';
|
||||
}
|
||||
|
||||
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="nowplaying.html"><span class="fa fa-tablet sidebarLinkIcon"></span>' + Globalize.translate('ButtonRemote') + '</a>';
|
||||
|
|
|
@ -1050,7 +1050,7 @@
|
|||
|
||||
self.playVideo = function (item, mediaSource, startPosition) {
|
||||
|
||||
requirejs(['scripts/htmlmediarenderer'], function () {
|
||||
requirejs(['videorenderer'], function () {
|
||||
|
||||
var streamInfo = self.createStreamInfo('Video', item, mediaSource, startPosition);
|
||||
|
||||
|
@ -1191,7 +1191,7 @@
|
|||
videoControls.removeClass('hide');
|
||||
}
|
||||
|
||||
var mediaRenderer = new HtmlMediaRenderer('video');
|
||||
var mediaRenderer = new VideoRenderer('video');
|
||||
|
||||
initialVolume = self.getSavedVolume();
|
||||
|
||||
|
|
|
@ -760,7 +760,7 @@
|
|||
contentType = 'video/' + mediaSource.Container;
|
||||
|
||||
if (mediaSource.enableDirectPlay) {
|
||||
mediaUrl = FileSystem.translateFilePath(mediaSource.Path);
|
||||
mediaUrl = FileSystemBridge.translateFilePath(mediaSource.Path);
|
||||
playMethod = 'DirectPlay';
|
||||
|
||||
} else {
|
||||
|
@ -797,7 +797,7 @@
|
|||
|
||||
if (mediaSource.enableDirectPlay) {
|
||||
|
||||
mediaUrl = FileSystem.translateFilePath(mediaSource.Path);
|
||||
mediaUrl = FileSystemBridge.translateFilePath(mediaSource.Path);
|
||||
playMethod = 'DirectPlay';
|
||||
|
||||
} else {
|
||||
|
@ -1628,7 +1628,7 @@
|
|||
|
||||
function getAudioRenderer() {
|
||||
|
||||
return new HtmlMediaRenderer('audio');
|
||||
return new AudioRenderer('audio');
|
||||
}
|
||||
|
||||
function onTimeUpdate() {
|
||||
|
@ -1639,7 +1639,7 @@
|
|||
|
||||
function playAudio(item, mediaSource, startPositionTicks) {
|
||||
|
||||
requirejs(['scripts/htmlmediarenderer'], function () {
|
||||
requirejs(['audiorenderer'], function () {
|
||||
playAudioInternal(item, mediaSource, startPositionTicks);
|
||||
});
|
||||
}
|
||||
|
|
|
@ -636,6 +636,62 @@ var Dashboard = {
|
|||
}, 500);
|
||||
},
|
||||
|
||||
showUserFlyout: function () {
|
||||
|
||||
var html = '<div data-role="panel" data-position="right" data-display="overlay" id="userFlyout" data-position-fixed="true" data-theme="a">';
|
||||
|
||||
html += '<h3 class="userHeader">';
|
||||
|
||||
html += '</h3>';
|
||||
|
||||
html += '<form>';
|
||||
|
||||
html += '<p class="preferencesContainer"></p>';
|
||||
|
||||
html += '<p><button data-mini="true" type="button" onclick="Dashboard.logout();" data-icon="lock">' + Globalize.translate('ButtonSignOut') + '</button></p>';
|
||||
|
||||
html += '</form>';
|
||||
html += '</div>';
|
||||
|
||||
$(document.body).append(html);
|
||||
|
||||
var elem = $('#userFlyout').panel({}).lazyChildren().trigger('create').panel("open").on("panelclose", function () {
|
||||
|
||||
$(this).off("panelclose").remove();
|
||||
});
|
||||
|
||||
ConnectionManager.user(window.ApiClient).done(function (user) {
|
||||
Dashboard.updateUserFlyout(elem, user);
|
||||
});
|
||||
},
|
||||
|
||||
updateUserFlyout: function (elem, user) {
|
||||
|
||||
var html = '';
|
||||
var imgWidth = 48;
|
||||
|
||||
if (user.imageUrl && AppInfo.enableUserImage) {
|
||||
var url = user.imageUrl;
|
||||
|
||||
if (user.supportsImageParams) {
|
||||
url += "&width=" + (imgWidth * Math.max(window.devicePixelRatio || 1, 2));
|
||||
}
|
||||
|
||||
html += '<div class="lazy" data-src="' + url + '" style="width:' + imgWidth + 'px;height:' + imgWidth + 'px;background-size:contain;background-repeat:no-repeat;background-position:center center;border-radius:1000px;vertical-align:middle;margin-right:.8em;display:inline-block;"></div>';
|
||||
}
|
||||
html += user.name;
|
||||
|
||||
$('.userHeader', elem).html(html).lazyChildren();
|
||||
|
||||
html = '';
|
||||
|
||||
if (user.localUser && user.localUser.Policy.EnableUserPreferenceAccess) {
|
||||
html += '<p><a data-mini="true" data-role="button" href="mypreferencesdisplay.html?userId=' + user.localUser.Id + '" data-icon="gear">' + Globalize.translate('ButtonSettings') + '</button></a>';
|
||||
}
|
||||
|
||||
$('.preferencesContainer', elem).html(html).trigger('create');
|
||||
},
|
||||
|
||||
getPluginSecurityInfo: function () {
|
||||
|
||||
var apiClient = ApiClient;
|
||||
|
@ -1334,7 +1390,10 @@ var Dashboard = {
|
|||
PlayableMediaTypes: ['Audio', 'Video'],
|
||||
|
||||
SupportedCommands: Dashboard.getSupportedRemoteCommands(),
|
||||
SupportsPersistentIdentifier: AppInfo.isNativeApp === true,
|
||||
|
||||
// Need to use this rather than AppInfo.isNativeApp because the property isn't set yet at the time we call this
|
||||
SupportsPersistentIdentifier: Dashboard.isRunningInCordova(),
|
||||
|
||||
SupportsMediaControl: true,
|
||||
SupportedLiveMediaTypes: ['Audio', 'Video']
|
||||
};
|
||||
|
@ -1898,6 +1957,16 @@ var AppInfo = {};
|
|||
define("nativedirectorychooser", ["thirdparty/cordova/android/nativedirectorychooser"]);
|
||||
}
|
||||
|
||||
if (Dashboard.isRunningInCordova() && $.browser.android) {
|
||||
//define("audiorenderer", ["thirdparty/cordova/android/vlcplayer"]);
|
||||
define("audiorenderer", ["scripts/htmlmediarenderer"]);
|
||||
define("videorenderer", ["scripts/htmlmediarenderer"]);
|
||||
}
|
||||
else {
|
||||
define("audiorenderer", ["scripts/htmlmediarenderer"]);
|
||||
define("videorenderer", ["scripts/htmlmediarenderer"]);
|
||||
}
|
||||
|
||||
define("connectservice", ["thirdparty/apiclient/connectservice"]);
|
||||
|
||||
//requirejs(['http://viblast.com/player/free-version/qy2fdwajo1/viblast.js']);
|
||||
|
@ -1911,7 +1980,7 @@ var AppInfo = {};
|
|||
require(['appstorage'], function () {
|
||||
|
||||
capabilities.DeviceProfile = MediaPlayer.getDeviceProfile(Math.max(screen.height, screen.width));
|
||||
createConnectionManager(capabilities).done(function() {
|
||||
createConnectionManager(capabilities).done(function () {
|
||||
$(function () {
|
||||
onDocumentReady();
|
||||
Dashboard.initPromiseDone = true;
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
<ul data-role="listview" class="ulForm">
|
||||
<li>
|
||||
<label for="txtSyncTempPath">${LabelSyncTempPath}</label>
|
||||
<div style="display: inline-block; width: 92%;">
|
||||
<div style="display: inline-block; width: 85%;">
|
||||
<input type="text" id="txtSyncTempPath" />
|
||||
</div>
|
||||
<button id="btnSelectSyncTempPath" type="button" data-icon="search" data-iconpos="notext" data-inline="true">${ButtonSelectDirectory}</button>
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
var canSeek = playState.CanSeek || false;
|
||||
|
||||
var url = '';
|
||||
var imgHeight = 200;
|
||||
var imgHeight = 400;
|
||||
|
||||
var nowPlayingItem = state.NowPlayingItem;
|
||||
|
||||
|
|
127
dashboard-ui/thirdparty/cordova/android/vlcplayer.js
vendored
Normal file
127
dashboard-ui/thirdparty/cordova/android/vlcplayer.js
vendored
Normal file
|
@ -0,0 +1,127 @@
|
|||
(function () {
|
||||
|
||||
function vlcRenderer(type) {
|
||||
|
||||
var self = this;
|
||||
|
||||
function onEnded() {
|
||||
$(self).trigger('ended');
|
||||
}
|
||||
|
||||
function onTimeUpdate() {
|
||||
$(self).trigger('timeupdate');
|
||||
}
|
||||
|
||||
function onVolumeChange() {
|
||||
$(self).trigger('volumechange');
|
||||
}
|
||||
|
||||
function onPlaying() {
|
||||
$(self).trigger('playing');
|
||||
}
|
||||
|
||||
function onPlay() {
|
||||
$(self).trigger('play');
|
||||
}
|
||||
|
||||
function onPause() {
|
||||
$(self).trigger('pause');
|
||||
}
|
||||
|
||||
function onClick() {
|
||||
$(self).trigger('click');
|
||||
}
|
||||
|
||||
function onDblClick() {
|
||||
$(self).trigger('dblclick');
|
||||
}
|
||||
|
||||
function onError() {
|
||||
|
||||
var errorCode = this.error ? this.error.code : '';
|
||||
console.log('Media element error code: ' + errorCode);
|
||||
|
||||
$(self).trigger('error');
|
||||
}
|
||||
|
||||
var playerState = {};
|
||||
|
||||
self.currentTime = function (val) {
|
||||
|
||||
if (val != null) {
|
||||
AndroidVlcPlayer.setPosition(val);
|
||||
return;
|
||||
}
|
||||
|
||||
return playerState.currentTime;
|
||||
};
|
||||
|
||||
self.duration = function (val) {
|
||||
|
||||
if (playerState) {
|
||||
return playerState.duration;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
self.pause = function () {
|
||||
AndroidVlcPlayer.pause();
|
||||
};
|
||||
|
||||
self.unpause = function () {
|
||||
AndroidVlcPlayer.unpause();
|
||||
};
|
||||
|
||||
self.volume = function (val) {
|
||||
if (playerState) {
|
||||
if (val != null) {
|
||||
AndroidVlcPlayer.setVolume(val);
|
||||
return;
|
||||
}
|
||||
|
||||
return playerState.volume;
|
||||
}
|
||||
};
|
||||
|
||||
self.setCurrentSrc = function (val) {
|
||||
|
||||
if (!val) {
|
||||
self.destroy();
|
||||
}
|
||||
|
||||
if (type == 'audio') {
|
||||
AndroidVlcPlayer.playAudioVlc(val);
|
||||
} else {
|
||||
AndroidVlcPlayer.playVideoVlc(val);
|
||||
}
|
||||
};
|
||||
|
||||
self.currentSrc = function () {
|
||||
if (playerState) {
|
||||
return playerState.currentSrc;
|
||||
}
|
||||
};
|
||||
|
||||
self.paused = function () {
|
||||
|
||||
if (playerState) {
|
||||
return playerState.paused;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
self.destroy = function () {
|
||||
|
||||
AndroidVlcPlayer.destroy();
|
||||
playerState = {};
|
||||
};
|
||||
|
||||
self.setPoster = function (url) {
|
||||
};
|
||||
}
|
||||
|
||||
window.AudioRenderer = vlcRenderer;
|
||||
|
||||
})();
|
Loading…
Add table
Add a link
Reference in a new issue