ose-app 0.2.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. ose_app/AppModule.py +98 -0
  2. ose_app/OntologyDataStore.py +464 -0
  3. ose_app/PermissionManager.py +78 -0
  4. ose_app/SpreadsheetSearcher.py +197 -0
  5. ose_app/__init__.py +130 -0
  6. ose_app/app.py +10 -0
  7. ose_app/constants.py +1 -0
  8. ose_app/custom_json.py +23 -0
  9. ose_app/default_config.py +39 -0
  10. ose_app/gh.py +60 -0
  11. ose_app/guards/__init__.py +0 -0
  12. ose_app/guards/verify_login.py +20 -0
  13. ose_app/guards/with_permission.py +54 -0
  14. ose_app/jinja_extensions/__init__.py +42 -0
  15. ose_app/routes/__init__.py +24 -0
  16. ose_app/routes/admin.py +108 -0
  17. ose_app/routes/api/__init__.py +23 -0
  18. ose_app/routes/api/edit.py +162 -0
  19. ose_app/routes/api/external.py +198 -0
  20. ose_app/routes/api/plugins.py +22 -0
  21. ose_app/routes/api/release.py +380 -0
  22. ose_app/routes/api/repos.py +55 -0
  23. ose_app/routes/api/scripts.py +49 -0
  24. ose_app/routes/api/search.py +19 -0
  25. ose_app/routes/api/settings.py +115 -0
  26. ose_app/routes/api/validate.py +264 -0
  27. ose_app/routes/api/visualise.py +228 -0
  28. ose_app/routes/auth.py +44 -0
  29. ose_app/routes/edit.py +690 -0
  30. ose_app/routes/main.py +100 -0
  31. ose_app/routes/search.py +42 -0
  32. ose_app/routes/status.py +10 -0
  33. ose_app/routes/visualize.py +108 -0
  34. ose_app/static/addicto.release.json +129 -0
  35. ose_app/static/bcio.release.json +321 -0
  36. ose_app/static/example.json +134 -0
  37. ose_app/static/excel-bootstrap-table-filter-bundle.js +326 -0
  38. ose_app/static/excel-bootstrap-table-filter-bundle.js.map +1 -0
  39. ose_app/static/excel-bootstrap-table-filter-bundle.min.js +2 -0
  40. ose_app/static/excel-bootstrap-table-filter-bundle.min.js.map +1 -0
  41. ose_app/static/excel-bootstrap-table-filter-style.css +78 -0
  42. ose_app/static/gmho.release.json +139 -0
  43. ose_app/static/js/admin.js +2 -0
  44. ose_app/static/js/admin.js.map +1 -0
  45. ose_app/static/js/assets/CollapsibleCard.css +1 -0
  46. ose_app/static/js/assets/editor.css +1 -0
  47. ose_app/static/js/assets/release.css +1 -0
  48. ose_app/static/js/assets/settings.css +1 -0
  49. ose_app/static/js/assets/visualise.css +1 -0
  50. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js +2 -0
  51. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-BDr_frBe.js.map +1 -0
  52. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js +2 -0
  53. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-CgGO-ddH-MonxH8xj.js.map +1 -0
  54. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js +2 -0
  55. ose_app/static/js/chunks/BToastOrchestrator.vue_vue_type_style_index_0_lang-DKAZyKKr-DTksKjtf.js.map +1 -0
  56. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js +2 -0
  57. ose_app/static/js/chunks/CollapsibleCard-BQR8R54V.js.map +1 -0
  58. ose_app/static/js/chunks/CollapsibleCard-DgwkQKDg.js +2 -0
  59. ose_app/static/js/chunks/CollapsibleCard-DgwkQKDg.js.map +1 -0
  60. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js +2 -0
  61. ose_app/static/js/chunks/CollapsibleCard-DoX0kPCZ.js.map +1 -0
  62. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js +43 -0
  63. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-CBzsmnqW.js.map +1 -0
  64. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js +43 -0
  65. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-EcINi797.js.map +1 -0
  66. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js +43 -0
  67. ose_app/static/js/chunks/Diagnostic.vue_vue_type_script_setup_true_lang-bumDOBqD.js.map +1 -0
  68. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js +2 -0
  69. ose_app/static/js/chunks/_plugin-vue_export-helper-DlAUqK2U.js.map +1 -0
  70. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js +2 -0
  71. ose_app/static/js/chunks/bootbox-D3SJ_Fwv.js.map +1 -0
  72. ose_app/static/js/chunks/constants-CzBHF1EN.js +2 -0
  73. ose_app/static/js/chunks/constants-CzBHF1EN.js.map +1 -0
  74. ose_app/static/js/chunks/constants-DL6Hx3V0.js +2 -0
  75. ose_app/static/js/chunks/constants-DL6Hx3V0.js.map +1 -0
  76. ose_app/static/js/chunks/constants-DPgwRV4l.js +2 -0
  77. ose_app/static/js/chunks/constants-DPgwRV4l.js.map +1 -0
  78. ose_app/static/js/chunks/filter-Bx-PU1OL.js +18 -0
  79. ose_app/static/js/chunks/filter-Bx-PU1OL.js.map +1 -0
  80. ose_app/static/js/chunks/filter-CdAXK93b.js +18 -0
  81. ose_app/static/js/chunks/filter-CdAXK93b.js.map +1 -0
  82. ose_app/static/js/chunks/filter-CiYqP1_r.js +2 -0
  83. ose_app/static/js/chunks/filter-CiYqP1_r.js.map +1 -0
  84. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js +2 -0
  85. ose_app/static/js/chunks/index-sLCKmIWG-B5BYNF2N.js.map +1 -0
  86. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js +9 -0
  87. ose_app/static/js/chunks/index-sLCKmIWG-Cb9lQq-c.js.map +1 -0
  88. ose_app/static/js/chunks/index-sLCKmIWG-umQeu_-w.js +3 -0
  89. ose_app/static/js/chunks/index-sLCKmIWG-umQeu_-w.js.map +1 -0
  90. ose_app/static/js/editor.js +36 -0
  91. ose_app/static/js/editor.js.map +1 -0
  92. ose_app/static/js/release.js +6 -0
  93. ose_app/static/js/release.js.map +1 -0
  94. ose_app/static/js/settings.js +2 -0
  95. ose_app/static/js/settings.js.map +1 -0
  96. ose_app/static/js/visualise.js +3 -0
  97. ose_app/static/js/visualise.js.map +1 -0
  98. ose_app/static/main.css +1 -0
  99. ose_app/static/main.css.map +7 -0
  100. ose_app/static/main.scss +147 -0
  101. ose_app/static/mindmup-editabletable.js +131 -0
  102. ose_app/static/schema/release_script.json +215 -0
  103. ose_app/static/schema/req_body_edit.json +35 -0
  104. ose_app/static/schema/req_body_guess_parent.json +38 -0
  105. ose_app/static/schema/req_body_import.json +47 -0
  106. ose_app/static/schema/req_body_release_start.json +9 -0
  107. ose_app/static/schema/req_body_visualise.json +18 -0
  108. ose_app/static/test.dot +190 -0
  109. ose_app/static/workflows/externals.yaml.jinja2 +44 -0
  110. ose_app/templates/access_show_visualisation_for_ids.html +120 -0
  111. ose_app/templates/admin/dashboard.html +18 -0
  112. ose_app/templates/admin/rebuild_index.html +85 -0
  113. ose_app/templates/admin/release.html +46 -0
  114. ose_app/templates/admin/settings.html +23 -0
  115. ose_app/templates/base.html +151 -0
  116. ose_app/templates/edit.html +21 -0
  117. ose_app/templates/edit_external.html +491 -0
  118. ose_app/templates/forbidden.html +9 -0
  119. ose_app/templates/index.html +33 -0
  120. ose_app/templates/loggedout.html +21 -0
  121. ose_app/templates/repo.html +294 -0
  122. ose_app/templates/testgeneratedbyapi.html +294 -0
  123. ose_app/templates/visualise.html +17 -0
  124. ose_app-0.2.5.dist-info/METADATA +27 -0
  125. ose_app-0.2.5.dist-info/RECORD +127 -0
  126. ose_app-0.2.5.dist-info/WHEEL +5 -0
  127. ose_app-0.2.5.dist-info/top_level.txt +1 -0
