This repository has been archived by the owner on Oct 21, 2022. It is now read-only.
/
tables.btnmarkup.js
97 lines (83 loc) · 2.14 KB
/
tables.btnmarkup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
* tablesaw: A set of plugins for responsive tables
* Button component
* Copyright (c) 2013 Filament Group, Inc.
* MIT License
*/
(function() {
var pluginName = "tablesawbtn",
methods = {
_create: function() {
return $(this).each(function() {
$(this)
.trigger("beforecreate." + pluginName)
[pluginName]("_init")
.trigger("create." + pluginName);
});
},
_init: function() {
var oEl = $(this),
sel = this.getElementsByTagName("select")[0];
if (sel) {
// TODO next major version: remove .btn-select
$(this)
.addClass("btn-select tablesaw-btn-select")
[pluginName]("_select", sel);
}
return oEl;
},
_select: function(sel) {
var update = function(oEl, sel) {
var opts = $(sel).find("option");
var label = document.createElement("span");
var el;
var children;
var found = false;
label.setAttribute("aria-hidden", "true");
label.innerHTML = " ";
opts.each(function() {
var opt = this;
if (opt.selected) {
label.innerHTML = opt.text;
}
});
children = oEl.childNodes;
if (opts.length > 0) {
for (var i = 0, l = children.length; i < l; i++) {
el = children[i];
if (el && el.nodeName.toUpperCase() === "SPAN") {
oEl.replaceChild(label, el);
found = true;
}
}
if (!found) {
oEl.insertBefore(label, oEl.firstChild);
}
}
};
update(this, sel);
// todo should this be tablesawrefresh?
$(this).on("change refresh", function() {
update(this, sel);
});
}
};
// Collection method.
$.fn[pluginName] = function(arrg, a, b, c) {
return this.each(function() {
// if it's a method
if (arrg && typeof arrg === "string") {
return $.fn[pluginName].prototype[arrg].call(this, a, b, c);
}
// don't re-init
if ($(this).data(pluginName + "active")) {
return $(this);
}
$(this).data(pluginName + "active", true);
$.fn[pluginName].prototype._create.call(this);
});
};
// add methods
$.extend($.fn[pluginName].prototype, methods);
// TODO OOP this and add to Tablesaw object
})();