Mercurial > hg > isophonics-drupal-site
comparison core/misc/tableheader.js @ 17:129ea1e6d783
Update, including to Drupal core 8.6.10
author | Chris Cannam |
---|---|
date | Thu, 28 Feb 2019 13:21:36 +0000 |
parents | 4c8ae668cc8c |
children |
comparison
equal
deleted
inserted
replaced
16:c2387f117808 | 17:129ea1e6d783 |
---|---|
4 * https://www.drupal.org/node/2815083 | 4 * https://www.drupal.org/node/2815083 |
5 * @preserve | 5 * @preserve |
6 **/ | 6 **/ |
7 | 7 |
8 (function ($, Drupal, displace) { | 8 (function ($, Drupal, displace) { |
9 Drupal.behaviors.tableHeader = { | 9 function TableHeader(table) { |
10 attach: function attach(context) { | 10 var $table = $(table); |
11 $(window).one('scroll.TableHeaderInit', { context: context }, tableHeaderInitHandler); | 11 |
12 this.$originalTable = $table; | |
13 | |
14 this.$originalHeader = $table.children('thead'); | |
15 | |
16 this.$originalHeaderCells = this.$originalHeader.find('> tr > th'); | |
17 | |
18 this.displayWeight = null; | |
19 this.$originalTable.addClass('sticky-table'); | |
20 this.tableHeight = $table[0].clientHeight; | |
21 this.tableOffset = this.$originalTable.offset(); | |
22 | |
23 this.$originalTable.on('columnschange', { tableHeader: this }, function (e, display) { | |
24 var tableHeader = e.data.tableHeader; | |
25 if (tableHeader.displayWeight === null || tableHeader.displayWeight !== display) { | |
26 tableHeader.recalculateSticky(); | |
27 } | |
28 tableHeader.displayWeight = display; | |
29 }); | |
30 | |
31 this.createSticky(); | |
32 } | |
33 | |
34 function forTables(method, arg) { | |
35 var tables = TableHeader.tables; | |
36 var il = tables.length; | |
37 for (var i = 0; i < il; i++) { | |
38 tables[i][method](arg); | |
12 } | 39 } |
13 }; | |
14 | |
15 function scrollValue(position) { | |
16 return document.documentElement[position] || document.body[position]; | |
17 } | 40 } |
18 | 41 |
19 function tableHeaderInitHandler(e) { | 42 function tableHeaderInitHandler(e) { |
20 var $tables = $(e.data.context).find('table.sticky-enabled').once('tableheader'); | 43 var $tables = $(e.data.context).find('table.sticky-enabled').once('tableheader'); |
21 var il = $tables.length; | 44 var il = $tables.length; |
23 TableHeader.tables.push(new TableHeader($tables[i])); | 46 TableHeader.tables.push(new TableHeader($tables[i])); |
24 } | 47 } |
25 forTables('onScroll'); | 48 forTables('onScroll'); |
26 } | 49 } |
27 | 50 |
28 function forTables(method, arg) { | 51 Drupal.behaviors.tableHeader = { |
29 var tables = TableHeader.tables; | 52 attach: function attach(context) { |
30 var il = tables.length; | 53 $(window).one('scroll.TableHeaderInit', { context: context }, tableHeaderInitHandler); |
31 for (var i = 0; i < il; i++) { | |
32 tables[i][method](arg); | |
33 } | 54 } |
55 }; | |
56 | |
57 function scrollValue(position) { | |
58 return document.documentElement[position] || document.body[position]; | |
34 } | 59 } |
35 | 60 |
36 function tableHeaderResizeHandler(e) { | 61 function tableHeaderResizeHandler(e) { |
37 forTables('recalculateSticky'); | 62 forTables('recalculateSticky'); |
38 } | 63 } |
54 $(document).on({ | 79 $(document).on({ |
55 'columnschange.TableHeader': tableHeaderResizeHandler, | 80 'columnschange.TableHeader': tableHeaderResizeHandler, |
56 | 81 |
57 'drupalViewportOffsetChange.TableHeader': tableHeaderOffsetChangeHandler | 82 'drupalViewportOffsetChange.TableHeader': tableHeaderOffsetChangeHandler |
58 }); | 83 }); |
59 | |
60 function TableHeader(table) { | |
61 var $table = $(table); | |
62 | |
63 this.$originalTable = $table; | |
64 | |
65 this.$originalHeader = $table.children('thead'); | |
66 | |
67 this.$originalHeaderCells = this.$originalHeader.find('> tr > th'); | |
68 | |
69 this.displayWeight = null; | |
70 this.$originalTable.addClass('sticky-table'); | |
71 this.tableHeight = $table[0].clientHeight; | |
72 this.tableOffset = this.$originalTable.offset(); | |
73 | |
74 this.$originalTable.on('columnschange', { tableHeader: this }, function (e, display) { | |
75 var tableHeader = e.data.tableHeader; | |
76 if (tableHeader.displayWeight === null || tableHeader.displayWeight !== display) { | |
77 tableHeader.recalculateSticky(); | |
78 } | |
79 tableHeader.displayWeight = display; | |
80 }); | |
81 | |
82 this.createSticky(); | |
83 } | |
84 | 84 |
85 $.extend(TableHeader, { | 85 $.extend(TableHeader, { |
86 tables: [] | 86 tables: [] |
87 }); | 87 }); |
88 | 88 |
162 this.$stickyTable.css('width', this.$originalTable.outerWidth()); | 162 this.$stickyTable.css('width', this.$originalTable.outerWidth()); |
163 } | 163 } |
164 }); | 164 }); |
165 | 165 |
166 Drupal.TableHeader = TableHeader; | 166 Drupal.TableHeader = TableHeader; |
167 })(jQuery, Drupal, window.parent.Drupal.displace); | 167 })(jQuery, Drupal, window.Drupal.displace); |