Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

205 righe
5.7 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. // MIT License. See license.txt
  3. // todo
  4. // - basic search in documents
  5. wn.pages['finder'].onload = function(wrapper) {
  6. wn.ui.make_app_page({
  7. parent: wrapper,
  8. title: wn._('Finder'),
  9. single_column: true
  10. });
  11. wrapper.appframe.add_module_icon("Finder");
  12. var $body = $(wrapper).find(".layout-main").addClass("row");
  13. var start = 0,
  14. doctype = null,
  15. module = null;
  16. var get_col = function(colsize, icon, label, panel_class) {
  17. return $('<div class="col-sm-'+colsize+'">\
  18. <div class="panel panel-'+panel_class+'">\
  19. <div class="panel-heading"><i class="icon-'+icon+'"></i> \
  20. <span class="col-heading">'+label+'</span>\
  21. <span class="pull-right"></span>\
  22. </div>\
  23. <div class="list-group">\
  24. </div>\
  25. </div>\
  26. </div>').appendTo($body);
  27. }
  28. var $modules = get_col(3, "briefcase", wn._("Modules"), "default").find(".list-group");
  29. var $doctypes = get_col(3, "folder-close", wn._("Document Types"), "default").find(".list-group");
  30. var $list = get_col(6, "file", wn._("Documents"), "info");
  31. var $doctype_label = $list.find(".col-heading")
  32. var $list_link = $list.find(".panel-heading .pull-right")
  33. .append('<a class="list-link"><i class="icon-list"></i></a>')
  34. .find(".list-link")
  35. .click(function() { wn.set_route("List", doctype); })
  36. .toggle(false);
  37. var $new_link = $list.find(".panel-heading .pull-right")
  38. .append(' <a class="new-link"><i class="icon-plus"></i></a>')
  39. .find(".new-link")
  40. .click(function() { new_doc(doctype); })
  41. .toggle(false);
  42. $list = $list.find(".list-group");
  43. var reset_module = function() {
  44. $doctypes.empty();
  45. $('<div class="list-group-item row-select text-muted text-center">'+
  46. wn._("Select Module")+'</div>').appendTo($doctypes);
  47. module = null;
  48. reset_doctype();
  49. }
  50. var reset_doctype = function() {
  51. $list.empty();
  52. $new_link.toggle(false);
  53. $list_link.toggle(false);
  54. $doctype_label.html(wn._("Documents"));
  55. $('<div class="list-group-item row-select text-muted text-center">'+
  56. wn._("Select Document Type")+'</div>').appendTo($list);
  57. start=0;
  58. }
  59. reset_module();
  60. // modules
  61. $.each(keys(wn.boot.notification_info.module_doctypes).sort(), function(i, module) {
  62. $($r('<a class="list-group-item row-select module-link" \
  63. data-module="%(module)s">%(module)s\
  64. <span class="pull-right"><i class="icon-chevron-right"></i></span></a>',
  65. {module: module})).appendTo($modules);
  66. });
  67. $modules.on("click", ".module-link", function() {
  68. // list doctypes
  69. reset_module();
  70. // select module
  71. $modules.find(".list-group-item.active").removeClass("active");
  72. $(this).addClass("active");
  73. // show doctypes
  74. $doctypes.find(".row-select").remove();
  75. module = $(this).attr("data-module");
  76. $.each(wn.boot.notification_info.module_doctypes[module].sort(), function(i, doctype) {
  77. $($r('<a class="list-group-item doctype-link" \
  78. data-doctype="%(doctype)s">%(doctype)s\
  79. <span class="pull-right"><i class="icon-chevron-right"></i></a>',
  80. {doctype: doctype})).appendTo($doctypes)
  81. });
  82. });
  83. $doctypes.on("click", ".doctype-link", function() {
  84. reset_doctype();
  85. // select doctype
  86. $doctypes.find(".list-group-item.active").removeClass("active");
  87. $(this).addClass("active");
  88. doctype = $(this).attr("data-doctype");
  89. // label
  90. $doctype_label.html(wn._(doctype));
  91. // new link
  92. $new_link.toggle(!!wn.model.can_create(doctype));
  93. $list_link.toggle(!!wn.model.can_read(doctype));
  94. render_list();
  95. })
  96. $list.on("click", ".btn-more", function() {
  97. start = start+20;
  98. render_list();
  99. });
  100. $list.on("click", ".btn-search", function() {
  101. filter_list();
  102. })
  103. $list.on("keypress", ".input-search", function(e) {
  104. if(e.which===13)
  105. filter_list();
  106. })
  107. var filter_list = function() {
  108. start = 0;
  109. $list.find(".document-item, .row-empty").remove();
  110. render_list();
  111. }
  112. var render_list = function() {
  113. // remove more btn if any
  114. $list.find(".row-more, .row-select").remove();
  115. // loading indicator...
  116. add_list_row('<i class="icon-refresh icon-spin text-muted"></i>')
  117. .addClass("row-loading text-center")
  118. var args = {
  119. doctype: doctype,
  120. fields: ["name", "modified", "owner"],
  121. limit_start: start || 0,
  122. limit_page_length: 20
  123. };
  124. if($(".input-search").val()) {
  125. args.filters = [[doctype, "name", "like", "%" + $(".input-search").val() + "%"]]
  126. }
  127. wn.call({
  128. method: "webnotes.widgets.reportview.get",
  129. args: args,
  130. callback: function(r) {
  131. $list.find(".row-loading").remove();
  132. if(!$list.find(".input-search").length) {
  133. // make search
  134. $('<div class="list-group-item">\
  135. <div class="input-group">\
  136. <input type="text" class="form-control input-search">\
  137. <span class="input-group-btn">\
  138. <button class="btn btn-default btn-search" type="button">\
  139. <i class="icon-search"></i></button>\
  140. </span>\
  141. </div>\
  142. </div>').appendTo($list);
  143. }
  144. if(r.message.values) {
  145. $.each(r.message.values, function(i, v) {
  146. $($r('<a class="list-group-item document-item" \
  147. data-name="%(name)s" href="#Form/%(doctype)s/%(name)s">%(name)s\
  148. <span class="text-muted text-small">%(owner)s</span>\
  149. <span class="text-muted pull-right">%(modified)s</span></a>', {
  150. doctype: doctype,
  151. name: v[1],
  152. owner: v[0],
  153. modified: comment_when(v[2])
  154. })).appendTo($list);
  155. })
  156. if(r.message.values.length==20) {
  157. add_list_row('More...').addClass("row-more text-center btn-more text-muted");
  158. }
  159. } else {
  160. add_list_row('<i class="icon-ban-circle"></i>').addClass("text-center text-muted row-empty");
  161. }
  162. }
  163. })
  164. }
  165. var add_list_row = function(html) {
  166. return $('<a class="list-group-item">'+html+'</a>').appendTo($list);
  167. }
  168. }