-
Notifications
You must be signed in to change notification settings - Fork 0
/
base.js
69 lines (68 loc) · 2.01 KB
/
base.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
var Plugin = {};
var BS = {
app: function(id, config) {
return BS.make(document.getElementById(id), config);
}
,
make: function(element, config) {
element.className = 'BS-Element ' + config.kind;
return new Plugin[config.kind](element, config);
}
,
plugin: function(name, body) {
var creator = function(element, config) {
body.element = element;
body.plugin = this;
config.self = config.self || {};
this.self = config.self; // needed if later calling config() w/o self.
this.self.plugin = this;
this.self.element = element;
body.init(config);
};
Plugin[name] = creator;
Plugin[name].prototype = {
pluginName: name,
constructor: creator,
config: function(config) {
config.self = config.self || this.self;
var element = config.self.element;
for(var attr in config) {
switch(attr) {
case 'style':
element.setAttribute('style', config.style);
break;
case 'class':
element.className += ' ' + config.class;
break;
case 'kind':
if(config.kind !== this.pluginName) {
console.error('internal error: "' + config.kind + '" !== "' + this.pluginName + '"');
}
break;
case 'self':
break;
case 'onclick':
element.onclick = config.self[config.onclick].bind(config.self);
break;
default:
var setter = body.configurator[attr];
if(setter) {
setter.bind(body)(config[attr]);
} else {
console.warn('unknown configuration attribute "' + attr + '" for ' +
Object.getPrototypeOf(this).pluginName);
}
}
}
}
}
}
,
lib: {
clearElementContent: function(element) {
while (element.firstChild) {
element.removeChild(element.firstChild);
}
}
}
};