MediaLibraryPage.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. var MediaLibraryPage = {
  2. onPageShow: function () {
  3. MediaLibraryPage.lastVirtualFolderName = "";
  4. MediaLibraryPage.reloadLibrary();
  5. },
  6. reloadLibrary: function () {
  7. Dashboard.showLoadingMsg();
  8. var userId = getParameterByName("userId");
  9. var page = $.mobile.activePage;
  10. if (userId) {
  11. $('#userProfileNavigation', page).show();
  12. ApiClient.getUser(userId).done(function (user) {
  13. Dashboard.setPageTitle(user.Name);
  14. $('#fldUseDefaultLibrary', page).show();
  15. $('#chkUseDefaultLibrary', page).checked(!user.Configuration.UseCustomLibrary).checkboxradio("refresh");
  16. if (user.Configuration.UseCustomLibrary) {
  17. ApiClient.getVirtualFolders(userId).done(MediaLibraryPage.reloadVirtualFolders);
  18. $('#divMediaLibrary', page).show();
  19. } else {
  20. $('#divMediaLibrary', page).hide();
  21. Dashboard.hideLoadingMsg();
  22. }
  23. });
  24. } else {
  25. $('#userProfileNavigation', page).hide();
  26. ApiClient.getVirtualFolders().done(MediaLibraryPage.reloadVirtualFolders);
  27. $('#fldUseDefaultLibrary', page).hide();
  28. $('#divMediaLibrary', page).show();
  29. Dashboard.setPageTitle("Media Library");
  30. }
  31. },
  32. reloadVirtualFolders: function (virtualFolders) {
  33. var page = $.mobile.activePage;
  34. if (virtualFolders) {
  35. MediaLibraryPage.virtualFolders = virtualFolders;
  36. } else {
  37. virtualFolders = MediaLibraryPage.virtualFolders;
  38. }
  39. var html = '';
  40. for (var i = 0, length = virtualFolders.length; i < length; i++) {
  41. var virtualFolder = virtualFolders[i];
  42. var isCollapsed = MediaLibraryPage.lastVirtualFolderName != virtualFolder.Name;
  43. html += MediaLibraryPage.getVirtualFolderHtml(virtualFolder, isCollapsed, i);
  44. }
  45. $('#divVirtualFolders', page).html(html).trigger('create');
  46. Dashboard.hideLoadingMsg();
  47. },
  48. getVirtualFolderHtml: function (virtualFolder, isCollapsed, index) {
  49. isCollapsed = isCollapsed ? "true" : "false";
  50. var html = '<div class="collapsibleVirtualFolder" data-role="collapsible" data-collapsed="' + isCollapsed + '" data-content-theme="c">';
  51. html += '<h3>' + virtualFolder.Name + '</h3>';
  52. html += '<ul class="mediaFolderLocations" data-inset="true" data-role="listview" data-split-icon="minus">';
  53. html += '<li data-role="list-divider" class="mediaLocationsHeader">Media Locations';
  54. html += '<button type="button" data-icon="plus" data-mini="true" data-theme="c" data-inline="true" data-iconpos="notext" onclick="MediaLibraryPage.addMediaLocation(' + index + ');"></button>';
  55. html += '</li>';
  56. for (var i = 0, length = virtualFolder.Locations.length; i < length; i++) {
  57. var location = virtualFolder.Locations[i];
  58. html += '<li>';
  59. html += '<a class="lnkMediaLocation" href="#">' + location + '</a>';
  60. html += '<a href="#" data-index="' + i + '" data-folderindex="' + index + '" onclick="MediaLibraryPage.deleteMediaLocation(this);"></a>';
  61. html += '</li>';
  62. }
  63. html += '</ul>';
  64. html += '<p>';
  65. html += '<button type="button" data-inline="true" data-icon="minus" data-folderindex="' + index + '" onclick="MediaLibraryPage.deleteVirtualFolder(this);">Remove collection</button>';
  66. html += '<button type="button" data-inline="true" data-icon="pencil" data-folderindex="' + index + '" onclick="MediaLibraryPage.renameVirtualFolder(this);">Rename collection</button>';
  67. html += '</p>';
  68. html += '</div>';
  69. return html;
  70. },
  71. setUseDefaultMediaLibrary: function (useDefaultLibrary) {
  72. Dashboard.showLoadingMsg();
  73. var userId = getParameterByName("userId");
  74. ApiClient.getUser(userId).done(function (user) {
  75. user.Configuration.UseCustomLibrary = !useDefaultLibrary;
  76. ApiClient.updateUser(user).done(MediaLibraryPage.reloadLibrary);
  77. });
  78. },
  79. addVirtualFolder: function () {
  80. MediaLibraryPage.getTextValue("Add Media Collection", "Name:", "", function (name) {
  81. var userId = getParameterByName("userId");
  82. MediaLibraryPage.lastVirtualFolderName = name;
  83. ApiClient.addVirtualFolder(name, userId).done(MediaLibraryPage.processOperationResult);
  84. });
  85. },
  86. addMediaLocation: function (virtualFolderIndex) {
  87. MediaLibraryPage.selectDirectory(function (path) {
  88. if (path) {
  89. var virtualFolder = MediaLibraryPage.virtualFolders[virtualFolderIndex];
  90. MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
  91. var userId = getParameterByName("userId");
  92. ApiClient.addMediaPath(virtualFolder.Name, path, userId).done(MediaLibraryPage.processOperationResult);
  93. }
  94. });
  95. },
  96. selectDirectory: function (callback) {
  97. Dashboard.selectDirectory({callback: callback});
  98. },
  99. getTextValue: function (header, label, initialValue, callback) {
  100. var page = $.mobile.activePage;
  101. var popup = $('#popupEnterText', page);
  102. $('h3', popup).html(header);
  103. $('label', popup).html(label);
  104. $('#txtValue', popup).val(initialValue);
  105. popup.popup("open").on("popupafterclose", function () {
  106. $(this).off("popupafterclose").off("click");
  107. $('#textEntryForm', this).off("submit");
  108. });
  109. $('#textEntryForm', popup).on('submit', function () {
  110. if (callback) {
  111. callback($('#txtValue', popup).val());
  112. }
  113. return false;
  114. });
  115. },
  116. renameVirtualFolder: function (button) {
  117. var folderIndex = button.getAttribute('data-folderindex');
  118. var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex];
  119. MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
  120. MediaLibraryPage.getTextValue(virtualFolder.Name, "Rename " + virtualFolder.Name, virtualFolder.Name, function (newName) {
  121. if (virtualFolder.Name != newName) {
  122. var userId = getParameterByName("userId");
  123. ApiClient.renameVirtualFolder(virtualFolder.Name, newName, userId).done(MediaLibraryPage.processOperationResult);
  124. }
  125. });
  126. },
  127. deleteVirtualFolder: function (button) {
  128. var folderIndex = button.getAttribute('data-folderindex');
  129. var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex];
  130. var parent = $(button).parents('.collapsibleVirtualFolder');
  131. var locations = $('.lnkMediaLocation', parent).map(function () {
  132. return this.innerHTML;
  133. }).get();
  134. var msg = "Are you sure you wish to remove " + virtualFolder.Name + "?";
  135. if (locations.length) {
  136. msg += "<br/><br/>The following media locations will be removed from your library:<br/><br/>";
  137. msg += locations.join("<br/>");
  138. }
  139. MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
  140. Dashboard.confirm(msg, "Remove Media Folder", function (confirmResult) {
  141. if (confirmResult) {
  142. var userId = getParameterByName("userId");
  143. ApiClient.removeVirtualFolder(virtualFolder.Name, userId).done(MediaLibraryPage.processOperationResult);
  144. }
  145. });
  146. },
  147. deleteMediaLocation: function (button) {
  148. var folderIndex = button.getAttribute('data-folderindex');
  149. var index = parseInt(button.getAttribute('data-index'));
  150. var virtualFolder = MediaLibraryPage.virtualFolders[folderIndex];
  151. MediaLibraryPage.lastVirtualFolderName = virtualFolder.Name;
  152. var location = virtualFolder.Locations[index];
  153. Dashboard.confirm("Are you sure you wish to remove " + location + "?", "Remove Media Location", function (confirmResult) {
  154. if (confirmResult) {
  155. var userId = getParameterByName("userId");
  156. ApiClient.removeMediaPath(virtualFolder.Name, location, userId).done(MediaLibraryPage.processOperationResult);
  157. }
  158. });
  159. },
  160. processOperationResult: function (result) {
  161. Dashboard.hideLoadingMsg();
  162. var page = $.mobile.activePage;
  163. $('#popupEnterText', page).popup("close");
  164. $('#popupDirectoryPicker', page).popup("close");
  165. MediaLibraryPage.reloadLibrary();
  166. }
  167. };
  168. $(document).on('pageshow', ".mediaLibraryPage", MediaLibraryPage.onPageShow);