annotate default/node_modules/tablesaw/src/tables.columntoggle.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 /*
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 * tablesaw: A set of plugins for responsive tables
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 * Column Toggle: allows the user to toggle which columns are visible.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 * Copyright (c) 2013 Filament Group, Inc.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 * MIT License
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 (function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 var data = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 key: "tablesaw-coltoggle"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 var ColumnToggle = function(element) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 this.$table = $(element);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 if (!this.$table.length) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 this.tablesaw = this.$table.data("tablesaw");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 this.attributes = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 btnTarget: "data-tablesaw-columntoggle-btn-target",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 set: "data-tablesaw-columntoggle-set"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 this.classes = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 columnToggleTable: "tablesaw-columntoggle",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 columnBtnContain: "tablesaw-columntoggle-btnwrap tablesaw-advance",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 columnBtn: "tablesaw-columntoggle-btn tablesaw-nav-btn down",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 popup: "tablesaw-columntoggle-popup",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 priorityPrefix: "tablesaw-priority-"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 this.set = [];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 this.$headers = this.tablesaw._getPrimaryHeaderCells();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 this.$table.data(data.key, this);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 // Column Toggle Sets (one column chooser can control multiple tables)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 ColumnToggle.prototype.initSet = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 var set = this.$table.attr(this.attributes.set);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 if (set) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 // Should not include the current table
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 var table = this.$table[0];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 this.set = $("table[" + this.attributes.set + "='" + set + "']")
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 .filter(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 return this !== table;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 })
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 .get();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 ColumnToggle.prototype.init = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 if (!this.$table.length) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 var tableId,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 id,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 $menuButton,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 $popup,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 $menu,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 $btnContain,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 self = this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 var cfg = this.tablesaw.getConfig({
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 getColumnToggleLabelTemplate: function(text) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 return "<label><input type='checkbox' checked>" + text + "</label>";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 this.$table.addClass(this.classes.columnToggleTable);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 tableId = this.$table.attr("id");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 id = tableId + "-popup";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 $btnContain = $("<div class='" + this.classes.columnBtnContain + "'></div>");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 // TODO next major version: remove .btn
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 $menuButton = $(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 "<a href='#" +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 id +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 "' class='btn tablesaw-btn btn-micro " +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 this.classes.columnBtn +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 "' data-popup-link>" +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 "<span>" +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 Tablesaw.i18n.columnToggleButton +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 "</span></a>"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 $popup = $("<div class='" + this.classes.popup + "' id='" + id + "'></div>");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 $menu = $("<div class='btn-group'></div>");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 this.$popup = $popup;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 var hasNonPersistentHeaders = false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 this.$headers.each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 var $this = $(this),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 priority = $this.attr("data-tablesaw-priority"),
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 $cells = self.tablesaw._$getCells(this);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 if (priority && priority !== "persist") {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 $cells.addClass(self.classes.priorityPrefix + priority);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 $(cfg.getColumnToggleLabelTemplate($this.text()))
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 .appendTo($menu)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 .find('input[type="checkbox"]')
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 .data("tablesaw-header", this);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 hasNonPersistentHeaders = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 if (!hasNonPersistentHeaders) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 $menu.append("<label>" + Tablesaw.i18n.columnToggleError + "</label>");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 $menu.appendTo($popup);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 function onToggleCheckboxChange(checkbox) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120 var checked = checkbox.checked;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 var header = self.getHeaderFromCheckbox(checkbox);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 var $cells = self.tablesaw._$getCells(header);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 $cells[!checked ? "addClass" : "removeClass"]("tablesaw-toggle-cellhidden");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126 $cells[checked ? "addClass" : "removeClass"]("tablesaw-toggle-cellvisible");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128 self.updateColspanCells(header, checked);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 self.$table.trigger("tablesawcolumns");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133 // bind change event listeners to inputs - TODO: move to a private method?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 $menu.find('input[type="checkbox"]').on("change", function(e) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 onToggleCheckboxChange(e.target);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137 if (self.set.length) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 var index;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 $(self.$popup)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140 .find("input[type='checkbox']")
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 .each(function(j) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 if (this === e.target) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143 index = j;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144 return false;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148 $(self.set).each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149 var checkbox = $(this)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 .data(data.key)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151 .$popup.find("input[type='checkbox']")
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 .get(index);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153 if (checkbox) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 checkbox.checked = e.target.checked;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155 onToggleCheckboxChange(checkbox);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 $menuButton.appendTo($btnContain);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 // Use a different target than the toolbar
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
164 var $btnTarget = $(this.$table.attr(this.attributes.btnTarget));
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
165 $btnContain.appendTo($btnTarget.length ? $btnTarget : this.tablesaw.$toolbar);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
166
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
167 function closePopup(event) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
168 // Click came from inside the popup, ignore.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
169 if (event && $(event.target).closest("." + self.classes.popup).length) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
170 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
171 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
172
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
173 $(document).off("click." + tableId);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
174 $menuButton.removeClass("up").addClass("down");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
175 $btnContain.removeClass("visible");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
176 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
177
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
178 var closeTimeout;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
179 function openPopup() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
180 $btnContain.addClass("visible");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
181 $menuButton.removeClass("down").addClass("up");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
182
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
183 $(document).off("click." + tableId, closePopup);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
184
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
185 window.clearTimeout(closeTimeout);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
186 closeTimeout = window.setTimeout(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
187 $(document).on("click." + tableId, closePopup);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
188 }, 15);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
189 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
190
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
191 $menuButton.on("click.tablesaw", function(event) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
192 event.preventDefault();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
193
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
194 if (!$btnContain.is(".visible")) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
195 openPopup();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
196 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
197 closePopup();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
198 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
199 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
200
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
201 $popup.appendTo($btnContain);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
202
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
203 this.$menu = $menu;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
204
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
205 // Fix for iOS not rendering shadows correctly when using `-webkit-overflow-scrolling`
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
206 var $overflow = this.$table.closest(".tablesaw-overflow");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
207 if ($overflow.css("-webkit-overflow-scrolling")) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
208 var timeout;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
209 $overflow.on("scroll", function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
210 var $div = $(this);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
211 window.clearTimeout(timeout);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
212 timeout = window.setTimeout(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
213 $div.css("-webkit-overflow-scrolling", "auto");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
214 window.setTimeout(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
215 $div.css("-webkit-overflow-scrolling", "touch");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
216 }, 0);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
217 }, 100);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
218 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
219 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
220
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
221 $(window).on(Tablesaw.events.resize + "." + tableId, function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
222 self.refreshToggle();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
223 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
224
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
225 this.initSet();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
226 this.refreshToggle();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
227 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
228
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
229 ColumnToggle.prototype.getHeaderFromCheckbox = function(checkbox) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
230 return $(checkbox).data("tablesaw-header");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
231 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
232
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
233 ColumnToggle.prototype.refreshToggle = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
234 var self = this;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
235 var invisibleColumns = 0;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
236 this.$menu.find("input").each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
237 var header = self.getHeaderFromCheckbox(this);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
238 this.checked =
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
239 self.tablesaw
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
240 ._$getCells(header)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
241 .eq(0)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
242 .css("display") === "table-cell";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
243 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
244
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
245 this.updateColspanCells();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
246 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
247
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
248 ColumnToggle.prototype.updateColspanCells = function(header, userAction) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
249 this.tablesaw.updateColspanCells("tablesaw-toggle-cellhidden", header, userAction);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
250 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
251
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
252 ColumnToggle.prototype.destroy = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
253 this.$table.removeClass(this.classes.columnToggleTable);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
254 this.$table.find("th, td").each(function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
255 var $cell = $(this);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
256 $cell.removeClass("tablesaw-toggle-cellhidden").removeClass("tablesaw-toggle-cellvisible");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
257
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
258 this.className = this.className.replace(/\bui\-table\-priority\-\d\b/g, "");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
259 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
260 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
261
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
262 // on tablecreate, init
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
263 $(document).on(Tablesaw.events.create, function(e, tablesaw) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
264 if (tablesaw.mode === "columntoggle") {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
265 var table = new ColumnToggle(tablesaw.table);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
266 table.init();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
267 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
268 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
269
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
270 $(document).on(Tablesaw.events.destroy, function(e, tablesaw) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
271 if (tablesaw.mode === "columntoggle") {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
272 $(tablesaw.table)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
273 .data(data.key)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
274 .destroy();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
275 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
276 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
277
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
278 $(document).on(Tablesaw.events.refresh, function(e, tablesaw) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
279 if (tablesaw.mode === "columntoggle") {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
280 $(tablesaw.table)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
281 .data(data.key)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
282 .refreshPriority();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
283 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
284 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
285
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
286 Tablesaw.ColumnToggle = ColumnToggle;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
287 })();