PageRenderTime 27ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/static/scripts/mvc/library/library-librarytoolbar-view.js

https://bitbucket.org/remy_d1/galaxy-central-manageapi
JavaScript | 222 lines | 184 code | 23 blank | 15 comment | 19 complexity | 25d99d4e9c0e4f968e3308aea20e67c4 MD5 | raw file
Possible License(s): CC-BY-3.0
  1. define([
  2. "libs/toastr",
  3. "mvc/library/library-model"],
  4. function(mod_toastr,
  5. mod_library_model) {
  6. /**
  7. * This view represents the top part of the library page.
  8. * It contains the tool bar with buttons.
  9. */
  10. var LibraryToolbarView = Backbone.View.extend({
  11. el: '#center',
  12. events: {
  13. 'click #create_new_library_btn' : 'showLibraryModal',
  14. 'click #include_deleted_chk' : 'includeDeletedChecked',
  15. 'click #page_size_prompt' : 'showPageSizePrompt'
  16. },
  17. initialize: function( options ){
  18. this.options = _.defaults( this.options || {}, options );
  19. this.render();
  20. },
  21. render: function(){
  22. var toolbar_template = this.templateToolBar();
  23. var is_admin = false;
  24. var is_anonym = true;
  25. if ( Galaxy.currUser ){
  26. is_admin = Galaxy.currUser.isAdmin();
  27. is_anonym = Galaxy.currUser.isAnonymous();
  28. }
  29. this.$el.html(toolbar_template( { admin_user: is_admin, anon_user: is_anonym } ) );
  30. if ( is_admin ){
  31. this.$el.find( '#include_deleted_chk' )[0].checked = Galaxy.libraries.preferences.get( 'with_deleted' );
  32. }
  33. },
  34. /**
  35. * Called from LibraryListView when needed.
  36. * @param {object} options common options
  37. */
  38. renderPaginator: function( options ){
  39. this.options = _.extend( this.options, options );
  40. var paginator_template = this.templatePaginator();
  41. this.$el.find( '#library_paginator' ).html( paginator_template({
  42. show_page: parseInt( this.options.show_page ),
  43. page_count: parseInt( this.options.page_count ),
  44. total_libraries_count: this.options.total_libraries_count,
  45. libraries_shown: this.options.libraries_shown
  46. }));
  47. },
  48. showLibraryModal : function (event){
  49. event.preventDefault();
  50. event.stopPropagation();
  51. var self = this;
  52. this.modal = Galaxy.modal;
  53. this.modal.show({
  54. closing_events : true,
  55. title : 'Create New Library',
  56. body : this.templateNewLibraryInModal(),
  57. buttons : {
  58. 'Create' : function() { self.createNewLibrary(); },
  59. 'Close' : function() { self.modal.hide(); }
  60. }
  61. });
  62. },
  63. createNewLibrary: function(){
  64. var libraryDetails = this.serializeNewLibrary();
  65. if (this.valdiateNewLibrary(libraryDetails)){
  66. var library = new mod_library_model.Library();
  67. var self = this;
  68. library.save(libraryDetails, {
  69. success: function (library) {
  70. Galaxy.libraries.libraryListView.collection.add(library);
  71. self.modal.hide();
  72. self.clearLibraryModal();
  73. Galaxy.libraries.libraryListView.render();
  74. mod_toastr.success('Library created.');
  75. },
  76. error: function(model, response){
  77. if (typeof response.responseJSON !== "undefined"){
  78. mod_toastr.error(response.responseJSON.err_msg);
  79. } else {
  80. mod_toastr.error('An error occured.');
  81. }
  82. }
  83. });
  84. } else {
  85. mod_toastr.error('Library\'s name is missing.');
  86. }
  87. return false;
  88. },
  89. showPageSizePrompt: function(){
  90. var library_page_size = prompt( 'How many libraries per page do you want to see?', Galaxy.libraries.preferences.get( 'library_page_size' ) );
  91. if ( ( library_page_size != null ) && ( library_page_size == parseInt( library_page_size ) ) ) {
  92. Galaxy.libraries.preferences.set( { 'library_page_size': parseInt( library_page_size ) } );
  93. Galaxy.libraries.libraryListView.render( { show_page: 1 } );
  94. }
  95. },
  96. // clear the library modal once saved
  97. clearLibraryModal : function(){
  98. $("input[name='Name']").val('');
  99. $("input[name='Description']").val('');
  100. $("input[name='Synopsis']").val('');
  101. },
  102. serializeNewLibrary : function(){
  103. return {
  104. name: $("input[name='Name']").val(),
  105. description: $("input[name='Description']").val(),
  106. synopsis: $("input[name='Synopsis']").val()
  107. };
  108. },
  109. valdiateNewLibrary: function( libraryDetails ){
  110. return libraryDetails.name !== '';
  111. },
  112. /**
  113. * Include or exclude deleted libraries in the view.
  114. * @param {object} event common event
  115. */
  116. includeDeletedChecked: function( event ){
  117. if (event.target.checked){
  118. Galaxy.libraries.preferences.set( { 'with_deleted': true } );
  119. Galaxy.libraries.libraryListView.render();
  120. } else{
  121. Galaxy.libraries.preferences.set( { 'with_deleted': false } );
  122. Galaxy.libraries.libraryListView.render();
  123. }
  124. },
  125. templateToolBar: function(){
  126. tmpl_array = [];
  127. tmpl_array.push('<div class="library_style_container">');
  128. tmpl_array.push(' <div id="toolbar_form">');
  129. tmpl_array.push(' <div id="library_toolbar">');
  130. tmpl_array.push(' <form class="form-inline" role="form">');
  131. tmpl_array.push(' <span><strong><a href="#" title="Go to first page">DATA LIBRARIES</a></strong></span>');
  132. tmpl_array.push(' <% if(admin_user === true) { %>');
  133. tmpl_array.push(' <div class="checkbox" style="height: 20px;">');
  134. tmpl_array.push(' <label>');
  135. tmpl_array.push(' <input id="include_deleted_chk" type="checkbox"> include deleted </input>');
  136. tmpl_array.push(' </label>');
  137. tmpl_array.push(' </div>');
  138. tmpl_array.push(' <span data-toggle="tooltip" data-placement="top" title="Create New Library"><button id="create_new_library_btn" class="primary-button btn-xs" type="button"><span class="fa fa-plus"></span> New Library</button></span>');
  139. tmpl_array.push(' <% } %>');
  140. tmpl_array.push(' <span class="help-button" data-toggle="tooltip" data-placement="top" title="Visit Libraries Wiki"><a href="https://wiki.galaxyproject.org/DataLibraries/screen/ListOfLibraries" target="_blank"><button class="primary-button" type="button"><span class="fa fa-question-circle"></span> Help</button></a></span>');
  141. tmpl_array.push(' <span id="library_paginator" class="library-paginator">');
  142. // paginator will append here
  143. tmpl_array.push(' </span>');
  144. tmpl_array.push(' </form>');
  145. tmpl_array.push(' </div>');
  146. tmpl_array.push(' </div>');
  147. tmpl_array.push(' <div id="libraries_element">');
  148. // table with libraries will append here
  149. tmpl_array.push(' </div>');
  150. tmpl_array.push('</div>');
  151. return _.template(tmpl_array.join(''));
  152. },
  153. templatePaginator: function(){
  154. tmpl_array = [];
  155. tmpl_array.push(' <ul class="pagination pagination-sm">');
  156. tmpl_array.push(' <% if ( ( show_page - 1 ) > 0 ) { %>');
  157. tmpl_array.push(' <% if ( ( show_page - 1 ) > page_count ) { %>'); // we are on higher page than total page count
  158. tmpl_array.push(' <li><a href="#page/1"><span class="fa fa-angle-double-left"></span></a></li>');
  159. tmpl_array.push(' <li class="disabled"><a href="#page/<% print( show_page ) %>"><% print( show_page - 1 ) %></a></li>');
  160. tmpl_array.push(' <% } else { %>');
  161. tmpl_array.push(' <li><a href="#page/1"><span class="fa fa-angle-double-left"></span></a></li>');
  162. tmpl_array.push(' <li><a href="#page/<% print( show_page - 1 ) %>"><% print( show_page - 1 ) %></a></li>');
  163. tmpl_array.push(' <% } %>');
  164. tmpl_array.push(' <% } else { %>'); // we are on the first page
  165. tmpl_array.push(' <li class="disabled"><a href="#page/1"><span class="fa fa-angle-double-left"></span></a></li>');
  166. tmpl_array.push(' <li class="disabled"><a href="#page/<% print( show_page ) %>"><% print( show_page - 1 ) %></a></li>');
  167. tmpl_array.push(' <% } %>');
  168. tmpl_array.push(' <li class="active">');
  169. tmpl_array.push(' <a href="#page/<% print( show_page ) %>"><% print( show_page ) %></a>');
  170. tmpl_array.push(' </li>');
  171. tmpl_array.push(' <% if ( ( show_page ) < page_count ) { %>');
  172. tmpl_array.push(' <li><a href="#page/<% print( show_page + 1 ) %>"><% print( show_page + 1 ) %></a></li>');
  173. tmpl_array.push(' <li><a href="#page/<% print( page_count ) %>"><span class="fa fa-angle-double-right"></span></a></li>');
  174. tmpl_array.push(' <% } else { %>');
  175. tmpl_array.push(' <li class="disabled"><a href="#page/<% print( show_page ) %>"><% print( show_page + 1 ) %></a></li>');
  176. tmpl_array.push(' <li class="disabled"><a href="#page/<% print( page_count ) %>"><span class="fa fa-angle-double-right"></span></a></li>');
  177. tmpl_array.push(' <% } %>');
  178. tmpl_array.push(' </ul>');
  179. tmpl_array.push(' <span>');
  180. tmpl_array.push(' showing <a data-toggle="tooltip" data-placement="top" title="Click to change the number of libraries on page" id="page_size_prompt"><%- libraries_shown %></a> of <%- total_libraries_count %> libraries');
  181. tmpl_array.push(' </span>');
  182. return _.template(tmpl_array.join(''));
  183. },
  184. templateNewLibraryInModal: function(){
  185. tmpl_array = [];
  186. tmpl_array.push('<div id="new_library_modal">');
  187. tmpl_array.push(' <form>');
  188. tmpl_array.push(' <input type="text" name="Name" value="" placeholder="Name">');
  189. tmpl_array.push(' <input type="text" name="Description" value="" placeholder="Description">');
  190. tmpl_array.push(' <input type="text" name="Synopsis" value="" placeholder="Synopsis">');
  191. tmpl_array.push(' </form>');
  192. tmpl_array.push('</div>');
  193. return tmpl_array.join('');
  194. }
  195. });
  196. return {
  197. LibraryToolbarView: LibraryToolbarView
  198. };
  199. });