PageRenderTime 54ms CodeModel.GetById 24ms RepoModel.GetById 1ms app.codeStats 0ms

/client/galaxy/scripts/mvc/library/library-model.js

https://bitbucket.org/galaxy/galaxy-central/
JavaScript | 246 lines | 174 code | 32 blank | 40 comment | 27 complexity | 2808bbddb76c699965031fbb9e2e086c MD5 | raw file
Possible License(s): CC-BY-3.0
  1. define([], function() {
  2. // ============================================================================
  3. // LIBRARY RELATED MODELS
  4. var Library = Backbone.Model.extend({
  5. urlRoot: Galaxy.root + 'api/libraries/',
  6. /** based on show_deleted would this lib show in the list of lib's?
  7. * @param {Boolean} show_deleted are we including deleted libraries?
  8. */
  9. isVisible : function(show_deleted){
  10. var isVisible = true;
  11. if( (!show_deleted) && (this.get('deleted')) ){
  12. isVisible = false;
  13. }
  14. return isVisible;
  15. }
  16. });
  17. var Libraries = Backbone.Collection.extend({
  18. url: Galaxy.root + 'api/libraries',
  19. model: Library,
  20. sort_key: 'name', // default
  21. sort_order: null, // default
  22. initialize : function(options){
  23. options = options || {};
  24. },
  25. search : function(search_term){
  26. /**
  27. * Search the collection and return only the models that have
  28. * the search term in their names.
  29. * [the term to search]
  30. * @type {string}
  31. */
  32. if (search_term == "") return this;
  33. var lowercase_term = search_term.toLowerCase();
  34. return this.filter(function(data) {
  35. lowercase_name = data.get("name").toLowerCase();
  36. return lowercase_name.indexOf(lowercase_term) !== -1;
  37. });
  38. },
  39. /** Get every 'shown' library in this collection based on deleted filter
  40. * @param {Boolean} show_deleted are we including deleted libraries?
  41. * @returns array of library models
  42. */
  43. getVisible : function(show_deleted, filters){
  44. filters = filters || [];
  45. var filteredLibraries = new Libraries( this.filter( function( item ){
  46. return item.isVisible(show_deleted);
  47. }));
  48. return filteredLibraries;
  49. },
  50. /** Sort collection by library name (ascending) and return the sorted
  51. * collection
  52. */
  53. sortByNameAsc: function(){
  54. this.comparator = function(libraryA, libraryB){
  55. if (libraryA.get('name').toLowerCase() > libraryB.get('name').toLowerCase()) {
  56. return 1; // after
  57. }
  58. if (libraryB.get('name').toLowerCase() > libraryA.get('name').toLowerCase()) {
  59. return -1; // before
  60. }
  61. return 0; // equal
  62. };
  63. this.sort();
  64. return this;
  65. },
  66. /** Sort collection by library name (descending) and return the sorted
  67. * collection
  68. */
  69. sortByNameDesc: function(){
  70. this.comparator = function(libraryA, libraryB){
  71. if (libraryA.get('name').toLowerCase() > libraryB.get('name').toLowerCase()) {
  72. return -1; // before
  73. }
  74. if (libraryB.get('name').toLowerCase() > libraryA.get('name').toLowerCase()) {
  75. return 1; // after
  76. }
  77. return 0; // equal
  78. };
  79. this.sort();
  80. return this;
  81. }
  82. });
  83. // ============================================================================
  84. // FOLDER RELATED MODELS
  85. var LibraryItem = Backbone.Model.extend({
  86. });
  87. var Ldda = LibraryItem.extend({
  88. urlRoot : Galaxy.root + 'api/libraries/datasets/'
  89. });
  90. var FolderAsModel = LibraryItem.extend({
  91. urlRoot: Galaxy.root + 'api/folders/'
  92. });
  93. var Folder = Backbone.Collection.extend({
  94. model: LibraryItem,
  95. /** Sort collection by item name (ascending) and return the sorted
  96. * collection. Folders go before datasets.
  97. */
  98. sortByNameAsc: function(){
  99. this.comparator = function(itemA, itemB){
  100. if (itemA.get('type') === itemB.get('type')){
  101. if (itemA.get('name').toLowerCase() > itemB.get('name').toLowerCase()) {
  102. return 1; // after
  103. }
  104. if (itemB.get('name').toLowerCase() > itemA.get('name').toLowerCase()) {
  105. return -1; // before
  106. }
  107. return 0; // equal
  108. } else {
  109. if (itemA.get('type') === 'folder'){
  110. return -1; // folder is always before dataset
  111. } else {
  112. return 1;
  113. }
  114. }
  115. };
  116. this.sort();
  117. return this;
  118. },
  119. /** Sort collection by item name (descending) and return the sorted
  120. * collection. Folders go before datasets.
  121. */
  122. sortByNameDesc: function(){
  123. this.comparator = function(itemA, itemB){
  124. if (itemA.get('type') === itemB.get('type')){
  125. if (itemA.get('name').toLowerCase() > itemB.get('name').toLowerCase()) {
  126. return -1; // after
  127. }
  128. if (itemB.get('name').toLowerCase() > itemA.get('name').toLowerCase()) {
  129. return 1; // before
  130. }
  131. return 0; // equal
  132. } else {
  133. if (itemA.get('type') === 'folder'){
  134. return -1; // folder is always before dataset
  135. } else {
  136. return 1;
  137. }
  138. }
  139. };
  140. this.sort();
  141. return this;
  142. }
  143. });
  144. var FolderContainer = Backbone.Model.extend({
  145. defaults : {
  146. folder : new Folder(),
  147. urlRoot : Galaxy.root + 'api/folders/',
  148. id : "unknown"
  149. },
  150. parse : function(obj) {
  151. // empty the collection
  152. this.get("folder").reset();
  153. // response is not a simple array, it contains metadata
  154. // this will update the inner collection
  155. for (var i = 0; i < obj.folder_contents.length; i++) {
  156. if (obj.folder_contents[i].type === 'folder'){
  157. var folder_item = new FolderAsModel(obj.folder_contents[i])
  158. this.get("folder").add(folder_item);
  159. } else if(obj.folder_contents[i].type === 'file'){
  160. var file_item = new Ldda(obj.folder_contents[i])
  161. this.get("folder").add(file_item);
  162. } else{
  163. console.error('Unknown folder item type encountered while parsing response.');
  164. }
  165. };
  166. return obj;
  167. }
  168. });
  169. // ============================================================================
  170. // HISTORY RELATED MODELS
  171. // TODO UNITE
  172. var HistoryItem = Backbone.Model.extend({
  173. urlRoot : Galaxy.root + 'api/histories/'
  174. });
  175. var HistoryContents = Backbone.Collection.extend({
  176. urlRoot : Galaxy.root + 'api/histories/',
  177. initialize: function(options){
  178. this.id = options.id;
  179. },
  180. url : function(){
  181. return this.urlRoot + this.id + '/contents';
  182. },
  183. model : HistoryItem
  184. });
  185. var GalaxyHistory = Backbone.Model.extend({
  186. urlRoot : Galaxy.root + 'api/histories/'
  187. });
  188. var GalaxyHistories = Backbone.Collection.extend({
  189. url : Galaxy.root + 'api/histories',
  190. model : GalaxyHistory
  191. });
  192. // ============================================================================
  193. // JSTREE MODEL
  194. /** Represents folder structure parsable by the jstree component.
  195. *
  196. */
  197. var Jstree = Backbone.Model.extend({
  198. urlRoot: Galaxy.root + 'api/remote_files'
  199. });
  200. return {
  201. Library: Library,
  202. Libraries : Libraries,
  203. Item : Ldda,
  204. Ldda : Ldda,
  205. FolderAsModel : FolderAsModel,
  206. Folder : Folder,
  207. FolderContainer : FolderContainer,
  208. HistoryItem : HistoryItem,
  209. HistoryContents : HistoryContents,
  210. GalaxyHistory : GalaxyHistory,
  211. GalaxyHistories : GalaxyHistories,
  212. Jstree: Jstree
  213. };
  214. });