@@ -0,0 +1,326 @@
1
+ (function ($$1) {
2
+ 'use strict';
3
+
4
+ $$1 = 'default' in $$1 ? $$1['default'] : $$1;
5
+
6
+ var FilterMenu = function () {
7
+ function FilterMenu(target, th, column, index, options) {
8
+ this.options = options;
9
+ this.th = th;
10
+ this.column = column;
11
+ this.index = index;
12
+ this.tds = target.find('tbody tr td:nth-child(' + (this.column + 1) + ')').toArray();
13
+ }
14
+ FilterMenu.prototype.initialize = function () {
15
+ this.menu = this.dropdownFilterDropdown();
16
+ this.th.appendChild(this.menu);
17
+ var $trigger = $(this.menu.children[0]);
18
+ var $content = $(this.menu.children[1]);
19
+ var $menu = $(this.menu);
20
+ $trigger.click(function () {
21
+ return $content.toggle();
22
+ });
23
+ $(document).click(function (el) {
24
+ if (!$menu.is(el.target) && $menu.has(el.target).length === 0) {
25
+ $content.hide();
26
+ }
27
+ });
28
+ };
29
+ FilterMenu.prototype.searchToggle = function (value) {
30
+ if (this.selectAllCheckbox instanceof HTMLInputElement) this.selectAllCheckbox.checked = false;
31
+ if (value.length === 0) {
32
+ this.toggleAll(true);
33
+ if (this.selectAllCheckbox instanceof HTMLInputElement) this.selectAllCheckbox.checked = true;
34
+ return;
35
+ }
36
+ this.toggleAll(false);
37
+ this.inputs.filter(function (input) {
38
+ return input.value.toLowerCase().indexOf(value.toLowerCase()) > -1;
39
+ }).forEach(function (input) {
40
+ input.checked = true;
41
+ });
42
+ };
43
+ FilterMenu.prototype.updateSelectAll = function () {
44
+ if (this.selectAllCheckbox instanceof HTMLInputElement) {
45
+ $(this.searchFilter).val('');
46
+ this.selectAllCheckbox.checked = this.inputs.length === this.inputs.filter(function (input) {
47
+ return input.checked;
48
+ }).length;
49
+ }
50
+ };
51
+ FilterMenu.prototype.selectAllUpdate = function (checked) {
52
+ $(this.searchFilter).val('');
53
+ this.toggleAll(checked);
54
+ };
55
+ FilterMenu.prototype.toggleAll = function (checked) {
56
+ for (var i = 0; i < this.inputs.length; i++) {
57
+ var input = this.inputs[i];
58
+ if (input instanceof HTMLInputElement) input.checked = checked;
59
+ }
60
+ };
61
+ FilterMenu.prototype.dropdownFilterItem = function (td, self) {
62
+ var value = td.innerText;
63
+ var dropdownFilterItem = document.createElement('div');
64
+ dropdownFilterItem.className = 'dropdown-filter-item';
65
+ var input = document.createElement('input');
66
+ input.type = 'checkbox';
67
+ input.value = value.trim().replace(/ +(?= )/g, '');
68
+ input.setAttribute('checked', 'checked');
69
+ input.className = 'dropdown-filter-menu-item item';
70
+ input.setAttribute('data-column', self.column.toString());
71
+ input.setAttribute('data-index', self.index.toString());
72
+ dropdownFilterItem.appendChild(input);
73
+ dropdownFilterItem.innerHTML = dropdownFilterItem.innerHTML.trim() + ' ' + value;
74
+ return dropdownFilterItem;
75
+ };
76
+ FilterMenu.prototype.dropdownFilterItemSelectAll = function () {
77
+ var value = this.options.captions.select_all;
78
+ var dropdownFilterItemSelectAll = document.createElement('div');
79
+ dropdownFilterItemSelectAll.className = 'dropdown-filter-item';
80
+ var input = document.createElement('input');
81
+ input.type = 'checkbox';
82
+ input.value = this.options.captions.select_all;
83
+ input.setAttribute('checked', 'checked');
84
+ input.className = 'dropdown-filter-menu-item select-all';
85
+ input.setAttribute('data-column', this.column.toString());
86
+ input.setAttribute('data-index', this.index.toString());
87
+ dropdownFilterItemSelectAll.appendChild(input);
88
+ dropdownFilterItemSelectAll.innerHTML = dropdownFilterItemSelectAll.innerHTML + ' ' + value;
89
+ return dropdownFilterItemSelectAll;
90
+ };
91
+ FilterMenu.prototype.dropdownFilterSearch = function () {
92
+ var dropdownFilterItem = document.createElement('div');
93
+ dropdownFilterItem.className = 'dropdown-filter-search';
94
+ var input = document.createElement('input');
95
+ input.type = 'text';
96
+ input.className = 'dropdown-filter-menu-search form-control';
97
+ input.setAttribute('data-column', this.column.toString());
98
+ input.setAttribute('data-index', this.index.toString());
99
+ input.setAttribute('placeholder', this.options.captions.search);
100
+ dropdownFilterItem.appendChild(input);
101
+ return dropdownFilterItem;
102
+ };
103
+ FilterMenu.prototype.dropdownFilterSort = function (direction) {
104
+ var dropdownFilterItem = document.createElement('div');
105
+ dropdownFilterItem.className = 'dropdown-filter-sort';
106
+ var span = document.createElement('span');
107
+ span.className = direction.toLowerCase().split(' ').join('-');
108
+ span.setAttribute('data-column', this.column.toString());
109
+ span.setAttribute('data-index', this.index.toString());
110
+ span.innerText = direction;
111
+ dropdownFilterItem.appendChild(span);
112
+ return dropdownFilterItem;
113
+ };
114
+ FilterMenu.prototype.dropdownFilterContent = function () {
115
+ var _this = this;
116
+ var self = this;
117
+ var dropdownFilterContent = document.createElement('div');
118
+ dropdownFilterContent.className = 'dropdown-filter-content';
119
+ var innerDivs = this.tds.reduce(function (arr, el) {
120
+ var values = arr.map(function (el) {
121
+ return el.innerText.trim();
122
+ });
123
+ if (values.indexOf(el.innerText.trim()) < 0) arr.push(el);
124
+ return arr;
125
+ }, []).sort(function (a, b) {
126
+ var A = a.innerText.toLowerCase();
127
+ var B = b.innerText.toLowerCase();
128
+ if (!isNaN(Number(A)) && !isNaN(Number(B))) {
129
+ if (Number(A) < Number(B)) return -1;
130
+ if (Number(A) > Number(B)) return 1;
131
+ } else {
132
+ if (A < B) return -1;
133
+ if (A > B) return 1;
134
+ }
135
+ return 0;
136
+ }).map(function (td) {
137
+ return _this.dropdownFilterItem(td, self);
138
+ });
139
+ this.inputs = innerDivs.map(function (div) {
140
+ return div.firstElementChild;
141
+ });
142
+ var selectAllCheckboxDiv = this.dropdownFilterItemSelectAll();
143
+ this.selectAllCheckbox = selectAllCheckboxDiv.firstElementChild;
144
+ innerDivs.unshift(selectAllCheckboxDiv);
145
+ var searchFilterDiv = this.dropdownFilterSearch();
146
+ this.searchFilter = searchFilterDiv.firstElementChild;
147
+ var outerDiv = innerDivs.reduce(function (outerDiv, innerDiv) {
148
+ outerDiv.appendChild(innerDiv);
149
+ return outerDiv;
150
+ }, document.createElement('div'));
151
+ outerDiv.className = 'checkbox-container';
152
+ var elements = [];
153
+ if (this.options.sort) elements = elements.concat([this.dropdownFilterSort(this.options.captions.a_to_z), this.dropdownFilterSort(this.options.captions.z_to_a)]);
154
+ if (this.options.search) elements.push(searchFilterDiv);
155
+ return elements.concat(outerDiv).reduce(function (html, el) {
156
+ html.appendChild(el);
157
+ return html;
158
+ }, dropdownFilterContent);
159
+ };
160
+ FilterMenu.prototype.dropdownFilterDropdown = function () {
161
+ var dropdownFilterDropdown = document.createElement('div');
162
+ dropdownFilterDropdown.className = 'dropdown-filter-dropdown';
163
+ var arrow = document.createElement('span');
164
+ arrow.className = 'glyphicon glyphicon-arrow-down dropdown-filter-icon';
165
+ var icon = document.createElement('i');
166
+ icon.className = 'arrow-down';
167
+ arrow.appendChild(icon);
168
+ dropdownFilterDropdown.appendChild(arrow);
169
+ dropdownFilterDropdown.appendChild(this.dropdownFilterContent());
170
+ if ($(this.th).hasClass('no-sort')) {
171
+ $(dropdownFilterDropdown).find('.dropdown-filter-sort').remove();
172
+ }
173
+ if ($(this.th).hasClass('no-filter')) {
174
+ $(dropdownFilterDropdown).find('.checkbox-container').remove();
175
+ }
176
+ if ($(this.th).hasClass('no-search')) {
177
+ $(dropdownFilterDropdown).find('.dropdown-filter-search').remove();
178
+ }
179
+ return dropdownFilterDropdown;
180
+ };
181
+ return FilterMenu;
182
+ }();
183
+
184
+ var FilterCollection = function () {
185
+ function FilterCollection(target, options) {
186
+ this.target = target;
187
+ this.options = options;
188
+ this.ths = target.find('th' + options.columnSelector).toArray();
189
+ this.filterMenus = this.ths.map(function (th, index) {
190
+ var column = $(th).index();
191
+ return new FilterMenu(target, th, column, index, options);
192
+ });
193
+ this.rows = target.find('tbody').find('tr').toArray();
194
+ this.table = target.get(0);
195
+ }
196
+ FilterCollection.prototype.initialize = function () {
197
+ this.filterMenus.forEach(function (filterMenu) {
198
+ filterMenu.initialize();
199
+ });
200
+ this.bindCheckboxes();
201
+ this.bindSelectAllCheckboxes();
202
+ this.bindSort();
203
+ this.bindSearch();
204
+ };
205
+ FilterCollection.prototype.bindCheckboxes = function () {
206
+ var filterMenus = this.filterMenus;
207
+ var rows = this.rows;
208
+ var ths = this.ths;
209
+ var updateRowVisibility = this.updateRowVisibility;
210
+ this.target.find('.dropdown-filter-menu-item.item').change(function () {
211
+ var index = $(this).data('index');
212
+ var value = $(this).val();
213
+ filterMenus[index].updateSelectAll();
214
+ updateRowVisibility(filterMenus, rows, ths);
215
+ });
216
+ };
217
+ FilterCollection.prototype.bindSelectAllCheckboxes = function () {
218
+ var filterMenus = this.filterMenus;
219
+ var rows = this.rows;
220
+ var ths = this.ths;
221
+ var updateRowVisibility = this.updateRowVisibility;
222
+ this.target.find('.dropdown-filter-menu-item.select-all').change(function () {
223
+ var index = $(this).data('index');
224
+ var value = this.checked;
225
+ filterMenus[index].selectAllUpdate(value);
226
+ updateRowVisibility(filterMenus, rows, ths);
227
+ });
228
+ };
229
+ FilterCollection.prototype.bindSort = function () {
230
+ var filterMenus = this.filterMenus;
231
+ var rows = this.rows;
232
+ var ths = this.ths;
233
+ var sort = this.sort;
234
+ var table = this.table;
235
+ var options = this.options;
236
+ var updateRowVisibility = this.updateRowVisibility;
237
+ this.target.find('.dropdown-filter-sort').click(function () {
238
+ var $sortElement = $(this).find('span');
239
+ var column = $sortElement.data('column');
240
+ var order = $sortElement.attr('class');
241
+ sort(column, order, table, options);
242
+ updateRowVisibility(filterMenus, rows, ths);
243
+ });
244
+ };
245
+ FilterCollection.prototype.bindSearch = function () {
246
+ var filterMenus = this.filterMenus;
247
+ var rows = this.rows;
248
+ var ths = this.ths;
249
+ var updateRowVisibility = this.updateRowVisibility;
250
+ this.target.find('.dropdown-filter-search').keyup(function () {
251
+ var $input = $(this).find('input');
252
+ var index = $input.data('index');
253
+ var value = $input.val();
254
+ filterMenus[index].searchToggle(value);
255
+ updateRowVisibility(filterMenus, rows, ths);
256
+ });
257
+ };
258
+ FilterCollection.prototype.updateRowVisibility = function (filterMenus, rows, ths) {
259
+ var showRows = rows;
260
+ var hideRows = [];
261
+ var selectedLists = filterMenus.map(function (filterMenu) {
262
+ return {
263
+ column: filterMenu.column,
264
+ selected: filterMenu.inputs.filter(function (input) {
265
+ return input.checked;
266
+ }).map(function (input) {
267
+ return input.value.trim().replace(/ +(?= )/g, '');
268
+ })
269
+ };
270
+ });
271
+ for (var i = 0; i < rows.length; i++) {
272
+ var tds = rows[i].children;
273
+ for (var j = 0; j < selectedLists.length; j++) {
274
+ var content = tds[selectedLists[j].column].innerText.trim().replace(/ +(?= )/g, '');
275
+ if (selectedLists[j].selected.indexOf(content) === -1) {
276
+ $(rows[i]).hide();
277
+ break;
278
+ }
279
+ $(rows[i]).show();
280
+ }
281
+ }
282
+ };
283
+ FilterCollection.prototype.sort = function (column, order, table, options) {
284
+ var flip = 1;
285
+ if (order === options.captions.z_to_a.toLowerCase().split(' ').join('-')) flip = -1;
286
+ var tbody = $(table).find('tbody').get(0);
287
+ var rows = $(tbody).find('tr').get();
288
+ rows.sort(function (a, b) {
289
+ var A = a.children[column].innerText.toUpperCase();
290
+ var B = b.children[column].innerText.toUpperCase();
291
+ if (!isNaN(Number(A)) && !isNaN(Number(B))) {
292
+ if (Number(A) < Number(B)) return -1 * flip;
293
+ if (Number(A) > Number(B)) return 1 * flip;
294
+ } else {
295
+ if (A < B) return -1 * flip;
296
+ if (A > B) return 1 * flip;
297
+ }
298
+ return 0;
299
+ });
300
+ for (var i = 0; i < rows.length; i++) {
301
+ tbody.appendChild(rows[i]);
302
+ }
303
+ };
304
+ return FilterCollection;
305
+ }();
306
+
307
+ $$1.fn.excelTableFilter = function (options) {
308
+ var target = this;
309
+ options = $$1.extend({}, $$1.fn.excelTableFilter.options, options);
310
+ if (typeof options.columnSelector === 'undefined') options.columnSelector = '';
311
+ if (typeof options.sort === 'undefined') options.sort = true;
312
+ if (typeof options.search === 'undefined') options.search = true;
313
+ if (typeof options.captions === 'undefined') options.captions = {
314
+ a_to_z: 'A to Z',
315
+ z_to_a: 'Z to A',
316
+ search: 'Search',
317
+ select_all: 'Select All'
318
+ };
319
+ var filterCollection = new FilterCollection(target, options);
320
+ filterCollection.initialize();
321
+ return target;
322
+ };
323
+ $$1.fn.excelTableFilter.options = {};
324
+
325
+ }(jQuery));
326
+ //# sourceMappingURL=excel-bootstrap-table-filter-bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"excel-bootstrap-table-filter-bundle.js","sources":["../src/FilterMenu.ts","../src/FilterCollection.ts","../src/excel-bootstrap-table-filter.ts"],"sourcesContent":["export class FilterMenu {\n\n th: HTMLElement;\n tds: Array<HTMLElement>;\n column: number;\n index: number;\n menu: HTMLElement;\n inputs: Array<Element>;\n selectAllCheckbox: Element;\n searchFilter: Element;\n options: Options;\n target: JQuery;\n\n constructor (target: JQuery, th: HTMLElement, column: number, index: number, options: Options) {\n this.options = options;\n this.th = th;\n this.column = column;\n this.index = index;\n this.tds = target.find('tbody tr td:nth-child(' + (this.column + 1) + ')').toArray();\n }\n\n public initialize(): void {\n this.menu = this.dropdownFilterDropdown();\n this.th.appendChild(this.menu);\n\n // variables for click handlers\n let $trigger = $(this.menu.children[0]);\n let $content = $(this.menu.children[1]);\n let $menu = $(this.menu);\n\n // toggle hide/show when the trigger is clicked\n $trigger.click(() => $content.toggle());\n\n $(document).click(function(el) {\n // hide the content if the user clicks outside of the menu\n if (!$menu.is(el.target) && $menu.has(el.target).length === 0) {\n $content.hide();\n }\n });\n }\n\n public searchToggle(value: string): void {\n if (this.selectAllCheckbox instanceof HTMLInputElement) this.selectAllCheckbox.checked = false;\n if (value.length === 0){\n this.toggleAll(true);\n if (this.selectAllCheckbox instanceof HTMLInputElement) this.selectAllCheckbox.checked = true;\n return;\n }\n // deselect all checkboxes initially\n this.toggleAll(false);\n // select checkboxes that match the search parameter\n this.inputs.filter(function(input: HTMLInputElement) {\n return input.value.toLowerCase().indexOf(value.toLowerCase()) > -1;\n }).forEach(function(input: HTMLInputElement) {\n input.checked = true;\n });\n }\n\n\n public updateSelectAll(): void {\n if (this.selectAllCheckbox instanceof HTMLInputElement) {\n // clear search parameters, if any\n $(this.searchFilter).val('');\n // Check if all inputs are selected\n this.selectAllCheckbox.checked = (this.inputs.length === this.inputs.filter(function(input: HTMLInputElement) {\n return input.checked;\n }).length);\n }\n }\n\n public selectAllUpdate(checked: boolean): void {\n // clear search parameters, if any\n $(this.searchFilter).val('');\n this.toggleAll(checked);\n }\n\n private toggleAll(checked: boolean): void {\n // loop through all inputs and check or uncheck each\n for (var i=0; i < this.inputs.length; i++) {\n let input = this.inputs[i];\n if (input instanceof HTMLInputElement) input.checked = checked;\n }\n }\n\n private dropdownFilterItem(td: HTMLElement, self: any): HTMLElement {\n // build holder div\n let value = td.innerText;\n let dropdownFilterItem = document.createElement('div');\n dropdownFilterItem.className = 'dropdown-filter-item';\n // build input\n let input = document.createElement('input');\n input.type = 'checkbox';\n input.value = value.trim().replace(/ +(?= )/g,'');\n input.setAttribute('checked','checked');\n input.className = 'dropdown-filter-menu-item item';\n // get index of td element\n input.setAttribute('data-column', self.column.toString());\n input.setAttribute('data-index', self.index.toString());\n // append input to holding div\n dropdownFilterItem.appendChild(input);\n dropdownFilterItem.innerHTML = dropdownFilterItem.innerHTML.trim() + ' ' + value;\n return dropdownFilterItem;\n }\n\n private dropdownFilterItemSelectAll(): HTMLElement {\n // build holder div\n let value = this.options.captions.select_all;\n let dropdownFilterItemSelectAll = document.createElement('div');\n dropdownFilterItemSelectAll.className = 'dropdown-filter-item';\n // build input\n let input = document.createElement('input');\n input.type = 'checkbox';\n input.value = this.options.captions.select_all;\n input.setAttribute('checked','checked');\n input.className = 'dropdown-filter-menu-item select-all';\n input.setAttribute('data-column', this.column.toString());\n input.setAttribute('data-index', this.index.toString());\n // append input to holding div\n dropdownFilterItemSelectAll.appendChild(input);\n dropdownFilterItemSelectAll.innerHTML = dropdownFilterItemSelectAll.innerHTML + ' ' + value;\n return dropdownFilterItemSelectAll;\n }\n\n private dropdownFilterSearch(): HTMLElement {\n // build holder div\n let dropdownFilterItem = document.createElement('div');\n dropdownFilterItem.className = 'dropdown-filter-search';\n // build input\n let input = document.createElement('input');\n input.type = 'text';\n input.className = 'dropdown-filter-menu-search form-control';\n input.setAttribute('data-column', this.column.toString());\n input.setAttribute('data-index', this.index.toString());\n input.setAttribute('placeholder', this.options.captions.search);\n // append input to holding div\n dropdownFilterItem.appendChild(input);\n return dropdownFilterItem;\n }\n\n private dropdownFilterSort(direction: string): HTMLElement {\n // build holder div\n let dropdownFilterItem = document.createElement('div');\n dropdownFilterItem.className = 'dropdown-filter-sort';\n // build span\n let span = document.createElement('span');\n span.className = direction.toLowerCase().split(' ').join('-');\n span.setAttribute('data-column', this.column.toString());\n span.setAttribute('data-index', this.index.toString());\n span.innerText = direction;\n // append input to holding div\n dropdownFilterItem.appendChild(span);\n return dropdownFilterItem;\n }\n\n private dropdownFilterContent(): HTMLElement {\n let self = this;\n // build holder div\n let dropdownFilterContent = document.createElement('div');\n dropdownFilterContent.className = 'dropdown-filter-content';\n\n let innerDivs = this.tds.reduce(function(arr, el) {\n // get unique values in column\n let values = arr.map((el) => el.innerText.trim());\n if (values.indexOf(el.innerText.trim()) < 0) arr.push(el);\n // return unique values\n return arr;\n }, [])\n .sort(function(a, b) {\n // sort values for display in dropdown\n var A = a.innerText.toLowerCase();\n var B = b.innerText.toLowerCase();\n\n if (!isNaN(Number(A)) && !isNaN(Number(B))) {\n\n // handle numbers\n if(Number(A) < Number(B)) return -1;\n if(Number(A) > Number(B)) return 1;\n\n } else {\n\n // handle strings\n if(A < B) return -1;\n if(A > B) return 1;\n\n }\n //return a.innerText.toLowerCase() > b.innerText.toLowerCase() ? 1 : -1;\n return 0;\n })\n // create dropdown filter items out of each value\n .map( (td) => {\n return this.dropdownFilterItem(td, self);\n })\n\n // map inputs to instance, we will need these later\n this.inputs = innerDivs.map((div) => div.firstElementChild);\n\n // add a select all checkbox\n let selectAllCheckboxDiv = this.dropdownFilterItemSelectAll();\n // map the select all checkbox to the instance, we will need it later\n this.selectAllCheckbox = selectAllCheckboxDiv.firstElementChild;\n // the checkbox will precede the other inputs\n innerDivs.unshift(selectAllCheckboxDiv);\n\n let searchFilterDiv = this.dropdownFilterSearch();\n this.searchFilter = searchFilterDiv.firstElementChild;\n\n // create outer div, and place all inner divs within it\n let outerDiv = innerDivs.reduce(function(outerDiv, innerDiv) {\n outerDiv.appendChild(innerDiv);\n return outerDiv;\n }, document.createElement('div'));\n outerDiv.className = 'checkbox-container';\n\n let elements: Array<HTMLElement> = [];\n if (this.options.sort ) elements= elements.concat([\n this.dropdownFilterSort(this.options.captions.a_to_z),\n this.dropdownFilterSort(this.options.captions.z_to_a)\n ]);\n if (this.options.search) elements.push(searchFilterDiv);\n\n return elements.concat(outerDiv).reduce(function(html, el) {\n html.appendChild(el);\n return html;\n }, dropdownFilterContent);\n }\n\n private dropdownFilterDropdown(): HTMLElement {\n // build holder div\n let dropdownFilterDropdown = document.createElement('div');\n dropdownFilterDropdown.className = 'dropdown-filter-dropdown';\n let arrow = document.createElement('span');\n arrow.className = 'glyphicon glyphicon-arrow-down dropdown-filter-icon';\n let icon = document.createElement('i');\n icon.className = 'arrow-down';\n arrow.appendChild(icon);\n dropdownFilterDropdown.appendChild(arrow);\n dropdownFilterDropdown.appendChild(this.dropdownFilterContent());\n\n if ($(this.th).hasClass('no-sort')) {\n $(dropdownFilterDropdown).find('.dropdown-filter-sort').remove();\n }\n if ($(this.th).hasClass('no-filter')) {\n $(dropdownFilterDropdown).find('.checkbox-container').remove();\n }\n if ($(this.th).hasClass('no-search')) {\n $(dropdownFilterDropdown).find('.dropdown-filter-search').remove();\n }\n return dropdownFilterDropdown;\n }\n\n}\n","import { FilterMenu } from './FilterMenu'\n\nexport class FilterCollection {\n\n filterMenus: Array<FilterMenu>;\n rows: Array<HTMLElement>;\n ths: Array<HTMLElement>;\n table: HTMLElement;\n options: Options;\n target: JQuery;\n\n constructor (target: JQuery, options: Options) {\n this.target = target;\n this.options = options;\n this.ths = target.find('th' + options.columnSelector).toArray()\n this.filterMenus = this.ths.map(function(th: HTMLElement, index: number) {\n let column = $(th).index();\n return new FilterMenu(target, th, column, index, options);\n });\n this.rows = target.find('tbody').find('tr').toArray();\n this.table = target.get(0);\n }\n\n public initialize(): void {\n this.filterMenus.forEach(function(filterMenu) {\n filterMenu.initialize();\n });\n this.bindCheckboxes();\n this.bindSelectAllCheckboxes();\n this.bindSort();\n this.bindSearch();\n }\n\n private bindCheckboxes(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-menu-item.item').change(function() {\n let index = $(this).data('index');\n let value = $(this).val();\n filterMenus[index].updateSelectAll();\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private bindSelectAllCheckboxes(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-menu-item.select-all').change(function() {\n let index = $(this).data('index');\n let value = this.checked;\n filterMenus[index].selectAllUpdate(value);\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private bindSort(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let sort = this.sort;\n let table = this.table;\n let options = this.options;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-sort').click(function() {\n let $sortElement = $(this).find('span');\n let column = $sortElement.data('column');\n let order = $sortElement.attr('class');\n sort(column, order, table, options);\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private bindSearch(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-search').keyup(function() {\n let $input = $(this).find('input');\n let index = $input.data('index');\n let value = $input.val();\n filterMenus[index].searchToggle(value);\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private updateRowVisibility(filterMenus: Array<FilterMenu>, rows: Array<HTMLElement>, ths: Array<HTMLElement>): void {\n let showRows = rows;\n let hideRows: Array<HTMLElement> = [];\n let selectedLists = filterMenus.map(function(filterMenu) {\n return {\n column: filterMenu.column,\n selected: filterMenu.inputs\n .filter(function(input: HTMLInputElement) {\n return input.checked\n }).map(function(input: HTMLInputElement) {\n return input.value.trim().replace(/ +(?= )/g,'');\n })\n };\n });\n for (let i=0; i < rows.length; i++) {\n let tds = rows[i].children;\n for (let j=0; j < selectedLists.length; j++) {\n let content = (tds[selectedLists[j].column] as HTMLElement).innerText.trim().replace(/ +(?= )/g,'')\n if (selectedLists[j].selected.indexOf(content) === -1 ) {\n $(rows[i]).hide();\n break;\n }\n $(rows[i]).show();\n }\n }\n }\n\n private sort(column: number, order: string, table: HTMLElement, options: Options): void {\n let flip = 1;\n if (order === options.captions.z_to_a.toLowerCase().split(' ').join('-')) flip = -1;\n let tbody = $(table).find('tbody').get(0);\n let rows = $(tbody).find('tr').get();\n\n rows.sort(function(a, b) {\n var A = (a.children[column] as HTMLElement).innerText.toUpperCase();\n var B = (b.children[column] as HTMLElement).innerText.toUpperCase();\n\n if (!isNaN(Number(A)) && !isNaN(Number(B))) {\n // handle numbers\n if(Number(A) < Number(B)) return -1*flip;\n if(Number(A) > Number(B)) return 1*flip;\n } else {\n // handle strings\n if(A < B) return -1*flip;\n if(A > B) return 1*flip;\n }\n return 0;\n });\n\n for (var i=0; i < rows.length; i++) {\n tbody.appendChild(rows[i]);\n }\n }\n\n\n}\n","import $ from 'jquery';\nimport { FilterCollection } from './FilterCollection'\n\n// Define the plugin function on the jQuery extension point.\n($.fn as any).excelTableFilter = function (this: JQuery, options: Options) {\n let target = this;\n // Merge the global options with the per-call options.\n options = $.extend({}, ($.fn as any).excelTableFilter.options, options);\n\n if (typeof options.columnSelector === 'undefined') options.columnSelector = '';\n if (typeof options.sort === 'undefined') options.sort = true;\n if (typeof options.search === 'undefined') options.search = true;\n\n if (typeof options.captions === 'undefined') options.captions = {\n a_to_z: 'A to Z',\n z_to_a: 'Z to A',\n search: 'Search',\n select_all: 'Select All'\n }\n\n let filterCollection = new FilterCollection(target, options);\n filterCollection.initialize();\n\n // Return the jQuery object for chaining.\n return target;\n};\n\n// Define the plugin's global default options.\n($.fn as any).excelTableFilter.options = {};\n"],"names":["target","th","column","index","options","tds","find","toArray","menu","dropdownFilterDropdown","appendChild","$trigger","$","children","$content","$menu","click","toggle","document","el","is","has","length","hide","value","selectAllCheckbox","HTMLInputElement","checked","toggleAll","inputs","filter","input","toLowerCase","indexOf","forEach","searchFilter","val","i","td","self","innerText","dropdownFilterItem","createElement","className","type","trim","replace","setAttribute","toString","innerHTML","captions","select_all","dropdownFilterItemSelectAll","search","direction","span","split","join","dropdownFilterContent","innerDivs","reduce","arr","values","map","push","sort","a","b","A","B","isNaN","Number","_this","div","firstElementChild","selectAllCheckboxDiv","unshift","searchFilterDiv","dropdownFilterSearch","outerDiv","innerDiv","elements","concat","dropdownFilterSort","a_to_z","z_to_a","html","arrow","icon","hasClass","remove","ths","columnSelector","filterMenus","FilterMenu","rows","table","get","filterMenu","initialize","bindCheckboxes","bindSelectAllCheckboxes","bindSort","bindSearch","updateRowVisibility","change","data","updateSelectAll","selectAllUpdate","$sortElement","order","attr","keyup","$input","searchToggle","showRows","hideRows","selectedLists","j","content","selected","show","flip","tbody","toUpperCase","fn","excelTableFilter","extend","filterCollection","FilterCollection"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ (function($$1){"use strict";$$1="default"in $$1?$$1["default"]:$$1;var FilterMenu=function(){function FilterMenu(target,th,column,index,options){this.options=options;this.th=th;this.column=column;this.index=index;this.tds=target.find("tbody tr td:nth-child("+(this.column+1)+")").toArray()}FilterMenu.prototype.initialize=function(){this.menu=this.dropdownFilterDropdown();this.th.appendChild(this.menu);var $trigger=$(this.menu.children[0]);var $content=$(this.menu.children[1]);var $menu=$(this.menu);$trigger.click(function(){return $content.toggle()});$(document).click(function(el){if(!$menu.is(el.target)&&$menu.has(el.target).length===0){$content.hide()}})};FilterMenu.prototype.searchToggle=function(value){if(this.selectAllCheckbox instanceof HTMLInputElement)this.selectAllCheckbox.checked=false;if(value.length===0){this.toggleAll(true);if(this.selectAllCheckbox instanceof HTMLInputElement)this.selectAllCheckbox.checked=true;return}this.toggleAll(false);this.inputs.filter(function(input){return input.value.toLowerCase().indexOf(value.toLowerCase())>-1}).forEach(function(input){input.checked=true})};FilterMenu.prototype.updateSelectAll=function(){if(this.selectAllCheckbox instanceof HTMLInputElement){$(this.searchFilter).val("");this.selectAllCheckbox.checked=this.inputs.length===this.inputs.filter(function(input){return input.checked}).length}};FilterMenu.prototype.selectAllUpdate=function(checked){$(this.searchFilter).val("");this.toggleAll(checked)};FilterMenu.prototype.toggleAll=function(checked){for(var i=0;i<this.inputs.length;i++){var input=this.inputs[i];if(input instanceof HTMLInputElement)input.checked=checked}};FilterMenu.prototype.dropdownFilterItem=function(td,self){var value=td.innerText;var dropdownFilterItem=document.createElement("div");dropdownFilterItem.className="dropdown-filter-item";var input=document.createElement("input");input.type="checkbox";input.value=value.trim().replace(/ +(?= )/g,"");input.setAttribute("checked","checked");input.className="dropdown-filter-menu-item item";input.setAttribute("data-column",self.column.toString());input.setAttribute("data-index",self.index.toString());dropdownFilterItem.appendChild(input);dropdownFilterItem.innerHTML=dropdownFilterItem.innerHTML.trim()+" "+value;return dropdownFilterItem};FilterMenu.prototype.dropdownFilterItemSelectAll=function(){var value=this.options.captions.select_all;var dropdownFilterItemSelectAll=document.createElement("div");dropdownFilterItemSelectAll.className="dropdown-filter-item";var input=document.createElement("input");input.type="checkbox";input.value=this.options.captions.select_all;input.setAttribute("checked","checked");input.className="dropdown-filter-menu-item select-all";input.setAttribute("data-column",this.column.toString());input.setAttribute("data-index",this.index.toString());dropdownFilterItemSelectAll.appendChild(input);dropdownFilterItemSelectAll.innerHTML=dropdownFilterItemSelectAll.innerHTML+" "+value;return dropdownFilterItemSelectAll};FilterMenu.prototype.dropdownFilterSearch=function(){var dropdownFilterItem=document.createElement("div");dropdownFilterItem.className="dropdown-filter-search";var input=document.createElement("input");input.type="text";input.className="dropdown-filter-menu-search form-control";input.setAttribute("data-column",this.column.toString());input.setAttribute("data-index",this.index.toString());input.setAttribute("placeholder",this.options.captions.search);dropdownFilterItem.appendChild(input);return dropdownFilterItem};FilterMenu.prototype.dropdownFilterSort=function(direction){var dropdownFilterItem=document.createElement("div");dropdownFilterItem.className="dropdown-filter-sort";var span=document.createElement("span");span.className=direction.toLowerCase().split(" ").join("-");span.setAttribute("data-column",this.column.toString());span.setAttribute("data-index",this.index.toString());span.innerText=direction;dropdownFilterItem.appendChild(span);return dropdownFilterItem};FilterMenu.prototype.dropdownFilterContent=function(){var _this=this;var self=this;var dropdownFilterContent=document.createElement("div");dropdownFilterContent.className="dropdown-filter-content";var innerDivs=this.tds.reduce(function(arr,el){var values=arr.map(function(el){return el.innerText.trim()});if(values.indexOf(el.innerText.trim())<0)arr.push(el);return arr},[]).sort(function(a,b){var A=a.innerText.toLowerCase();var B=b.innerText.toLowerCase();if(!isNaN(Number(A))&&!isNaN(Number(B))){if(Number(A)<Number(B))return-1;if(Number(A)>Number(B))return 1}else{if(A<B)return-1;if(A>B)return 1}return 0}).map(function(td){return _this.dropdownFilterItem(td,self)});this.inputs=innerDivs.map(function(div){return div.firstElementChild});var selectAllCheckboxDiv=this.dropdownFilterItemSelectAll();this.selectAllCheckbox=selectAllCheckboxDiv.firstElementChild;innerDivs.unshift(selectAllCheckboxDiv);var searchFilterDiv=this.dropdownFilterSearch();this.searchFilter=searchFilterDiv.firstElementChild;var outerDiv=innerDivs.reduce(function(outerDiv,innerDiv){outerDiv.appendChild(innerDiv);return outerDiv},document.createElement("div"));outerDiv.className="checkbox-container";var elements=[];if(this.options.sort)elements=elements.concat([this.dropdownFilterSort(this.options.captions.a_to_z),this.dropdownFilterSort(this.options.captions.z_to_a)]);if(this.options.search)elements.push(searchFilterDiv);return elements.concat(outerDiv).reduce(function(html,el){html.appendChild(el);return html},dropdownFilterContent)};FilterMenu.prototype.dropdownFilterDropdown=function(){var dropdownFilterDropdown=document.createElement("div");dropdownFilterDropdown.className="dropdown-filter-dropdown";var arrow=document.createElement("span");arrow.className="glyphicon glyphicon-arrow-down dropdown-filter-icon";var icon=document.createElement("i");icon.className="arrow-down";arrow.appendChild(icon);dropdownFilterDropdown.appendChild(arrow);dropdownFilterDropdown.appendChild(this.dropdownFilterContent());if($(this.th).hasClass("no-sort")){$(dropdownFilterDropdown).find(".dropdown-filter-sort").remove()}if($(this.th).hasClass("no-filter")){$(dropdownFilterDropdown).find(".checkbox-container").remove()}if($(this.th).hasClass("no-search")){$(dropdownFilterDropdown).find(".dropdown-filter-search").remove()}return dropdownFilterDropdown};return FilterMenu}();var FilterCollection=function(){function FilterCollection(target,options){this.target=target;this.options=options;this.ths=target.find("th"+options.columnSelector).toArray();this.filterMenus=this.ths.map(function(th,index){var column=$(th).index();return new FilterMenu(target,th,column,index,options)});this.rows=target.find("tbody").find("tr").toArray();this.table=target.get(0)}FilterCollection.prototype.initialize=function(){this.filterMenus.forEach(function(filterMenu){filterMenu.initialize()});this.bindCheckboxes();this.bindSelectAllCheckboxes();this.bindSort();this.bindSearch()};FilterCollection.prototype.bindCheckboxes=function(){var filterMenus=this.filterMenus;var rows=this.rows;var ths=this.ths;var updateRowVisibility=this.updateRowVisibility;this.target.find(".dropdown-filter-menu-item.item").change(function(){var index=$(this).data("index");var value=$(this).val();filterMenus[index].updateSelectAll();updateRowVisibility(filterMenus,rows,ths)})};FilterCollection.prototype.bindSelectAllCheckboxes=function(){var filterMenus=this.filterMenus;var rows=this.rows;var ths=this.ths;var updateRowVisibility=this.updateRowVisibility;this.target.find(".dropdown-filter-menu-item.select-all").change(function(){var index=$(this).data("index");var value=this.checked;filterMenus[index].selectAllUpdate(value);updateRowVisibility(filterMenus,rows,ths)})};FilterCollection.prototype.bindSort=function(){var filterMenus=this.filterMenus;var rows=this.rows;var ths=this.ths;var sort=this.sort;var table=this.table;var options=this.options;var updateRowVisibility=this.updateRowVisibility;this.target.find(".dropdown-filter-sort").click(function(){var $sortElement=$(this).find("span");var column=$sortElement.data("column");var order=$sortElement.attr("class");sort(column,order,table,options);updateRowVisibility(filterMenus,rows,ths)})};FilterCollection.prototype.bindSearch=function(){var filterMenus=this.filterMenus;var rows=this.rows;var ths=this.ths;var updateRowVisibility=this.updateRowVisibility;this.target.find(".dropdown-filter-search").keyup(function(){var $input=$(this).find("input");var index=$input.data("index");var value=$input.val();filterMenus[index].searchToggle(value);updateRowVisibility(filterMenus,rows,ths)})};FilterCollection.prototype.updateRowVisibility=function(filterMenus,rows,ths){var showRows=rows;var hideRows=[];var selectedLists=filterMenus.map(function(filterMenu){return{column:filterMenu.column,selected:filterMenu.inputs.filter(function(input){return input.checked}).map(function(input){return input.value.trim().replace(/ +(?= )/g,"")})}});for(var i=0;i<rows.length;i++){var tds=rows[i].children;for(var j=0;j<selectedLists.length;j++){var content=tds[selectedLists[j].column].innerText.trim().replace(/ +(?= )/g,"");if(selectedLists[j].selected.indexOf(content)===-1){$(rows[i]).hide();break}$(rows[i]).show()}}};FilterCollection.prototype.sort=function(column,order,table,options){var flip=1;if(order===options.captions.z_to_a.toLowerCase().split(" ").join("-"))flip=-1;var tbody=$(table).find("tbody").get(0);var rows=$(tbody).find("tr").get();rows.sort(function(a,b){var A=a.children[column].innerText.toUpperCase();var B=b.children[column].innerText.toUpperCase();if(!isNaN(Number(A))&&!isNaN(Number(B))){if(Number(A)<Number(B))return-1*flip;if(Number(A)>Number(B))return 1*flip}else{if(A<B)return-1*flip;if(A>B)return 1*flip}return 0});for(var i=0;i<rows.length;i++){tbody.appendChild(rows[i])}};return FilterCollection}();$$1.fn.excelTableFilter=function(options){var target=this;options=$$1.extend({},$$1.fn.excelTableFilter.options,options);if(typeof options.columnSelector==="undefined")options.columnSelector="";if(typeof options.sort==="undefined")options.sort=true;if(typeof options.search==="undefined")options.search=true;if(typeof options.captions==="undefined")options.captions={a_to_z:"A to Z",z_to_a:"Z to A",search:"Search",select_all:"Select All"};var filterCollection=new FilterCollection(target,options);filterCollection.initialize();return target};$$1.fn.excelTableFilter.options={}})(jQuery);
2
+ //# sourceMappingURL=excel-bootstrap-table-filter-bundle.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/FilterMenu.ts","../src/FilterCollection.ts","../src/excel-bootstrap-table-filter.ts"],"names":["FilterMenu","target","th","column","index","options","tds","find","this","toArray","initialize","menu","dropdownFilterDropdown","appendChild","$trigger","$","children","$content","$menu","click","toggle","document","el","is","has","length","hide","searchToggle","value","selectAllCheckbox","HTMLInputElement","checked","toggleAll","inputs","filter","input","toLowerCase","indexOf","forEach","updateSelectAll","searchFilter","val","selectAllUpdate","i","dropdownFilterItem","td","self","innerText","createElement","className","type","trim","replace","setAttribute","toString","innerHTML","dropdownFilterItemSelectAll","captions","select_all","dropdownFilterSearch","search","dropdownFilterSort","direction","span","split","join","dropdownFilterContent","innerDivs","reduce","arr","values","map","push","sort","a","b","A","B","isNaN","Number","_this","div","firstElementChild","selectAllCheckboxDiv","unshift","searchFilterDiv","outerDiv","innerDiv","elements","concat","a_to_z","z_to_a","html","arrow","icon","hasClass","remove","FilterCollection","ths","columnSelector","filterMenus","rows","table","get","filterMenu","bindCheckboxes","bindSelectAllCheckboxes","bindSort","bindSearch","updateRowVisibility","change","data","$sortElement","order","attr","keyup","$input","showRows","hideRows","selectedLists","j","content","selected","show","flip","tbody","toUpperCase","fn","excelTableFilter","extend","filterCollection"],"mappings":"kEAAA,IAAAA,YAAA,+BAaeC,OAAgBC,GAAiBC,OAAgBC,MAAeC,cACtEA,QAAUA,aACVH,GAAKA,QACLC,OAASA,YACTC,MAAQA,WACRE,IAAML,OAAOM,KAAK,0BAA4BC,KAAKL,OAAS,GAAK,KAAKM,+BAGtEC,WAAP,gBACOC,KAAOH,KAAKI,8BACZV,GAAGW,YAAYL,KAAKG,SAGrBG,UAAWC,EAAEP,KAAKG,KAAKK,SAAS,OAChCC,UAAWF,EAAEP,KAAKG,KAAKK,SAAS,OAChCE,OAAQH,EAAEP,KAAKG,eAGVQ,MAAM,iBAAMF,UAASG,aAE5BC,UAAUF,MAAM,SAASG,QAEpBJ,MAAMK,GAAGD,GAAGrB,SAAWiB,MAAMM,IAAIF,GAAGrB,QAAQwB,SAAW,EAAG,UACpDC,gCAKRC,aAAP,SAAoBC,UACdpB,KAAKqB,4BAA6BC,kBAAkBtB,KAAKqB,kBAAkBE,QAAU,SACrFH,MAAMH,SAAW,EAAE,MAChBO,UAAU,SACXxB,KAAKqB,4BAA6BC,kBAAkBtB,KAAKqB,kBAAkBE,QAAU,iBAItFC,UAAU,YAEVC,OAAOC,OAAO,SAASC,aACnBA,OAAMP,MAAMQ,cAAcC,QAAQT,MAAMQ,gBAAkB,IAChEE,QAAQ,SAASH,aACZJ,QAAU,6BAKbQ,gBAAP,cACM/B,KAAKqB,4BAA6BC,kBAAkB,GAEpDtB,KAAKgC,cAAcC,IAAI,SAEpBZ,kBAAkBE,QAAWvB,KAAKyB,OAAOR,SAAWjB,KAAKyB,OAAOC,OAAO,SAASC,aAC5EA,OAAMJ,UACZN,8BAIAiB,gBAAP,SAAuBX,WAEnBvB,KAAKgC,cAAcC,IAAI,SACpBT,UAAUD,+BAGTC,UAAR,SAAkBD,aAEX,GAAIY,GAAE,EAAGA,EAAInC,KAAKyB,OAAOR,OAAQkB,IAAK,IACrCR,OAAQ3B,KAAKyB,OAAOU,MACpBR,gBAAiBL,kBAAkBK,MAAMJ,QAAUA,+BAInDa,mBAAR,SAA2BC,GAAiBC,SAEtClB,OAAQiB,GAAGE,aACXH,oBAAqBvB,SAAS2B,cAAc,0BAC7BC,UAAY,0BAE3Bd,OAAQd,SAAS2B,cAAc,eAC7BE,KAAO,iBACPtB,MAAQA,MAAMuB,OAAOC,QAAQ,WAAW,UACxCC,aAAa,UAAU,iBACvBJ,UAAY,uCAEZI,aAAa,cAAeP,KAAK3C,OAAOmD,kBACxCD,aAAa,aAAcP,KAAK1C,MAAMkD,+BAEzBzC,YAAYsB,0BACZoB,UAAYX,mBAAmBW,UAAUJ,OAAS,IAAOvB,YACrEgB,0CAGDY,4BAAR,cAEM5B,OAAQpB,KAAKH,QAAQoD,SAASC,cAC9BF,6BAA8BnC,SAAS2B,cAAc,mCAC7BC,UAAY,0BAEpCd,OAAQd,SAAS2B,cAAc,eAC7BE,KAAO,iBACPtB,MAAQpB,KAAKH,QAAQoD,SAASC,iBAC9BL,aAAa,UAAU,iBACvBJ,UAAY,6CACZI,aAAa,cAAe7C,KAAKL,OAAOmD,kBACxCD,aAAa,aAAc7C,KAAKJ,MAAMkD,wCAEhBzC,YAAYsB,mCACZoB,UAAYC,4BAA4BD,UAAY,IAAO3B,YAChF4B,mDAGDG,qBAAR,cAEMf,oBAAqBvB,SAAS2B,cAAc,0BAC7BC,UAAY,4BAE3Bd,OAAQd,SAAS2B,cAAc,eAC7BE,KAAO,aACPD,UAAY,iDACZI,aAAa,cAAe7C,KAAKL,OAAOmD,kBACxCD,aAAa,aAAc7C,KAAKJ,MAAMkD,kBACtCD,aAAa,cAAe7C,KAAKH,QAAQoD,SAASG,2BAErC/C,YAAYsB,aACxBS,0CAGDiB,mBAAR,SAA2BC,cAErBlB,oBAAqBvB,SAAS2B,cAAc,0BAC7BC,UAAY,0BAE3Bc,MAAO1C,SAAS2B,cAAc,aAC7BC,UAAYa,UAAU1B,cAAc4B,MAAM,KAAKC,KAAK,UACpDZ,aAAa,cAAe7C,KAAKL,OAAOmD,iBACxCD,aAAa,aAAc7C,KAAKJ,MAAMkD,iBACtCP,UAAYe,6BAEEjD,YAAYkD,YACxBnB,0CAGDsB,sBAAR,6BACMpB,MAAOtC,QAEP0D,uBAAwB7C,SAAS2B,cAAc,6BAC7BC,UAAY,6BAE9BkB,WAAY3D,KAAKF,IAAI8D,OAAO,SAASC,IAAK/C,OAExCgD,QAASD,IAAIE,IAAI,SAACjD,UAAOA,IAAGyB,UAAUI,YACtCmB,OAAOjC,QAAQf,GAAGyB,UAAUI,QAAU,EAAGkB,IAAIG,KAAKlD,UAE/C+C,UAERI,KAAK,SAASC,EAAGC,MAEZC,GAAIF,EAAE3B,UAAUX,iBAChByC,GAAIF,EAAE5B,UAAUX,kBAEf0C,MAAMC,OAAOH,MAAQE,MAAMC,OAAOF,IAAK,IAGvCE,OAAOH,GAAKG,OAAOF,GAAI,OAAQ,KAC/BE,OAAOH,GAAKG,OAAOF,GAAI,MAAQ,OAE7B,IAGFD,EAAIC,EAAG,OAAQ,KACfD,EAAIC,EAAG,MAAQ,SAIb,KAGRN,IAAK,SAAC1B,UACEmC,OAAKpC,mBAAmBC,GAAIC,aAIhCb,OAASkC,UAAUI,IAAI,SAACU,WAAQA,KAAIC,uBAGrCC,sBAAuB3E,KAAKgD,mCAE3B3B,kBAAoBsD,qBAAqBD,4BAEpCE,QAAQD,yBAEdE,iBAAkB7E,KAAKmD,4BACtBnB,aAAe6C,gBAAgBH,qBAGhCI,UAAWnB,UAAUC,OAAO,SAASkB,SAAUC,mBACxC1E,YAAY0E,gBACdD,WACNjE,SAAS2B,cAAc,iBACjBC,UAAY,wBAEjBuC,gBACAhF,KAAKH,QAAQoE,KAAQe,SAAUA,SAASC,QAC1CjF,KAAKqD,mBAAmBrD,KAAKH,QAAQoD,SAASiC,QAC9ClF,KAAKqD,mBAAmBrD,KAAKH,QAAQoD,SAASkC,aAE5CnF,KAAKH,QAAQuD,OAAQ4B,SAAShB,KAAKa,uBAEhCG,UAASC,OAAOH,UAAUlB,OAAO,SAASwB,KAAMtE,SAC9CT,YAAYS,UACVsE,OACR1B,6CAGGtD,uBAAR,cAEMA,wBAAyBS,SAAS2B,cAAc,8BAC7BC,UAAY,8BAC/B4C,OAAQxE,SAAS2B,cAAc,cAC7BC,UAAY,yDACd6C,MAAOzE,SAAS2B,cAAc,UAC7BC,UAAY,mBACXpC,YAAYiF,6BACKjF,YAAYgF,8BACZhF,YAAYL,KAAK0D,4BAEpCnD,EAAEP,KAAKN,IAAI6F,SAAS,WAAY,GAChCnF,wBAAwBL,KAAK,yBAAyByF,YAEtDjF,EAAEP,KAAKN,IAAI6F,SAAS,aAAc,GAClCnF,wBAAwBL,KAAK,uBAAuByF,YAEpDjF,EAAEP,KAAKN,IAAI6F,SAAS,aAAc,GAClCnF,wBAAwBL,KAAK,2BAA2ByF,eAErDpF,6CCrPX,IAAAqF,kBAAA,qCASehG,OAAgBI,cACtBJ,OAASA,YACTI,QAAUA,aACV6F,IAAMjG,OAAOM,KAAK,KAAOF,QAAQ8F,gBAAgB1F,eACjD2F,YAAc5F,KAAK0F,IAAI3B,IAAI,SAASrE,GAAiBE,UACpDD,QAASY,EAAEb,IAAIE,cACZ,IAAIJ,YAAWC,OAAQC,GAAIC,OAAQC,MAAOC,gBAE9CgG,KAAOpG,OAAOM,KAAK,SAASA,KAAK,MAAME,eACvC6F,MAAQrG,OAAOsG,IAAI,8BAGnB7F,WAAP,gBACO0F,YAAY9D,QAAQ,SAASkE,uBACrB9F,oBAER+F,sBACAC,+BACAC,gBACAC,yCAGCH,eAAR,cACML,aAAc5F,KAAK4F,eACnBC,MAAO7F,KAAK6F,QACZH,KAAM1F,KAAK0F,OACXW,qBAAsBrG,KAAKqG,yBAC1B5G,OAAOM,KAAK,mCAAmCuG,OAAO,cACrD1G,OAAQW,EAAEP,MAAMuG,KAAK,YACrBnF,OAAQb,EAAEP,MAAMiC,kBACRrC,OAAOmC,sCACC6D,YAAaC,KAAMH,mCAInCQ,wBAAR,cACMN,aAAc5F,KAAK4F,eACnBC,MAAO7F,KAAK6F,QACZH,KAAM1F,KAAK0F,OACXW,qBAAsBrG,KAAKqG,yBAC1B5G,OAAOM,KAAK,yCAAyCuG,OAAO,cAC3D1G,OAAQW,EAAEP,MAAMuG,KAAK,YACrBnF,OAAQpB,KAAKuB,oBACL3B,OAAOsC,gBAAgBd,2BACfwE,YAAaC,KAAMH,mCAInCS,SAAR,cACMP,aAAc5F,KAAK4F,eACnBC,MAAO7F,KAAK6F,QACZH,KAAM1F,KAAK0F,OACXzB,MAAOjE,KAAKiE,QACZ6B,OAAQ9F,KAAK8F,SACbjG,SAAUG,KAAKH,WACfwG,qBAAsBrG,KAAKqG,yBAC1B5G,OAAOM,KAAK,yBAAyBY,MAAM,cAC1C6F,cAAejG,EAAEP,MAAMD,KAAK,WAC5BJ,QAAS6G,aAAaD,KAAK,aAC3BE,OAAQD,aAAaE,KAAK,cACzB/G,OAAQ8G,MAAOX,MAAOjG,6BACP+F,YAAaC,KAAMH,mCAInCU,WAAR,cACMR,aAAc5F,KAAK4F,eACnBC,MAAO7F,KAAK6F,QACZH,KAAM1F,KAAK0F,OACXW,qBAAsBrG,KAAKqG,yBAC1B5G,OAAOM,KAAK,2BAA2B4G,MAAM,cAC5CC,QAASrG,EAAEP,MAAMD,KAAK,YACtBH,OAAQgH,OAAOL,KAAK,YACpBnF,OAAQwF,OAAO3E,kBACPrC,OAAOuB,aAAaC,2BACZwE,YAAaC,KAAMH,mCAInCW,oBAAR,SAA4BT,YAAgCC,KAA0BH,QAChFmB,UAAWhB,QACXiB,gBACAC,eAAgBnB,YAAY7B,IAAI,SAASiC,0BAEjCA,WAAWrG,gBACTqG,WAAWvE,OAClBC,OAAO,SAASC,aACRA,OAAMJ,UACZwC,IAAI,SAASpC,aACPA,OAAMP,MAAMuB,OAAOC,QAAQ,WAAW,aAIhD,GAAIT,GAAE,EAAGA,EAAI0D,KAAK5E,OAAQkB,IAAK,IAC9BrC,KAAM+F,KAAK1D,GAAG3B,aACb,GAAIwG,GAAE,EAAGA,EAAID,cAAc9F,OAAQ+F,IAAK,IACvCC,SAAWnH,IAAIiH,cAAcC,GAAGrH,QAAwB4C,UAAUI,OAAOC,QAAQ,WAAW,OAC5FmE,cAAcC,GAAGE,SAASrF,QAAQoF,YAAc,EAAI,GACpDpB,KAAK1D,IAAIjB,eAGX2E,KAAK1D,IAAIgF,qCAKTlD,KAAR,SAAatE,OAAgB8G,MAAeX,MAAoBjG,YAC1DuH,MAAO,KACPX,QAAU5G,QAAQoD,SAASkC,OAAOvD,cAAc4B,MAAM,KAAKC,KAAK,KAAM2D,MAAQ,KAC9EC,OAAQ9G,EAAEuF,OAAO/F,KAAK,SAASgG,IAAI,MACnCF,MAAOtF,EAAE8G,OAAOtH,KAAK,MAAMgG,WAE1B9B,KAAK,SAASC,EAAGC,MAChBC,GAAKF,EAAE1D,SAASb,QAAwB4C,UAAU+E,iBAClDjD,GAAKF,EAAE3D,SAASb,QAAwB4C,UAAU+E,kBAEjDhD,MAAMC,OAAOH,MAAQE,MAAMC,OAAOF,IAAK,IAEvCE,OAAOH,GAAKG,OAAOF,GAAI,OAAQ,EAAE+C,QACjC7C,OAAOH,GAAKG,OAAOF,GAAI,MAAQ,GAAE+C,SAC/B,IAEFhD,EAAIC,EAAG,OAAQ,EAAE+C,QACjBhD,EAAIC,EAAG,MAAQ,GAAE+C,WAEf,SAGJ,GAAIjF,GAAE,EAAGA,EAAI0D,KAAK5E,OAAQkB,IAAK,OAC5B9B,YAAYwF,KAAK1D,gCCxI5B5B,KAAEgH,GAAWC,iBAAmB,SAAwB3H,YACnDJ,QAASO,aAEHO,IAAEkH,UAAYlH,IAAEgH,GAAWC,iBAAiB3H,QAASA,kBAEpDA,SAAQ8F,iBAAmB,YAAa9F,QAAQ8F,eAAiB,YACjE9F,SAAQoE,OAAS,YAAapE,QAAQoE,KAAO,cAC7CpE,SAAQuD,SAAW,YAAavD,QAAQuD,OAAS,cAEjDvD,SAAQoD,WAAa,YAAapD,QAAQoD,iBAC3C,gBACA,gBACA,oBACI,iBAGVyE,kBAAmB,GAAIjC,kBAAiBhG,OAAQI,0BACnCK,mBAGVT,QAIRc,KAAEgH,GAAWC,iBAAiB3H","file":"dist/excel-bootstrap-table-filter-bundle.min.js","sourcesContent":["export class FilterMenu {\n\n th: HTMLElement;\n tds: Array<HTMLElement>;\n column: number;\n index: number;\n menu: HTMLElement;\n inputs: Array<Element>;\n selectAllCheckbox: Element;\n searchFilter: Element;\n options: Options;\n target: JQuery;\n\n constructor (target: JQuery, th: HTMLElement, column: number, index: number, options: Options) {\n this.options = options;\n this.th = th;\n this.column = column;\n this.index = index;\n this.tds = target.find('tbody tr td:nth-child(' + (this.column + 1) + ')').toArray();\n }\n\n public initialize(): void {\n this.menu = this.dropdownFilterDropdown();\n this.th.appendChild(this.menu);\n\n // variables for click handlers\n let $trigger = $(this.menu.children[0]);\n let $content = $(this.menu.children[1]);\n let $menu = $(this.menu);\n\n // toggle hide/show when the trigger is clicked\n $trigger.click(() => $content.toggle());\n\n $(document).click(function(el) {\n // hide the content if the user clicks outside of the menu\n if (!$menu.is(el.target) && $menu.has(el.target).length === 0) {\n $content.hide();\n }\n });\n }\n\n public searchToggle(value: string): void {\n if (this.selectAllCheckbox instanceof HTMLInputElement) this.selectAllCheckbox.checked = false;\n if (value.length === 0){\n this.toggleAll(true);\n if (this.selectAllCheckbox instanceof HTMLInputElement) this.selectAllCheckbox.checked = true;\n return;\n }\n // deselect all checkboxes initially\n this.toggleAll(false);\n // select checkboxes that match the search parameter\n this.inputs.filter(function(input: HTMLInputElement) {\n return input.value.toLowerCase().indexOf(value.toLowerCase()) > -1;\n }).forEach(function(input: HTMLInputElement) {\n input.checked = true;\n });\n }\n\n\n public updateSelectAll(): void {\n if (this.selectAllCheckbox instanceof HTMLInputElement) {\n // clear search parameters, if any\n $(this.searchFilter).val('');\n // Check if all inputs are selected\n this.selectAllCheckbox.checked = (this.inputs.length === this.inputs.filter(function(input: HTMLInputElement) {\n return input.checked;\n }).length);\n }\n }\n\n public selectAllUpdate(checked: boolean): void {\n // clear search parameters, if any\n $(this.searchFilter).val('');\n this.toggleAll(checked);\n }\n\n private toggleAll(checked: boolean): void {\n // loop through all inputs and check or uncheck each\n for (var i=0; i < this.inputs.length; i++) {\n let input = this.inputs[i];\n if (input instanceof HTMLInputElement) input.checked = checked;\n }\n }\n\n private dropdownFilterItem(td: HTMLElement, self: any): HTMLElement {\n // build holder div\n let value = td.innerText;\n let dropdownFilterItem = document.createElement('div');\n dropdownFilterItem.className = 'dropdown-filter-item';\n // build input\n let input = document.createElement('input');\n input.type = 'checkbox';\n input.value = value.trim().replace(/ +(?= )/g,'');\n input.setAttribute('checked','checked');\n input.className = 'dropdown-filter-menu-item item';\n // get index of td element\n input.setAttribute('data-column', self.column.toString());\n input.setAttribute('data-index', self.index.toString());\n // append input to holding div\n dropdownFilterItem.appendChild(input);\n dropdownFilterItem.innerHTML = dropdownFilterItem.innerHTML.trim() + ' ' + value;\n return dropdownFilterItem;\n }\n\n private dropdownFilterItemSelectAll(): HTMLElement {\n // build holder div\n let value = this.options.captions.select_all;\n let dropdownFilterItemSelectAll = document.createElement('div');\n dropdownFilterItemSelectAll.className = 'dropdown-filter-item';\n // build input\n let input = document.createElement('input');\n input.type = 'checkbox';\n input.value = this.options.captions.select_all;\n input.setAttribute('checked','checked');\n input.className = 'dropdown-filter-menu-item select-all';\n input.setAttribute('data-column', this.column.toString());\n input.setAttribute('data-index', this.index.toString());\n // append input to holding div\n dropdownFilterItemSelectAll.appendChild(input);\n dropdownFilterItemSelectAll.innerHTML = dropdownFilterItemSelectAll.innerHTML + ' ' + value;\n return dropdownFilterItemSelectAll;\n }\n\n private dropdownFilterSearch(): HTMLElement {\n // build holder div\n let dropdownFilterItem = document.createElement('div');\n dropdownFilterItem.className = 'dropdown-filter-search';\n // build input\n let input = document.createElement('input');\n input.type = 'text';\n input.className = 'dropdown-filter-menu-search form-control';\n input.setAttribute('data-column', this.column.toString());\n input.setAttribute('data-index', this.index.toString());\n input.setAttribute('placeholder', this.options.captions.search);\n // append input to holding div\n dropdownFilterItem.appendChild(input);\n return dropdownFilterItem;\n }\n\n private dropdownFilterSort(direction: string): HTMLElement {\n // build holder div\n let dropdownFilterItem = document.createElement('div');\n dropdownFilterItem.className = 'dropdown-filter-sort';\n // build span\n let span = document.createElement('span');\n span.className = direction.toLowerCase().split(' ').join('-');\n span.setAttribute('data-column', this.column.toString());\n span.setAttribute('data-index', this.index.toString());\n span.innerText = direction;\n // append input to holding div\n dropdownFilterItem.appendChild(span);\n return dropdownFilterItem;\n }\n\n private dropdownFilterContent(): HTMLElement {\n let self = this;\n // build holder div\n let dropdownFilterContent = document.createElement('div');\n dropdownFilterContent.className = 'dropdown-filter-content';\n\n let innerDivs = this.tds.reduce(function(arr, el) {\n // get unique values in column\n let values = arr.map((el) => el.innerText.trim());\n if (values.indexOf(el.innerText.trim()) < 0) arr.push(el);\n // return unique values\n return arr;\n }, [])\n .sort(function(a, b) {\n // sort values for display in dropdown\n var A = a.innerText.toLowerCase();\n var B = b.innerText.toLowerCase();\n\n if (!isNaN(Number(A)) && !isNaN(Number(B))) {\n\n // handle numbers\n if(Number(A) < Number(B)) return -1;\n if(Number(A) > Number(B)) return 1;\n\n } else {\n\n // handle strings\n if(A < B) return -1;\n if(A > B) return 1;\n\n }\n //return a.innerText.toLowerCase() > b.innerText.toLowerCase() ? 1 : -1;\n return 0;\n })\n // create dropdown filter items out of each value\n .map( (td) => {\n return this.dropdownFilterItem(td, self);\n })\n\n // map inputs to instance, we will need these later\n this.inputs = innerDivs.map((div) => div.firstElementChild);\n\n // add a select all checkbox\n let selectAllCheckboxDiv = this.dropdownFilterItemSelectAll();\n // map the select all checkbox to the instance, we will need it later\n this.selectAllCheckbox = selectAllCheckboxDiv.firstElementChild;\n // the checkbox will precede the other inputs\n innerDivs.unshift(selectAllCheckboxDiv);\n\n let searchFilterDiv = this.dropdownFilterSearch();\n this.searchFilter = searchFilterDiv.firstElementChild;\n\n // create outer div, and place all inner divs within it\n let outerDiv = innerDivs.reduce(function(outerDiv, innerDiv) {\n outerDiv.appendChild(innerDiv);\n return outerDiv;\n }, document.createElement('div'));\n outerDiv.className = 'checkbox-container';\n\n let elements: Array<HTMLElement> = [];\n if (this.options.sort ) elements= elements.concat([\n this.dropdownFilterSort(this.options.captions.a_to_z),\n this.dropdownFilterSort(this.options.captions.z_to_a)\n ]);\n if (this.options.search) elements.push(searchFilterDiv);\n\n return elements.concat(outerDiv).reduce(function(html, el) {\n html.appendChild(el);\n return html;\n }, dropdownFilterContent);\n }\n\n private dropdownFilterDropdown(): HTMLElement {\n // build holder div\n let dropdownFilterDropdown = document.createElement('div');\n dropdownFilterDropdown.className = 'dropdown-filter-dropdown';\n let arrow = document.createElement('span');\n arrow.className = 'glyphicon glyphicon-arrow-down dropdown-filter-icon';\n let icon = document.createElement('i');\n icon.className = 'arrow-down';\n arrow.appendChild(icon);\n dropdownFilterDropdown.appendChild(arrow);\n dropdownFilterDropdown.appendChild(this.dropdownFilterContent());\n\n if ($(this.th).hasClass('no-sort')) {\n $(dropdownFilterDropdown).find('.dropdown-filter-sort').remove();\n }\n if ($(this.th).hasClass('no-filter')) {\n $(dropdownFilterDropdown).find('.checkbox-container').remove();\n }\n if ($(this.th).hasClass('no-search')) {\n $(dropdownFilterDropdown).find('.dropdown-filter-search').remove();\n }\n return dropdownFilterDropdown;\n }\n\n}\n","import { FilterMenu } from './FilterMenu'\n\nexport class FilterCollection {\n\n filterMenus: Array<FilterMenu>;\n rows: Array<HTMLElement>;\n ths: Array<HTMLElement>;\n table: HTMLElement;\n options: Options;\n target: JQuery;\n\n constructor (target: JQuery, options: Options) {\n this.target = target;\n this.options = options;\n this.ths = target.find('th' + options.columnSelector).toArray()\n this.filterMenus = this.ths.map(function(th: HTMLElement, index: number) {\n let column = $(th).index();\n return new FilterMenu(target, th, column, index, options);\n });\n this.rows = target.find('tbody').find('tr').toArray();\n this.table = target.get(0);\n }\n\n public initialize(): void {\n this.filterMenus.forEach(function(filterMenu) {\n filterMenu.initialize();\n });\n this.bindCheckboxes();\n this.bindSelectAllCheckboxes();\n this.bindSort();\n this.bindSearch();\n }\n\n private bindCheckboxes(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-menu-item.item').change(function() {\n let index = $(this).data('index');\n let value = $(this).val();\n filterMenus[index].updateSelectAll();\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private bindSelectAllCheckboxes(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-menu-item.select-all').change(function() {\n let index = $(this).data('index');\n let value = this.checked;\n filterMenus[index].selectAllUpdate(value);\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private bindSort(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let sort = this.sort;\n let table = this.table;\n let options = this.options;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-sort').click(function() {\n let $sortElement = $(this).find('span');\n let column = $sortElement.data('column');\n let order = $sortElement.attr('class');\n sort(column, order, table, options);\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private bindSearch(): void {\n let filterMenus = this.filterMenus;\n let rows = this.rows;\n let ths = this.ths;\n let updateRowVisibility = this.updateRowVisibility;\n this.target.find('.dropdown-filter-search').keyup(function() {\n let $input = $(this).find('input');\n let index = $input.data('index');\n let value = $input.val();\n filterMenus[index].searchToggle(value);\n updateRowVisibility(filterMenus, rows, ths);\n });\n }\n\n private updateRowVisibility(filterMenus: Array<FilterMenu>, rows: Array<HTMLElement>, ths: Array<HTMLElement>): void {\n let showRows = rows;\n let hideRows: Array<HTMLElement> = [];\n let selectedLists = filterMenus.map(function(filterMenu) {\n return {\n column: filterMenu.column,\n selected: filterMenu.inputs\n .filter(function(input: HTMLInputElement) {\n return input.checked\n }).map(function(input: HTMLInputElement) {\n return input.value.trim().replace(/ +(?= )/g,'');\n })\n };\n });\n for (let i=0; i < rows.length; i++) {\n let tds = rows[i].children;\n for (let j=0; j < selectedLists.length; j++) {\n let content = (tds[selectedLists[j].column] as HTMLElement).innerText.trim().replace(/ +(?= )/g,'')\n if (selectedLists[j].selected.indexOf(content) === -1 ) {\n $(rows[i]).hide();\n break;\n }\n $(rows[i]).show();\n }\n }\n }\n\n private sort(column: number, order: string, table: HTMLElement, options: Options): void {\n let flip = 1;\n if (order === options.captions.z_to_a.toLowerCase().split(' ').join('-')) flip = -1;\n let tbody = $(table).find('tbody').get(0);\n let rows = $(tbody).find('tr').get();\n\n rows.sort(function(a, b) {\n var A = (a.children[column] as HTMLElement).innerText.toUpperCase();\n var B = (b.children[column] as HTMLElement).innerText.toUpperCase();\n\n if (!isNaN(Number(A)) && !isNaN(Number(B))) {\n // handle numbers\n if(Number(A) < Number(B)) return -1*flip;\n if(Number(A) > Number(B)) return 1*flip;\n } else {\n // handle strings\n if(A < B) return -1*flip;\n if(A > B) return 1*flip;\n }\n return 0;\n });\n\n for (var i=0; i < rows.length; i++) {\n tbody.appendChild(rows[i]);\n }\n }\n\n\n}\n","import $ from 'jquery';\nimport { FilterCollection } from './FilterCollection'\n\n// Define the plugin function on the jQuery extension point.\n($.fn as any).excelTableFilter = function (this: JQuery, options: Options) {\n let target = this;\n // Merge the global options with the per-call options.\n options = $.extend({}, ($.fn as any).excelTableFilter.options, options);\n\n if (typeof options.columnSelector === 'undefined') options.columnSelector = '';\n if (typeof options.sort === 'undefined') options.sort = true;\n if (typeof options.search === 'undefined') options.search = true;\n\n if (typeof options.captions === 'undefined') options.captions = {\n a_to_z: 'A to Z',\n z_to_a: 'Z to A',\n search: 'Search',\n select_all: 'Select All'\n }\n\n let filterCollection = new FilterCollection(target, options);\n filterCollection.initialize();\n\n // Return the jQuery object for chaining.\n return target;\n};\n\n// Define the plugin's global default options.\n($.fn as any).excelTableFilter.options = {};\n"]}
@@ -0,0 +1,78 @@
1
+ .dropdown-filter-dropdown {
2
+ position:relative;
3
+ display:inline-block;
4
+ }
5
+
6
+ .dropdown-filter-icon {
7
+ margin-left:5px;
8
+ line-height:1.3;
9
+ border:1px solid black;
10
+ }
11
+
12
+
13
+ .dropdown-filter-icon:hover {
14
+ cursor:pointer;
15
+ }
16
+
17
+ .checkbox-container {
18
+ max-height: 400px;
19
+ overflow-y: scroll;
20
+ }
21
+ .dropdown-filter-content {
22
+ display: none;
23
+ position: absolute;
24
+ background-color: #f9f9f9;
25
+ min-width: 200px;
26
+ box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
27
+ z-index: 1;
28
+ padding-bottom:5px;
29
+ padding-top:5px;
30
+ padding-right:5px;
31
+ padding-left:5px;
32
+ }
33
+
34
+ .dropdown-filter-content div {
35
+ margin-top:5px;
36
+ margin-left:5px;
37
+ margin-right:5px;
38
+ margin-bottom:5px;
39
+ }
40
+
41
+ .dropdown-filter-content div.dropdown-filter-search {
42
+ margin-bottom:10px;
43
+ margin-top:10px;
44
+ }
45
+
46
+
47
+ .dropdown-filter-content div.dropdown-filter-sort {
48
+ padding-top:5px;
49
+ padding-bottom:5px;
50
+ }
51
+
52
+ .dropdown-filter-content div.dropdown-filter-sort:hover {
53
+ background-color:#e1e5e7;
54
+ cursor:pointer;
55
+ }
56
+
57
+ .dropdown-filter-content div.dropdown-filter-sort span {
58
+ margin-right:5px;
59
+ margin-left:5px;
60
+ margin-top:5px;
61
+ margin-bottom:5px;
62
+ color:#000000;
63
+ }
64
+
65
+ .arrow-down {
66
+ border: solid black;
67
+ border-width: 0 3px 3px 0;
68
+ display: inline-block;
69
+ padding: 3px;
70
+ margin-right:5px;
71
+ margin-left:5px;
72
+ transform: rotate(45deg);
73
+ -webkit-transform: rotate(45deg);
74
+ }
75
+
76
+
77
+
78
+