forked from xsokev/Dojo-Bootstrap
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Button.js
94 lines (88 loc) · 3.36 KB
/
Button.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
/* ==========================================================
* Button.js v1.1.0
* ==========================================================
* Copyright 2012 xsokev
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
define([
"./Support",
"dojo/_base/declare",
"dojo/query",
"dojo/_base/lang",
'dojo/_base/window',
'dojo/on',
'dojo/dom-class',
"dojo/dom-attr",
"dojo/NodeList-dom",
'dojo/NodeList-traverse',
"dojo/domReady!"
], function (support, declare, query, lang, win, on, domClass, domAttr) {
"use strict";
var toggleSelector = '[data-toggle^=button]';
var toggleRadioSelector = '[data-toggle="buttons-radio"]';
var Button = declare([], {
defaultOptions:{
"loading-text":'loading...'
},
constructor:function (element, options) {
this.options = lang.mixin(lang.clone(this.defaultOptions), (options || {}));
this.domNode = element;
},
setState:function (state) {
var _this = this;
var d = 'disabled';
support.getData(this.domNode, 'reset-text', lang.trim((this.domNode.tag === "INPUT") ? this.domNode.val : this.domNode.innerHTML));
state = state + '-text';
var data = support.getData(this.domNode, state);
this.domNode[(this.domNode.tag === "INPUT") ? "val" : "innerHTML"] = data || this.options[state];
setTimeout(function () {
if (state === 'loading-text') {
domClass.add(_this.domNode, d);
domAttr.set(_this.domNode, d, d);
} else {
domClass.remove(_this.domNode, d);
domAttr.remove(_this.domNode, d);
}
}, 0);
},
toggle:function () {
var $parent = query(this.domNode).parents(toggleRadioSelector);
if ($parent.length) {
query('.active', $parent[0]).removeClass('active');
}
domClass.toggle(this.domNode, 'active');
}
});
lang.extend(query.NodeList, {
button:function (option) {
var options = (lang.isObject(option)) ? option : {};
return this.forEach(function (node) {
var data = support.getData(node, 'button');
if (!data) {
support.setData(node, 'button', (data = new Button(node, options)));
}
if (lang.isString(option) && option === 'toggle') {
data.toggle();
}
else if (option) {
data.setState(option);
}
});
}
});
on(win.body(), on.selector(toggleSelector, '.btn:click'), function (e) {
query(e.target).button('toggle');
});
return Button;
});