corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 // JavaScript source code
2 (function () {
3 if (typeof angular === 'undefined') {
4 return;
5 }
6 angular.module('bsTable', [])
7 .constant('uiBsTables', {bsTables: {}})
8 .directive('bsTableControl', ['uiBsTables', function (uiBsTables) {
9 var CONTAINER_SELECTOR = '.bootstrap-table';
10 var SCROLLABLE_SELECTOR = '.fixed-table-body';
11 var SEARCH_SELECTOR = '.search input';
12 var bsTables = uiBsTables.bsTables;
13 function getBsTable (el) {
14 var result;
15 $.each(bsTables, function (id, bsTable) {
16 if (!bsTable.$el.closest(CONTAINER_SELECTOR).has(el).length) return;
17 result = bsTable;
18 return true;
19 });
20 return result;
21 }
22  
23 $(window).resize(function () {
24 $.each(bsTables, function (id, bsTable) {
25 bsTable.$el.bootstrapTable('resetView');
26 });
27 });
28 function onScroll () {
29 var bsTable = this;
30 var state = bsTable.$s.bsTableControl.state;
31 bsTable.$s.$applyAsync(function () {
32 state.scroll = bsTable.$el.bootstrapTable('getScrollPosition');
33 });
34 }
35 $(document)
36 .on('post-header.bs.table', CONTAINER_SELECTOR+' table', function (evt) { // bootstrap-table calls .off('scroll') in initHeader so reattach here
37 var bsTable = getBsTable(evt.target);
38 if (!bsTable) return;
39 bsTable.$el
40 .closest(CONTAINER_SELECTOR)
41 .find(SCROLLABLE_SELECTOR)
42 .on('scroll', onScroll.bind(bsTable));
43 })
44 .on('sort.bs.table', CONTAINER_SELECTOR+' table', function (evt, sortName, sortOrder) {
45 var bsTable = getBsTable(evt.target);
46 if (!bsTable) return;
47 var state = bsTable.$s.bsTableControl.state;
48 bsTable.$s.$applyAsync(function () {
49 state.sortName = sortName;
50 state.sortOrder = sortOrder;
51 });
52 })
53 .on('page-change.bs.table', CONTAINER_SELECTOR+' table', function (evt, pageNumber, pageSize) {
54 var bsTable = getBsTable(evt.target);
55 if (!bsTable) return;
56 var state = bsTable.$s.bsTableControl.state;
57 bsTable.$s.$applyAsync(function () {
58 state.pageNumber = pageNumber;
59 state.pageSize = pageSize;
60 });
61 })
62 .on('search.bs.table', CONTAINER_SELECTOR+' table', function (evt, searchText) {
63 var bsTable = getBsTable(evt.target);
64 if (!bsTable) return;
65 var state = bsTable.$s.bsTableControl.state;
66 bsTable.$s.$applyAsync(function () {
67 state.searchText = searchText;
68 });
69 })
70 .on('focus blur', CONTAINER_SELECTOR+' '+SEARCH_SELECTOR, function (evt) {
71 var bsTable = getBsTable(evt.target);
72 if (!bsTable) return;
73 var state = bsTable.$s.bsTableControl.state;
74 bsTable.$s.$applyAsync(function () {
75 state.searchHasFocus = $(evt.target).is(':focus');
76 });
77 });
78  
79 return {
80 restrict: 'EA',
81 scope: {bsTableControl: '='},
82 link: function ($s, $el) {
83 var bsTable = bsTables[$s.$id] = {$s: $s, $el: $el};
84 $s.instantiated = false;
85 $s.$watch('bsTableControl.options', function (options) {
86 if (!options) options = $s.bsTableControl.options = {};
87 var state = $s.bsTableControl.state || {};
88  
89 if ($s.instantiated) $el.bootstrapTable('destroy');
90 $el.bootstrapTable(angular.extend(angular.copy(options), state));
91 $s.instantiated = true;
92  
93 // Update the UI for state that isn't settable via options
94 if ('scroll' in state) $el.bootstrapTable('scrollTo', state.scroll);
95 if ('searchHasFocus' in state) $el.closest(CONTAINER_SELECTOR).find(SEARCH_SELECTOR).focus(); // $el gets detached so have to recompute whole chain
96 }, true);
97 $s.$watch('bsTableControl.state', function (state) {
98 if (!state) state = $s.bsTableControl.state = {};
99 $el.trigger('directive-updated.bs.table', [state]);
100 }, true);
101 $s.$on('$destroy', function () {
102 delete bsTables[$s.$id];
103 });
104 }
105 };
106 }])
107 })();