aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.WebDashboard/Html/scripts/MediaLibraryPage.js
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.WebDashboard/Html/scripts/MediaLibraryPage.js')
-rw-r--r--MediaBrowser.WebDashboard/Html/scripts/MediaLibraryPage.js272
1 files changed, 272 insertions, 0 deletions
diff --git a/MediaBrowser.WebDashboard/Html/scripts/MediaLibraryPage.js b/MediaBrowser.WebDashboard/Html/scripts/MediaLibraryPage.js
new file mode 100644
index 000000000..4f4d119d8
--- /dev/null
+++ b/MediaBrowser.WebDashboard/Html/scripts/MediaLibraryPage.js
@@ -0,0 +1,272 @@
+var MediaLibraryPage = {
+
+ onPageShow: function () {
+
+ MediaLibraryPage.lastVirtualFolderName = "";
+
+ MediaLibraryPage.reloadLibrary();
+ },
+
+ reloadLibrary: function () {
+
+ Dashboard.showLoadingMsg();
+
+ var userId = getParameterByName("userId");
+
+ var page = $.mobile.activePage;
+
+ if (userId) {
+
+ $('#userProfileNavigation', page).show();
+
+ ApiClient.getUser(userId).done(function (user) {
+
+ Dashboard.setPageTitle(user.Name);
+
+ $('#fldUseDefaultLibrary', page).show();
+
+ $('#chkUseDefaultLibrary', page).checked(!user.Configuration.UseCustomLibrary).checkboxradio("refresh");
+
+ if (user.Configuration.UseCustomLibrary) {
+
+ ApiClient.getVirtualFolders(userId).done(MediaLibraryPage.reloadVirtualFolders);
+ $('#divMediaLibrary', page).show();
+ } else {
+ $('#divMediaLibrary', page).hide();
+ Dashboard.hideLoadingMsg();
+ }
+
+ });
+
+ } else {
+
+ $('#userProfileNavigation', page).hide();
+ ApiClient.getVirtualFolders().done(MediaLibraryPage.reloadVirtualFolders);
+
+ $('#fldUseDefaultLibrary', page).hide();
+ $('#divMediaLibrary', page).show();
+ Dashboard.setPageTitle("Media Library");
+ }
+ },
+
+ reloadVirtualFolders: function (virtualFolders) {
+
+ var page = $.mobile.activePage;
+
+ if (virtualFolders) {
+ MediaLibraryPage.virtualFolders = virtualFolders;
+ } else {
+ virtualFolders = MediaLibraryPage.virtualFolders;
+ }
+
+ var html = '';
+
+ for (var i = 0, length = virtualFolders.length; i < length; i++) {
+
+ var virtualFolder = virtualFolders[i];
+
+ var isCollapsed = MediaLibraryPage.lastVirtualFolderName != virtualFolder.Name;
+
+ html += MediaLibraryPage.getVirtualFolderHtml(virtualFolder, isCollapsed, i);
+ }
+
+ $('#divVirtualFolders', page).html(html).trigger('create');
+
+ Dashboard.hideLoadingMsg();
+ },
+
+ getVirtualFolderHtml: function (virtualFolder, isCollapsed, index) {
+
+ isCollapsed = isCollapsed ? "true" : "false";
+ var html = '<div class="collapsibleVirtualFolder" data-role="collapsible" data-collapsed="' + isCollapsed + '" data-content-theme="c">';
+
+ html += '<h3>' + virtualFolder.Name + '</h3>';
+
+ html += '<ul class="mediaFolderLocations" data-inset="true" data-role="listview" data-split-icon="minus">';
+
+ html += '<li data-role="list-divider" class="mediaLocationsHeader">Media Locations';
+ html += '<button type="button" data-icon="plus" data-mini="true" data-theme="c" data-inline="true" data-iconpos="notext" onclick="MediaLibraryPage.addMediaLocation(' + index + ');"></button>';
+ html += '</li>';
+
+ for (var i = 0, length = virtualFolder.Locations.length; i < length; i++) {
+
+ var location = virtualFolder.Locations[i];
+ html += '<li>';
+ html += '<a class="lnkMediaLocation" href="#">' + location + '</a>';
+ html += '<a href="#" data-index="' + i + '" data-folderindex="' + index + '" onclick="MediaLibraryPage.deleteMediaLocation(this);"></a>';
+ html += '</li>';
+ }
+ html += '</ul>';
+
+ html += '<p>';
+ html += '<button type="button" data-inline="true" data-icon="minus" data-folderindex="' + index + '" onclick="MediaLibraryPage.deleteVirtualFolder(this);">Remove collection</button>';
+ html += '<button type="button" data-inline="true" data-icon="pencil" data-folderindex="' + index + '" onclick="MediaLibraryPage.renameVirtualFolder(this);">Rename collection</button>';
+ html += '</p>';
+
+ html += '</div>';
+
+ return html;
+ },
+
+ setUseDefaultMediaLibrary: function (useDefaultLibrary) {
+
+ Dashboard.showLoadingMsg();
+
+ var userId = getParameterByName("userId");
+
+ ApiClient.getUser(userId).done(function (user) {
+
+ user.Configuration.UseCustomLibrary = !useDefaultLibrary;
+
+ ApiClient.updateUser(user).done(MediaLibraryPage.reloadLibrary);
+ });
+ },
+
+ addVirtualFolder: function () {
+
+ MediaLibraryPage.getTextValue("Add Media Collection", "Name:", "", function (name) {
+
+ var userId = getParameterByName("userId");
+
+ MediaLibraryPage.lastVirtualFolderName = name;
+
+ ApiClient.addVirtualFolder(name, userId).done(MediaLibraryPage.processOperationResult);
+
+ });
+ },
+
+ addMediaLocation: function (virtualFolderIndex) {
+
+ MediaLibraryPage.selectDirectory(function (path) {
+
+ if (path) {
+
+ var virtualFolder = MediaLibraryPage.virtualFolders[virtualFolderIndex];
+
+ MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
+
+ var userId = getParameterByName("userId");
+
+ ApiClient.addMediaPath(virtualFolder.Name, path, userId).done(MediaLibraryPage.processOperationResult);
+ }
+
+ });
+ },
+
+ selectDirectory: function (callback) {
+
+ Dashboard.selectDirectory({callback: callback});
+ },
+
+ getTextValue: function (header, label, initialValue, callback) {
+
+ var page = $.mobile.activePage;
+
+ var popup = $('#popupEnterText', page);
+
+ $('h3', popup).html(header);
+ $('label', popup).html(label);
+ $('#txtValue', popup).val(initialValue);
+
+ popup.popup("open").on("popupafterclose", function () {
+
+ $(this).off("popupafterclose").off("click");
+
+ $('#textEntryForm', this).off("submit");
+
+ });
+
+ $('#textEntryForm', popup).on('submit', function () {
+
+ if (callback) {
+ callback($('#txtValue', popup).val());
+ }
+
+ return false;
+ });
+ },
+
+ renameVirtualFolder: function (button) {
+
+ var folderIndex = button.getAttribute('data-folderindex');
+ var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex];
+
+ MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
+
+ MediaLibraryPage.getTextValue(virtualFolder.Name, "Rename " + virtualFolder.Name, virtualFolder.Name, function (newName) {
+
+ if (virtualFolder.Name != newName) {
+
+ var userId = getParameterByName("userId");
+
+ ApiClient.renameVirtualFolder(virtualFolder.Name, newName, userId).done(MediaLibraryPage.processOperationResult);
+ }
+ });
+ },
+
+ deleteVirtualFolder: function (button) {
+
+ var folderIndex = button.getAttribute('data-folderindex');
+ var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex];
+
+ var parent = $(button).parents('.collapsibleVirtualFolder');
+
+ var locations = $('.lnkMediaLocation', parent).map(function () {
+ return this.innerHTML;
+ }).get();
+
+ var msg = "Are you sure you wish to remove " + virtualFolder.Name + "?";
+
+ if (locations.length) {
+ msg += "<br/><br/>The following media locations will be removed from your library:<br/><br/>";
+ msg += locations.join("<br/>");
+ }
+
+ MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
+
+ Dashboard.confirm(msg, "Remove Media Folder", function (confirmResult) {
+
+ if (confirmResult) {
+
+ var userId = getParameterByName("userId");
+
+ ApiClient.removeVirtualFolder(virtualFolder.Name, userId).done(MediaLibraryPage.processOperationResult);
+ }
+
+ });
+ },
+
+ deleteMediaLocation: function (button) {
+
+ var folderIndex = button.getAttribute('data-folderindex');
+ var index = parseInt(button.getAttribute('data-index'));
+
+ var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex];
+
+ MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
+
+ var location = virtualFolder.Locations[index];
+
+ Dashboard.confirm("Are you sure you wish to remove " + location + "?", "Remove Media Location", function (confirmResult) {
+
+ if (confirmResult) {
+
+ var userId = getParameterByName("userId");
+
+ ApiClient.removeMediaPath(virtualFolder.Name, location, userId).done(MediaLibraryPage.processOperationResult);
+ }
+ });
+ },
+
+ processOperationResult: function (result) {
+ Dashboard.hideLoadingMsg();
+
+ var page = $.mobile.activePage;
+
+ $('#popupEnterText', page).popup("close");
+ $('#popupDirectoryPicker', page).popup("close");
+ MediaLibraryPage.reloadLibrary();
+ }
+};
+
+$(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow); \ No newline at end of file