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);