bootstrap-table-toolbar.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /**
  2. * @author: aperez <aperez@datadec.es>
  3. * @version: v1.0.0
  4. *
  5. * @update Dennis Hernández <http://djhvscf.github.io/Blog>
  6. */
  7. !function($) {
  8. 'use strict';
  9. var firstLoad = false;
  10. var firstBody = false;
  11. var sprintf = function(str) {
  12. var args = arguments,
  13. flag = true,
  14. i = 1;
  15. str = str.replace(/%s/g, function() {
  16. var arg = args[i++];
  17. if (typeof arg === 'undefined') {
  18. flag = false;
  19. return '';
  20. }
  21. return arg;
  22. });
  23. return flag ? str : '';
  24. };
  25. var showAvdSearch = function(pColumns, pObjSearch, searchText) {
  26. if (!$("#avdSearchModal").hasClass("modal")) {
  27. var vModal = "<div id=\"avdSearchModal\" class=\"modal fade\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"mySmallModalLabel\" aria-hidden=\"true\">";
  28. vModal += "<div class=\"modal-dialog modal-xs\">";
  29. vModal += " <div class=\"modal-content\">";
  30. vModal += " <div class=\"modal-header\">";
  31. vModal += " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\" >&times;</button>";
  32. vModal += " <h4 class=\"modal-title\">Buscador Avanzado</h4>";
  33. vModal += " </div>";
  34. vModal += " <div class=\"modal-body modal-body-custom\">";
  35. vModal += " <div class=\"container-fluid\" id=\"avdSearchModalContent\" style=\"padding-right: 0px;padding-left: 0px;\" >";
  36. vModal += " </div>";
  37. vModal += " </div>";
  38. vModal += " </div>";
  39. vModal += " </div>";
  40. vModal += "</div>";
  41. $("body").append($(vModal));
  42. var vFormAvd = createFormAvd(pColumns, pObjSearch, searchText);
  43. $('#avdSearchModalContent').append(vFormAvd.join(''));
  44. $("#btnSearchAvd").click(function() {
  45. var vFormData = $("#" + pObjSearch.idForm).serializeJSON();
  46. var vText = $('#' + pObjSearch.idTable).parents('.bootstrap-table').find('.search input').val();
  47. $.extend(vFormData, {
  48. searchText: vText
  49. });
  50. var sFunctionData = JSON.stringify(vFormData);
  51. BootstrapTable.DEFAULTS.searchText = sFunctionData;
  52. //TODO: Implement the search logic
  53. //BootstrapTable.prototype.onSearch(this,$.Event('keyup'));
  54. /*********************
  55. * Here, I want to call the method onSearch.
  56. ***********************/
  57. });
  58. $("#avdSearchModal").modal();
  59. } else {
  60. $("#avdSearchModal").modal();
  61. }
  62. };
  63. var createFormAvd = function(pColumns, pObjSearch, searchText) {
  64. var htmlForm = [];
  65. htmlForm.push(sprintf('<form class="form-horizontal" id="%s" action="%s" >', pObjSearch.idForm, pObjSearch.actionForm));
  66. for (var i in pColumns) {
  67. var vObjCol = pColumns[i];
  68. if (!vObjCol.checkbox && vObjCol.visible && vObjCol.searchable) {
  69. htmlForm.push('<div class="form-group">');
  70. htmlForm.push(sprintf('<label class="col-sm-4 control-label">%s</label>', vObjCol.title));
  71. htmlForm.push('<div class="col-sm-6">');
  72. htmlForm.push(sprintf('<input type="text" class="form-control input-md" name="%s" placeholder="%s">', vObjCol.title, vObjCol.title));
  73. htmlForm.push('</div>');
  74. htmlForm.push('</div>');
  75. }
  76. }
  77. htmlForm.push('<div class="form-group">');
  78. htmlForm.push('<div class="col-sm-offset-9 col-sm-3">');
  79. htmlForm.push(sprintf('<button type="button" id="btnSearchAvd" class="btn btn-default" >%s</button>', searchText));
  80. htmlForm.push('</div>');
  81. htmlForm.push('</div>');
  82. htmlForm.push('</form>');
  83. return htmlForm;
  84. };
  85. $.extend($.fn.bootstrapTable.defaults, {
  86. advancedSearch: undefined,
  87. idTable: undefined
  88. });
  89. $.extend($.fn.bootstrapTable.defaults.icons, {
  90. advancedSearch: 'glyphicon-chevron-down'
  91. });
  92. $.extend($.fn.bootstrapTable.locales, {
  93. formatAdvancedSearch: function() {
  94. return 'Advanced search';
  95. },
  96. formatAdvancedSearchButton: function() {
  97. return "Search";
  98. }
  99. });
  100. $.extend($.fn.bootstrapTable.defaults, $.fn.bootstrapTable.locales);
  101. var BootstrapTable = $.fn.bootstrapTable.Constructor,
  102. _initToolbar = BootstrapTable.prototype.initToolbar,
  103. _load = BootstrapTable.prototype.load;
  104. BootstrapTable.prototype.initToolbar = function() {
  105. _initToolbar.apply(this, Array.prototype.slice.apply(arguments));
  106. var that = this,
  107. htmlBtns = [],
  108. $search,
  109. advSearch = {
  110. active: false,
  111. idTable: '',
  112. idForm: '',
  113. actionForm: ''
  114. };
  115. if (typeof this.options.advancedSearch !== 'undefined') {
  116. advSearch = this.options.advancedSearch;
  117. }
  118. if (advSearch.active) {
  119. htmlBtns.push(sprintf('<div class="btn-group" role="group"><button class="btn btn-default' + (that.options.iconSize === undefined ? '' : ' btn-' + that.options.iconSize) + '" type="button" name="advancedSearch" title="%s">',
  120. that.options.formatAdvancedSearch()),
  121. sprintf('<i class="%s %s"></i>', that.options.iconsPrefix, that.options.icons.advancedSearch),
  122. '</button></div>');
  123. // TODO: For now need the showColumns set to true. CHANGE this!
  124. that.$toolbar.find('.columns').prepend(htmlBtns.join(''));
  125. that.$toolbar.find('button[name="advancedSearch"]')
  126. .off('click').on('click', function() {
  127. showAvdSearch(that.options.columns, advSearch, that.options.formatAdvancedSearchButton());
  128. });
  129. }
  130. if (that.options.searchTimeOut === -1) {
  131. $search = that.$toolbar.find('.search input');
  132. $search.off('keyup').on('keyup', function(event) {
  133. var text = $.trim($(event.currentTarget).val());
  134. //TODO: Check this logic
  135. if (event.which === 13) {
  136. that.onSearch(event);
  137. }
  138. });
  139. }
  140. };
  141. BootstrapTable.prototype.load = function(data) {
  142. _load.apply(this, Array.prototype.slice.apply(arguments));
  143. if (typeof this.options.idTable === 'undefined') {
  144. //TODO: Should we show a error message?
  145. return;
  146. } else {
  147. if (!firstLoad) {
  148. var height = parseInt($(".bootstrap-table").height());
  149. height += 10;
  150. $("#" + this.options.idTable).bootstrapTable("resetView", {height: height});
  151. firstLoad = true;
  152. }
  153. }
  154. };
  155. }(jQuery);