bootstrap-table-angular.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. // JavaScript source code
  2. (function () {
  3. angular.module('bsTable', []).directive('bsTableControl', function () {
  4. var SEARCH_SELECTOR = '.search input';
  5. var CONTAINER_SELECTOR = '.bootstrap-table';
  6. return {
  7. restrict: 'EA',
  8. scope: {options: '='},
  9. link: function ($s, $el) {
  10. var scroll;
  11. var options;
  12. $el
  13. .on('sort.bs.table', function (evt, sortName, sortOrder) {
  14. if (!options) return;
  15. options.sortName = sortName;
  16. options.sortOrder = sortOrder;
  17. })
  18. .on('page-change.bs.table', function (evt, pageNumber, pageSize) {
  19. if (!options) return;
  20. options.pageNumber = pageNumber;
  21. options.pageSize = pageSize;
  22. })
  23. .on('search.bs.table', function (evt, searchText) {
  24. if (!options) return;
  25. options.searchText = searchText;
  26. });
  27. $s.$watch('options', function (newOptions) {
  28. if (!newOptions) return;
  29. var searchHasFocus = $el.closest(CONTAINER_SELECTOR).find(SEARCH_SELECTOR).is(':focus');
  30. if (options) {
  31. scroll = $el.bootstrapTable('getScrollPosition');
  32. $el.bootstrapTable('destroy');
  33. }
  34. newOptions = angular.copy(newOptions);
  35. if (options) angular.forEach(['sortName', 'sortOrder', 'pageNumber', 'pageSize', 'searchText'], function (key) {
  36. if (key in options) newOptions[key] = options[key];
  37. });
  38. options = newOptions;
  39. $el.bootstrapTable(options);
  40. if (scroll) $el.bootstrapTable('scrollTo', scroll);
  41. if (searchHasFocus) $el.closest(CONTAINER_SELECTOR).find(SEARCH_SELECTOR).focus(); // $el gets detached so have to recompute whole chain
  42. }, true);
  43. $(window).resize(function () {
  44. if (options) $el.bootstrapTable('resetView');
  45. });
  46. }
  47. };
  48. })
  49. })();