mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
update docs
This commit is contained in:
parent
5d1ff60f3d
commit
59d8a3a853
11 changed files with 78 additions and 214 deletions
|
@ -12,7 +12,6 @@
|
||||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||||
<a href="#" data-role="button" class="ui-btn-active">${TabGeneral}</a>
|
<a href="#" data-role="button" class="ui-btn-active">${TabGeneral}</a>
|
||||||
<a href="dashboardhosting.html" data-role="button">${TabHosting}</a>
|
<a href="dashboardhosting.html" data-role="button">${TabHosting}</a>
|
||||||
<a href="serversecurity.html" data-role="button">${TabSecurity}</a>
|
|
||||||
</div>
|
</div>
|
||||||
<form class="advancedConfigurationForm">
|
<form class="advancedConfigurationForm">
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.upload = function (file, name, url) {
|
self.upload = function (file, mimeType, name, url) {
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
|
|
@ -113,7 +113,10 @@
|
||||||
|
|
||||||
Logger.log('Uploading file to ' + url);
|
Logger.log('Uploading file to ' + url);
|
||||||
|
|
||||||
new MediaBrowser.FileUpload().upload(file, name, url).done(function () {
|
// TODO: Need to get this from cordova file api instead of trying to infer the content type from the path
|
||||||
|
var mimeType = file.toLowerCase().indexOf('mp4') != -1 || file.toLowerCase().indexOf('m4v') != -1 ? 'video/mp4' : (file.toLowerCase().indexOf('png') != -1 ? 'image/png' : 'image/jpg');
|
||||||
|
|
||||||
|
new MediaBrowser.FileUpload().upload(file, mimeType, name, url).done(function () {
|
||||||
|
|
||||||
Logger.log('File upload succeeded');
|
Logger.log('File upload succeeded');
|
||||||
deferred.resolve();
|
deferred.resolve();
|
||||||
|
|
|
@ -8,10 +8,63 @@
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
deferred.resolve();
|
reportOfflineActions(apiClient).done(function () {
|
||||||
|
|
||||||
|
// Do the first data sync
|
||||||
|
syncData(apiClient, false).done(function () {
|
||||||
|
|
||||||
|
// Download new content
|
||||||
|
getNewMedia(apiClient).done(function () {
|
||||||
|
|
||||||
|
// Do the second data sync
|
||||||
|
syncData(apiClient, false).done(function () {
|
||||||
|
|
||||||
|
deferred.resolve();
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
|
|
||||||
|
}).fail(getOnFail(deferred));
|
||||||
|
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function reportOfflineActions(apiClient) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
deferred.resolve();
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
function syncData(apiClient, syncUserItemAccess) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
deferred.resolve();
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNewMedia(apiClient) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
deferred.resolve();
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOnFail(deferred) {
|
||||||
|
return function () {
|
||||||
|
|
||||||
|
deferred.reject();
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!globalScope.MediaBrowser) {
|
if (!globalScope.MediaBrowser) {
|
||||||
|
|
4
dashboard-ui/cordova/fileupload.js
vendored
4
dashboard-ui/cordova/fileupload.js
vendored
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
self.upload = function (file, name, url) {
|
self.upload = function (file, mimeType, name, url) {
|
||||||
|
|
||||||
var deferred = DeferredBuilder.Deferred();
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
var options = new FileUploadOptions();
|
var options = new FileUploadOptions();
|
||||||
options.fileKey = "file";
|
options.fileKey = "file";
|
||||||
options.fileName = name;
|
options.fileName = name;
|
||||||
options.mimeType = 'image/jpg';
|
options.mimeType = mimeType;
|
||||||
|
|
||||||
var params = {};
|
var params = {};
|
||||||
options.params = params;
|
options.params = params;
|
||||||
|
|
|
@ -12,7 +12,6 @@
|
||||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
||||||
<a href="advanced.html" data-role="button">${TabGeneral}</a>
|
<a href="advanced.html" data-role="button">${TabGeneral}</a>
|
||||||
<a href="#" data-role="button" class="ui-btn-active">${TabHosting}</a>
|
<a href="#" data-role="button" class="ui-btn-active">${TabHosting}</a>
|
||||||
<a href="serversecurity.html" data-role="button">${TabSecurity}</a>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<form class="dashboardHostingForm">
|
<form class="dashboardHostingForm">
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
var elem = document.documentElement;
|
var elem = document.documentElement;
|
||||||
elem.classList.remove('backdropContainer');
|
elem.classList.remove('backdropContainer');
|
||||||
|
elem.removeAttribute('data-url');
|
||||||
elem.style.backgroundImage = '';
|
elem.style.backgroundImage = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -81,6 +82,11 @@
|
||||||
|
|
||||||
function setBackdropImage(elem, url) {
|
function setBackdropImage(elem, url) {
|
||||||
|
|
||||||
|
if (url == elem.getAttribute('data-url')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
elem.setAttribute('data-url', url);
|
||||||
ImageLoader.lazyImage(elem, url);
|
ImageLoader.lazyImage(elem, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +125,9 @@
|
||||||
|
|
||||||
function setDefault(page) {
|
function setDefault(page) {
|
||||||
|
|
||||||
getElement().style.backgroundImage = "url(css/images/splash.jpg)";
|
var elem = getElement();
|
||||||
|
elem.style.backgroundImage = "url(css/images/splash.jpg)";
|
||||||
|
elem.setAttribute('data-url', 'css/images/splash.jpg');
|
||||||
page = $(page)[0];
|
page = $(page)[0];
|
||||||
page.classList.add('backdropPage');
|
page.classList.add('backdropPage');
|
||||||
page.classList.add('staticBackdropPage');
|
page.classList.add('staticBackdropPage');
|
||||||
|
|
|
@ -39,7 +39,9 @@
|
||||||
|
|
||||||
$('.activityItems', page).activityLogList();
|
$('.activityItems', page).activityLogList();
|
||||||
|
|
||||||
$('.swaggerLink', page).attr('href', apiClient.getUrl('swagger-ui/index.html'));
|
$('.swaggerLink', page).attr('href', apiClient.getUrl('swagger-ui/index.html', {
|
||||||
|
api_key: ApiClient.accessToken()
|
||||||
|
}));
|
||||||
},
|
},
|
||||||
|
|
||||||
onPageHide: function () {
|
onPageHide: function () {
|
||||||
|
|
|
@ -595,9 +595,12 @@
|
||||||
|
|
||||||
setImageUrl(page, url);
|
setImageUrl(page, url);
|
||||||
|
|
||||||
Backdrops.setBackdropUrl(page, backdropUrl);
|
|
||||||
|
|
||||||
if (item) {
|
if (item) {
|
||||||
|
|
||||||
|
// This should be outside of the IF
|
||||||
|
// But for now, if you change songs but keep the same artist, the backdrop will flicker because in-between songs it clears out the image
|
||||||
|
Backdrops.setBackdropUrl(page, backdropUrl);
|
||||||
|
|
||||||
ApiClient.getItem(Dashboard.getCurrentUserId(), item.Id).done(function (fullItem) {
|
ApiClient.getItem(Dashboard.getCurrentUserId(), item.Id).done(function (fullItem) {
|
||||||
page.querySelector('.nowPlayingPageUserDataButtons').innerHTML = LibraryBrowser.getUserDataIconsHtml(fullItem, false);
|
page.querySelector('.nowPlayingPageUserDataButtons').innerHTML = LibraryBrowser.getUserDataIconsHtml(fullItem, false);
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,143 +0,0 @@
|
||||||
(function ($, document) {
|
|
||||||
|
|
||||||
function revoke(page, key) {
|
|
||||||
|
|
||||||
Dashboard.confirm(Globalize.translate('MessageConfirmRevokeApiKey'), Globalize.translate('HeaderConfirmRevokeApiKey'), function (result) {
|
|
||||||
|
|
||||||
if (result) {
|
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
|
||||||
|
|
||||||
ApiClient.ajax({
|
|
||||||
type: "DELETE",
|
|
||||||
url: ApiClient.getUrl('Auth/Keys' + key)
|
|
||||||
|
|
||||||
}).done(function () {
|
|
||||||
|
|
||||||
loadData(page);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderKeys(page, keys, users) {
|
|
||||||
|
|
||||||
var rows = keys.map(function (item) {
|
|
||||||
|
|
||||||
var html = '';
|
|
||||||
|
|
||||||
html += '<tr>';
|
|
||||||
|
|
||||||
html += '<td>';
|
|
||||||
html += '<button data-token="' + item.AccessToken + '" class="btnRevoke" data-mini="true" title="' + Globalize.translate('ButtonRevoke') + '" style="margin:0;">' + Globalize.translate('ButtonRevoke') + '</button>';
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td style="vertical-align:middle;">';
|
|
||||||
html += (item.AccessToken);
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td style="vertical-align:middle;">';
|
|
||||||
html += (item.AppName || '');
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td style="vertical-align:middle;">';
|
|
||||||
html += (item.DeviceName || '');
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td style="vertical-align:middle;">';
|
|
||||||
|
|
||||||
var user = users.filter(function (u) {
|
|
||||||
|
|
||||||
return u.Id == item.UserId;
|
|
||||||
})[0];
|
|
||||||
|
|
||||||
if (user) {
|
|
||||||
html += user.Name;
|
|
||||||
}
|
|
||||||
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '<td style="vertical-align:middle;">';
|
|
||||||
|
|
||||||
var date = parseISO8601Date(item.DateCreated, { toLocal: true });
|
|
||||||
|
|
||||||
html += date.toLocaleDateString() + ' ' + LibraryBrowser.getDisplayTime(date);
|
|
||||||
|
|
||||||
html += '</td>';
|
|
||||||
|
|
||||||
html += '</tr>';
|
|
||||||
|
|
||||||
return html;
|
|
||||||
|
|
||||||
}).join('');
|
|
||||||
|
|
||||||
var elem = $('.resultBody', page).html(rows).parents('.tblApiKeys').table("refresh").trigger('create');
|
|
||||||
|
|
||||||
$('.btnRevoke', elem).on('click', function () {
|
|
||||||
|
|
||||||
revoke(page, this.getAttribute('data-token'));
|
|
||||||
});
|
|
||||||
|
|
||||||
Dashboard.hideLoadingMsg();
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadData(page) {
|
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
|
||||||
|
|
||||||
ApiClient.getUsers().done(function (users) {
|
|
||||||
|
|
||||||
ApiClient.getJSON(ApiClient.getUrl('Auth/Keys')).done(function (result) {
|
|
||||||
|
|
||||||
renderKeys(page, result.Items, users);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function onSubmit() {
|
|
||||||
var form = this;
|
|
||||||
var page = $(form).parents('.page');
|
|
||||||
|
|
||||||
Dashboard.showLoadingMsg();
|
|
||||||
|
|
||||||
ApiClient.ajax({
|
|
||||||
type: "POST",
|
|
||||||
url: ApiClient.getUrl('Auth/Keys', {
|
|
||||||
|
|
||||||
App: $('#txtAppName', form).val()
|
|
||||||
|
|
||||||
})
|
|
||||||
|
|
||||||
}).done(function () {
|
|
||||||
|
|
||||||
$('.newKeyPanel', page).panel('close');
|
|
||||||
|
|
||||||
loadData(page);
|
|
||||||
});
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$(document).on('pageinit', "#serverSecurityPage", function () {
|
|
||||||
|
|
||||||
var page = this;
|
|
||||||
|
|
||||||
$('.btnNewKey', page).on('click', function () {
|
|
||||||
|
|
||||||
$('.newKeyPanel', page).panel('toggle');
|
|
||||||
|
|
||||||
$('#txtAppName', page).val('').focus();
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
$('.newKeyForm').off('submit', onSubmit).on('submit', onSubmit);
|
|
||||||
|
|
||||||
}).on('pageshowready', "#serverSecurityPage", function () {
|
|
||||||
|
|
||||||
var page = this;
|
|
||||||
|
|
||||||
loadData(page);
|
|
||||||
});
|
|
||||||
|
|
||||||
})(jQuery, document);
|
|
|
@ -1,60 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>${TitleAdvanced}</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="serverSecurityPage" data-role="page" class="page type-interior advancedConfigurationPage" data-require="jqmpanel,jqmtable,scripts/serversecurity,detailtablecss">
|
|
||||||
|
|
||||||
<div data-role="content">
|
|
||||||
<div class="content-primary">
|
|
||||||
|
|
||||||
<div data-role="controlgroup" data-type="horizontal" class="localnav" data-mini="true">
|
|
||||||
<a href="advanced.html" data-role="button">${TabGeneral}</a>
|
|
||||||
<a href="dashboardhosting.html" data-role="button">${TabHosting}</a>
|
|
||||||
<a href="#" data-role="button" class="ui-btn-active">${TabSecurity}</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h2>
|
|
||||||
<span>${HeaderApiKeys}</span>
|
|
||||||
<button class="btnNewKey" style="margin: -4px 0 0 2em; vertical-align: top;" data-icon="plus" data-mini="true" data-inline="true" type="button">${ButtonNew}</button>
|
|
||||||
</h2>
|
|
||||||
<p>${HeaderApiKeysHelp}</p>
|
|
||||||
<br />
|
|
||||||
<table data-role="table" data-mode="reflow" class="tblApiKeys stripedTable ui-responsive table-stroke" style="display: table;">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th></th>
|
|
||||||
<th>${HeaderApiKey}</th>
|
|
||||||
<th>${HeaderApp}</th>
|
|
||||||
<th>${HeaderDevice}</th>
|
|
||||||
<th>${HeaderUser}</th>
|
|
||||||
<th>${HeaderDateIssued}</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody class="resultBody"></tbody>
|
|
||||||
</table>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div data-role="panel" class="newKeyPanel" data-position="right" data-display="overlay" data-position-fixed="true">
|
|
||||||
<form class="newKeyForm">
|
|
||||||
|
|
||||||
<h3>${HeaderNewApiKey}</h3>
|
|
||||||
|
|
||||||
<p>${HeaderNewApiKeyHelp}</p>
|
|
||||||
<div>
|
|
||||||
<label for="txtAppName">${LabelAppName}</label>
|
|
||||||
<input type="text" id="txtAppName" required="required" />
|
|
||||||
<div class="fieldDescription">${LabelAppNameExample}</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<br />
|
|
||||||
<p>
|
|
||||||
<button type="submit" data-icon="plus" data-mini="true" data-theme="b">${ButtonCreate}</button>
|
|
||||||
</p>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
Loading…
Add table
Add a link
Reference in a new issue