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

update docs

This commit is contained in:
Luke Pulverenti 2015-09-14 08:50:37 -04:00
parent 5d1ff60f3d
commit 59d8a3a853
11 changed files with 78 additions and 214 deletions

View file

@ -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">

View file

@ -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();

View file

@ -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();

View file

@ -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) {

View file

@ -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;

View file

@ -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">

View file

@ -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');

View file

@ -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 () {

View file

@ -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);
}); });

View file

@ -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);

View file

@ -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>