corrade-nucleus-nucleons – Blame information for rev 20
?pathlinks?
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 | })(); |