@base-framework/base 2.6.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base.min.js +1 -0
- package/es5/base.js +2968 -0
- package/es5/modules/ajax.js +663 -0
- package/es5/modules/animation.js +188 -0
- package/es5/modules/animations.js +1080 -0
- package/es5/modules/atom.js +65 -0
- package/es5/modules/component.js +1310 -0
- package/es5/modules/data-binder.js +1131 -0
- package/es5/modules/data.js +1808 -0
- package/es5/modules/date.js +525 -0
- package/es5/modules/form-validator.js +324 -0
- package/es5/modules/history.js +126 -0
- package/es5/modules/html-builder.js +461 -0
- package/es5/modules/layout.js +1679 -0
- package/es5/modules/mouse.js +124 -0
- package/es5/modules/nav-link.js +123 -0
- package/es5/modules/olderversions/animations-ease.js +1095 -0
- package/es5/modules/olderversions/animations-update.js +1048 -0
- package/es5/modules/olderversions/base-animations.js +636 -0
- package/es5/modules/olderversions/base-component-class.js +100 -0
- package/es5/modules/olderversions/base-data-binder-1.js +407 -0
- package/es5/modules/olderversions/base-data-binder-class.js +358 -0
- package/es5/modules/olderversions/base-layout-parser-class.js +172 -0
- package/es5/modules/olderversions/base-mode-1.js +777 -0
- package/es5/modules/olderversions/base-model-class.js +585 -0
- package/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +358 -0
- package/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +585 -0
- package/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +353 -0
- package/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +604 -0
- package/es5/modules/olderversions/data-binder-update-watcher.js +640 -0
- package/es5/modules/olderversions/data-tracker.js +187 -0
- package/es5/modules/olderversions/event-update.js +666 -0
- package/es5/modules/olderversions/nav-link.js +119 -0
- package/es5/modules/olderversions/router-with-templates-1.js +785 -0
- package/es5/modules/olderversions/router-with-templates.js +701 -0
- package/es5/modules/prototypes/ajax.js +657 -0
- package/es5/modules/prototypes/atom.js +65 -0
- package/es5/modules/prototypes/component.js +972 -0
- package/es5/modules/prototypes/data-binder.js +1089 -0
- package/es5/modules/prototypes/data.js +1290 -0
- package/es5/modules/prototypes/html-builder.js +414 -0
- package/es5/modules/prototypes/layout.js +879 -0
- package/es5/modules/router.js +1680 -0
- package/es5/modules/state.js +274 -0
- package/es6/.jshintrc +3 -0
- package/es6/base.js +41 -0
- package/es6/core.js +1 -0
- package/es6/data-tracker.js +351 -0
- package/es6/events.js +602 -0
- package/es6/legacy/es5/base.js +2968 -0
- package/es6/legacy/es5/modules/ajax.js +663 -0
- package/es6/legacy/es5/modules/animation.js +188 -0
- package/es6/legacy/es5/modules/animations.js +1080 -0
- package/es6/legacy/es5/modules/atom.js +65 -0
- package/es6/legacy/es5/modules/component.js +1310 -0
- package/es6/legacy/es5/modules/data-binder.js +1131 -0
- package/es6/legacy/es5/modules/data.js +1808 -0
- package/es6/legacy/es5/modules/date.js +525 -0
- package/es6/legacy/es5/modules/form-validator.js +324 -0
- package/es6/legacy/es5/modules/history.js +126 -0
- package/es6/legacy/es5/modules/html-builder.js +461 -0
- package/es6/legacy/es5/modules/layout.js +1679 -0
- package/es6/legacy/es5/modules/mouse.js +124 -0
- package/es6/legacy/es5/modules/nav-link.js +123 -0
- package/es6/legacy/es5/modules/olderversions/animations-ease.js +1095 -0
- package/es6/legacy/es5/modules/olderversions/animations-update.js +1048 -0
- package/es6/legacy/es5/modules/olderversions/base-animations.js +636 -0
- package/es6/legacy/es5/modules/olderversions/base-component-class.js +100 -0
- package/es6/legacy/es5/modules/olderversions/base-data-binder-1.js +407 -0
- package/es6/legacy/es5/modules/olderversions/base-data-binder-class.js +358 -0
- package/es6/legacy/es5/modules/olderversions/base-layout-parser-class.js +172 -0
- package/es6/legacy/es5/modules/olderversions/base-mode-1.js +777 -0
- package/es6/legacy/es5/modules/olderversions/base-model-class.js +585 -0
- package/es6/legacy/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +358 -0
- package/es6/legacy/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +585 -0
- package/es6/legacy/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +353 -0
- package/es6/legacy/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +604 -0
- package/es6/legacy/es5/modules/olderversions/data-binder-update-watcher.js +640 -0
- package/es6/legacy/es5/modules/olderversions/data-tracker.js +187 -0
- package/es6/legacy/es5/modules/olderversions/event-update.js +666 -0
- package/es6/legacy/es5/modules/olderversions/nav-link.js +119 -0
- package/es6/legacy/es5/modules/olderversions/router-with-templates-1.js +785 -0
- package/es6/legacy/es5/modules/olderversions/router-with-templates.js +701 -0
- package/es6/legacy/es5/modules/prototypes/ajax.js +657 -0
- package/es6/legacy/es5/modules/prototypes/atom.js +65 -0
- package/es6/legacy/es5/modules/prototypes/component.js +972 -0
- package/es6/legacy/es5/modules/prototypes/data-binder.js +1089 -0
- package/es6/legacy/es5/modules/prototypes/data.js +1290 -0
- package/es6/legacy/es5/modules/prototypes/html-builder.js +414 -0
- package/es6/legacy/es5/modules/prototypes/layout.js +879 -0
- package/es6/legacy/es5/modules/router.js +1680 -0
- package/es6/legacy/es5/modules/state.js +274 -0
- package/es6/main.js +1331 -0
- package/es6/modules/ajax/ajax.js +514 -0
- package/es6/modules/animation/animation.js +236 -0
- package/es6/modules/animations/animation-controller.js +231 -0
- package/es6/modules/animations/animation.js +64 -0
- package/es6/modules/animations/attr-movement.js +66 -0
- package/es6/modules/animations/css-movement.js +170 -0
- package/es6/modules/animations/movement.js +131 -0
- package/es6/modules/animations/value.js +187 -0
- package/es6/modules/atom/atom.js +54 -0
- package/es6/modules/component/component.js +230 -0
- package/es6/modules/component/event-helper.js +119 -0
- package/es6/modules/component/jot.js +144 -0
- package/es6/modules/component/state-helper.js +262 -0
- package/es6/modules/component/unit.js +551 -0
- package/es6/modules/data/attrs.js +40 -0
- package/es6/modules/data/basic-data.js +500 -0
- package/es6/modules/data/data-utils.js +29 -0
- package/es6/modules/data/data.js +3 -0
- package/es6/modules/data/deep-data.js +541 -0
- package/es6/modules/data/model-service.js +528 -0
- package/es6/modules/data/model.js +133 -0
- package/es6/modules/data/simple-data.js +33 -0
- package/es6/modules/data-binder/connection-tracker.js +113 -0
- package/es6/modules/data-binder/connection.js +16 -0
- package/es6/modules/data-binder/data-binder.js +352 -0
- package/es6/modules/data-binder/data-pub-sub.js +141 -0
- package/es6/modules/data-binder/data-source.js +56 -0
- package/es6/modules/data-binder/element-source.js +219 -0
- package/es6/modules/data-binder/one-way-connection.js +46 -0
- package/es6/modules/data-binder/one-way-source.js +43 -0
- package/es6/modules/data-binder/source.js +36 -0
- package/es6/modules/data-binder/two-way-connection.js +75 -0
- package/es6/modules/data-binder/two-way-source.js +41 -0
- package/es6/modules/date/date.js +544 -0
- package/es6/modules/history/history.js +89 -0
- package/es6/modules/html-builder/html-builder.js +434 -0
- package/es6/modules/import/import.js +390 -0
- package/es6/modules/layout/layout-builder.js +1269 -0
- package/es6/modules/layout/layout-parser.js +134 -0
- package/es6/modules/layout/watcher-helper.js +282 -0
- package/es6/modules/mouse/mouse.js +114 -0
- package/es6/modules/router/component-helper.js +163 -0
- package/es6/modules/router/history-controller.js +216 -0
- package/es6/modules/router/nav-link.js +124 -0
- package/es6/modules/router/route.js +401 -0
- package/es6/modules/router/router.js +789 -0
- package/es6/modules/router/utils.js +31 -0
- package/es6/modules/state/state-target.js +91 -0
- package/es6/modules/state/state.js +171 -0
- package/es6/package-lock.json +13 -0
- package/es6/package.json +28 -0
- package/es6/shared/objects.js +99 -0
- package/legacy/es5/base.js +2968 -0
- package/legacy/es5/modules/ajax.js +663 -0
- package/legacy/es5/modules/animation.js +188 -0
- package/legacy/es5/modules/animations.js +1080 -0
- package/legacy/es5/modules/atom.js +65 -0
- package/legacy/es5/modules/component.js +1310 -0
- package/legacy/es5/modules/data-binder.js +1131 -0
- package/legacy/es5/modules/data.js +1808 -0
- package/legacy/es5/modules/date.js +525 -0
- package/legacy/es5/modules/form-validator.js +324 -0
- package/legacy/es5/modules/history.js +126 -0
- package/legacy/es5/modules/html-builder.js +461 -0
- package/legacy/es5/modules/layout.js +1679 -0
- package/legacy/es5/modules/mouse.js +124 -0
- package/legacy/es5/modules/nav-link.js +123 -0
- package/legacy/es5/modules/olderversions/animations-ease.js +1095 -0
- package/legacy/es5/modules/olderversions/animations-update.js +1048 -0
- package/legacy/es5/modules/olderversions/base-animations.js +636 -0
- package/legacy/es5/modules/olderversions/base-component-class.js +100 -0
- package/legacy/es5/modules/olderversions/base-data-binder-1.js +407 -0
- package/legacy/es5/modules/olderversions/base-data-binder-class.js +358 -0
- package/legacy/es5/modules/olderversions/base-layout-parser-class.js +172 -0
- package/legacy/es5/modules/olderversions/base-mode-1.js +777 -0
- package/legacy/es5/modules/olderversions/base-model-class.js +585 -0
- package/legacy/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +358 -0
- package/legacy/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +585 -0
- package/legacy/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +353 -0
- package/legacy/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +604 -0
- package/legacy/es5/modules/olderversions/data-binder-update-watcher.js +640 -0
- package/legacy/es5/modules/olderversions/data-tracker.js +187 -0
- package/legacy/es5/modules/olderversions/event-update.js +666 -0
- package/legacy/es5/modules/olderversions/nav-link.js +119 -0
- package/legacy/es5/modules/olderversions/router-with-templates-1.js +785 -0
- package/legacy/es5/modules/olderversions/router-with-templates.js +701 -0
- package/legacy/es5/modules/prototypes/ajax.js +657 -0
- package/legacy/es5/modules/prototypes/atom.js +65 -0
- package/legacy/es5/modules/prototypes/component.js +972 -0
- package/legacy/es5/modules/prototypes/data-binder.js +1089 -0
- package/legacy/es5/modules/prototypes/data.js +1290 -0
- package/legacy/es5/modules/prototypes/html-builder.js +414 -0
- package/legacy/es5/modules/prototypes/layout.js +879 -0
- package/legacy/es5/modules/router.js +1680 -0
- package/legacy/es5/modules/state.js +274 -0
- package/package.json +8 -3
- package/update +16 -0
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
/* base framework module */
|
|
2
|
+
(function()
|
|
3
|
+
{
|
|
4
|
+
"use strict";
|
|
5
|
+
|
|
6
|
+
/*
|
|
7
|
+
DataBinder
|
|
8
|
+
|
|
9
|
+
this create a data bind module to add
|
|
10
|
+
two way data binding to base models.
|
|
11
|
+
|
|
12
|
+
//initialize but no removal
|
|
13
|
+
https://jsfiddle.net/n29qgt42/110/
|
|
14
|
+
*/
|
|
15
|
+
var DataBinder = function(attr)
|
|
16
|
+
{
|
|
17
|
+
this.attr = attr || 'data-bind';
|
|
18
|
+
/* this will create a new pub sub object
|
|
19
|
+
that will be used to propagate the changes */
|
|
20
|
+
this.pubSub = new DataPubSub();
|
|
21
|
+
this.idCount = 0;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
DataBinder.prototype =
|
|
25
|
+
{
|
|
26
|
+
constructor: DataBinder,
|
|
27
|
+
|
|
28
|
+
setup: function()
|
|
29
|
+
{
|
|
30
|
+
this.setupEvents();
|
|
31
|
+
this.pubSub.callBack = base.bind(this, this.messageChange);
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
/* this will add the data bind attr on an
|
|
35
|
+
element for a model property.
|
|
36
|
+
@param (object) element
|
|
37
|
+
@param (object) model
|
|
38
|
+
@param (string) prop */
|
|
39
|
+
bind: function(element, model, prop)
|
|
40
|
+
{
|
|
41
|
+
/* this will add the data binding
|
|
42
|
+
attr to out element so it will subscribe to
|
|
43
|
+
the two model changes */
|
|
44
|
+
var modelId = model.getModelId(),
|
|
45
|
+
attr = this.attr;
|
|
46
|
+
base.attr(element, attr, modelId + '.' + prop);
|
|
47
|
+
|
|
48
|
+
/* this will add a unique id to the elmenent
|
|
49
|
+
so the model will know when the element has
|
|
50
|
+
been updated */
|
|
51
|
+
var id = 'bs-db-' + this.idCount++;
|
|
52
|
+
base.attr(element, attr + '-id', id);
|
|
53
|
+
|
|
54
|
+
/* this will setup the model to update
|
|
55
|
+
from the pubSub element changes */
|
|
56
|
+
this.pubSub.on( id, function(evt, prop, value, committer)
|
|
57
|
+
{
|
|
58
|
+
model.set(prop, value, committer);
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
/* we want to get the staring value of the
|
|
62
|
+
model and set it on our element */
|
|
63
|
+
var value = model.get(prop);
|
|
64
|
+
if(typeof value !== 'undefined')
|
|
65
|
+
{
|
|
66
|
+
this.set(element, value);
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
/* this will setup the binder events that will
|
|
71
|
+
use the pub sub object to modify the bound elements */
|
|
72
|
+
unbind: function(element)
|
|
73
|
+
{
|
|
74
|
+
var bindId = base.data(element, this.attr + '-id');
|
|
75
|
+
this.pubSub.remove(bindId);
|
|
76
|
+
},
|
|
77
|
+
|
|
78
|
+
messageChange: function(message, prop, value, committer)
|
|
79
|
+
{
|
|
80
|
+
var modelId = message;
|
|
81
|
+
if(typeof modelId === 'string' && modelId.indexOf(':') > -1)
|
|
82
|
+
{
|
|
83
|
+
var parts = modelId.split(':');
|
|
84
|
+
modelId = parts[0];
|
|
85
|
+
|
|
86
|
+
this.updateElements(modelId, prop, value, committer);
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
|
|
90
|
+
/* this will update all elements with the model id
|
|
91
|
+
attr.
|
|
92
|
+
@param (string) modelId
|
|
93
|
+
@param (string) prop
|
|
94
|
+
@param (mixed) value
|
|
95
|
+
@param (object) committer */
|
|
96
|
+
updateElements: function(modelId, prop, value, committer)
|
|
97
|
+
{
|
|
98
|
+
var elements = document.querySelectorAll("[" + this.attr + "='" + modelId + '.' + prop + "']");
|
|
99
|
+
if(elements)
|
|
100
|
+
{
|
|
101
|
+
for(var i = 0, len = elements.length; i < len; i++ )
|
|
102
|
+
{
|
|
103
|
+
var element = elements[i];
|
|
104
|
+
if(committer !== element)
|
|
105
|
+
{
|
|
106
|
+
this.set(element, value);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
/* this will set a value on an elememnt.
|
|
113
|
+
@param (object) element
|
|
114
|
+
@param (mixed) value */
|
|
115
|
+
set: function(element, value)
|
|
116
|
+
{
|
|
117
|
+
if(element && typeof element === 'object')
|
|
118
|
+
{
|
|
119
|
+
var tagName = element.tagName.toLowerCase();
|
|
120
|
+
if (tagName === "input" || tagName === "textarea" || tagName === "select" )
|
|
121
|
+
{
|
|
122
|
+
var type = element.type;
|
|
123
|
+
if(type && (type === 'checkbox' || type === 'radio'))
|
|
124
|
+
{
|
|
125
|
+
element.checked = value;
|
|
126
|
+
}
|
|
127
|
+
else
|
|
128
|
+
{
|
|
129
|
+
element.value = value;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else
|
|
133
|
+
{
|
|
134
|
+
element.textContent = value;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
|
|
139
|
+
/* this will get a value on an elememnt.
|
|
140
|
+
@param (object) element
|
|
141
|
+
@param (mixed) value
|
|
142
|
+
@return (mixed) the element value */
|
|
143
|
+
get: function(element)
|
|
144
|
+
{
|
|
145
|
+
var value = '';
|
|
146
|
+
if(element && typeof element === 'object')
|
|
147
|
+
{
|
|
148
|
+
var tagName = element.tagName.toLowerCase();
|
|
149
|
+
if (tagName === "input" || tagName === "textarea" || tagName === "select" )
|
|
150
|
+
{
|
|
151
|
+
var type = element.type;
|
|
152
|
+
if(type && (type === 'checkbox' || type === 'radio'))
|
|
153
|
+
{
|
|
154
|
+
value = element.checked;
|
|
155
|
+
}
|
|
156
|
+
else
|
|
157
|
+
{
|
|
158
|
+
value = element.value;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
else
|
|
162
|
+
{
|
|
163
|
+
value = element.textContent;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
return value;
|
|
167
|
+
},
|
|
168
|
+
|
|
169
|
+
/* this will publish a change to the data binder.
|
|
170
|
+
@param (string) modleId
|
|
171
|
+
@param (string) attrName = the model prop name
|
|
172
|
+
@param (mixed) the prop value
|
|
173
|
+
@param (object) the object committing the change */
|
|
174
|
+
publish: function(modelId, attrName, value, committer)
|
|
175
|
+
{
|
|
176
|
+
var message = modelId + ':change';
|
|
177
|
+
this.pubSub.publish(message, attrName, value, committer);
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
onChange: function(modelId, callBack)
|
|
181
|
+
{
|
|
182
|
+
var message = modelId + ':change';
|
|
183
|
+
this.pubSub.on(message, callBack);
|
|
184
|
+
},
|
|
185
|
+
|
|
186
|
+
/* this will setup the on change handler and
|
|
187
|
+
add the events. this needs to be setup before adding
|
|
188
|
+
the events. */
|
|
189
|
+
changeHandler: null,
|
|
190
|
+
setupEvents: function()
|
|
191
|
+
{
|
|
192
|
+
var dataAttr = this.attr;
|
|
193
|
+
var isDataBound = function(element)
|
|
194
|
+
{
|
|
195
|
+
if(element)
|
|
196
|
+
{
|
|
197
|
+
var value = base.data(element, dataAttr);
|
|
198
|
+
if(value)
|
|
199
|
+
{
|
|
200
|
+
var parts = value.split(".");
|
|
201
|
+
if(parts.length)
|
|
202
|
+
{
|
|
203
|
+
return {
|
|
204
|
+
id: parts[0],
|
|
205
|
+
value: parts[1],
|
|
206
|
+
bindId: base.data(element, dataAttr + '-id')
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return false;
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
/* this will create a closure scope to the object
|
|
215
|
+
by using a local call back function. */
|
|
216
|
+
var self = this, pubSub = this.pubSub;
|
|
217
|
+
this.changeHandler = function(evt)
|
|
218
|
+
{
|
|
219
|
+
if(evt.type === 'keyup')
|
|
220
|
+
{
|
|
221
|
+
var blockedKeys = [
|
|
222
|
+
17, //ctrl
|
|
223
|
+
9, //tab
|
|
224
|
+
16, //shift
|
|
225
|
+
18, //alt
|
|
226
|
+
20, //caps lock
|
|
227
|
+
37, //arrows
|
|
228
|
+
38,
|
|
229
|
+
39,
|
|
230
|
+
40
|
|
231
|
+
];
|
|
232
|
+
/* this will check to block ctrl, shift or alt +
|
|
233
|
+
buttons */
|
|
234
|
+
if(evt.ctrlKey !== false || evt.shiftKey !== false || evt.altKey !== false || base.inArray(blockedKeys, evt.keyCode) !== -1)
|
|
235
|
+
{
|
|
236
|
+
return true;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
var target = evt.target || evt.srcElement;
|
|
241
|
+
var settings = isDataBound(target);
|
|
242
|
+
if(settings)
|
|
243
|
+
{
|
|
244
|
+
var prop = settings.value;
|
|
245
|
+
if(prop && prop !== "")
|
|
246
|
+
{
|
|
247
|
+
var value = self.get(target);
|
|
248
|
+
/* this will publish to the ui and to the
|
|
249
|
+
model that subscribes to the element */
|
|
250
|
+
pubSub.publish(settings.bindId, prop, value, target);
|
|
251
|
+
pubSub.publish(settings.id + ':change', prop, value, target);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
evt.stopPropagation();
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
this.addEvents();
|
|
258
|
+
},
|
|
259
|
+
|
|
260
|
+
/* this will add the binder events */
|
|
261
|
+
addEvents: function()
|
|
262
|
+
{
|
|
263
|
+
base.on(["change", "keyup"], document, this.changeHandler, false);
|
|
264
|
+
},
|
|
265
|
+
|
|
266
|
+
/* this will remove the binder events */
|
|
267
|
+
removeEvents: function()
|
|
268
|
+
{
|
|
269
|
+
base.off(["change", "keyup"], document, this.changeHandler, false);
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
/*
|
|
274
|
+
DataPubSub
|
|
275
|
+
|
|
276
|
+
this will create a pub sub object
|
|
277
|
+
to allow messages to be subscribed to and
|
|
278
|
+
publish changes that will be pushed to the
|
|
279
|
+
subscribers.
|
|
280
|
+
*/
|
|
281
|
+
var DataPubSub = function()
|
|
282
|
+
{
|
|
283
|
+
this.callBacks = {};
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
DataPubSub.prototype =
|
|
287
|
+
{
|
|
288
|
+
constructor: DataPubSub,
|
|
289
|
+
|
|
290
|
+
/* this will get the subscriber array for the
|
|
291
|
+
message or create a new subscriber array if none
|
|
292
|
+
is setup already.
|
|
293
|
+
@param (string) msg
|
|
294
|
+
@return (array) subscriber array */
|
|
295
|
+
get: function(msg)
|
|
296
|
+
{
|
|
297
|
+
var callBacks = this.callBacks;
|
|
298
|
+
return (callBacks[msg] = callBacks[msg] || []);
|
|
299
|
+
},
|
|
300
|
+
|
|
301
|
+
reset: function()
|
|
302
|
+
{
|
|
303
|
+
this.callBacks = [];
|
|
304
|
+
},
|
|
305
|
+
|
|
306
|
+
on: function(msg, callBack)
|
|
307
|
+
{
|
|
308
|
+
var list = this.get(msg);
|
|
309
|
+
list.push(callBack);
|
|
310
|
+
},
|
|
311
|
+
|
|
312
|
+
off: function(msg, callBack)
|
|
313
|
+
{
|
|
314
|
+
var list = this.get(msg);
|
|
315
|
+
var index = base.inArray(list, callBack);
|
|
316
|
+
if(index > -1)
|
|
317
|
+
{
|
|
318
|
+
list.splice(index, 1);
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
|
|
322
|
+
remove: function(msg)
|
|
323
|
+
{
|
|
324
|
+
var list = this.get(msg);
|
|
325
|
+
var index = base.inArray(this.callBacks, list);
|
|
326
|
+
if(index > -1)
|
|
327
|
+
{
|
|
328
|
+
list.splice(this.callBacks, 1);
|
|
329
|
+
}
|
|
330
|
+
},
|
|
331
|
+
|
|
332
|
+
callBack: null,
|
|
333
|
+
|
|
334
|
+
publish: function(msg)
|
|
335
|
+
{
|
|
336
|
+
var list = this.get(msg);
|
|
337
|
+
for ( var i = 0, len = list.length; i < len; i++ )
|
|
338
|
+
{
|
|
339
|
+
list[i].apply(this, arguments);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
if(typeof this.callBack === 'function')
|
|
343
|
+
{
|
|
344
|
+
var params = [msg];
|
|
345
|
+
for(var i = 0, length = arguments.length; i < length; i++)
|
|
346
|
+
{
|
|
347
|
+
params[i] = arguments[i];
|
|
348
|
+
}
|
|
349
|
+
this.callBack.apply(null, params);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
};
|
|
353
|
+
|
|
354
|
+
base.extend.DataPubSub = DataPubSub;
|
|
355
|
+
|
|
356
|
+
var dataBinder = base.extend.DataBinder = new DataBinder();
|
|
357
|
+
dataBinder.setup();
|
|
358
|
+
})();
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
/* base framework module */
|
|
2
|
+
/*
|
|
3
|
+
this will create a layout parser object
|
|
4
|
+
and shortcut functions.
|
|
5
|
+
*/
|
|
6
|
+
(function()
|
|
7
|
+
{
|
|
8
|
+
"use strict";
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
LayoutParser
|
|
12
|
+
|
|
13
|
+
this will parse json object layouts and
|
|
14
|
+
use the basehtmlBuilder to render the layout
|
|
15
|
+
in html.
|
|
16
|
+
*/
|
|
17
|
+
var LayoutParser = function() { };
|
|
18
|
+
|
|
19
|
+
LayoutParser.prototype = base.extendClass(base.htmlBuilder,
|
|
20
|
+
{
|
|
21
|
+
constructor: LayoutParser,
|
|
22
|
+
|
|
23
|
+
/* this will parse a layout object.
|
|
24
|
+
@param (object) obj
|
|
25
|
+
@param (mixed) parent = a parent element
|
|
26
|
+
object or parent id string
|
|
27
|
+
@return (object) a reference to the object */
|
|
28
|
+
parseLayout: function(obj, parent)
|
|
29
|
+
{
|
|
30
|
+
if (typeof parent !== 'object')
|
|
31
|
+
{
|
|
32
|
+
parent = document.getElementById(parent);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (obj && typeof obj !== 'object' && parent && typeof parent !== 'object')
|
|
36
|
+
{
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
var fragment = this.createDocFragment();
|
|
41
|
+
|
|
42
|
+
if (base.isArray(obj))
|
|
43
|
+
{
|
|
44
|
+
for (var i = 0, length = obj.length; i < length; i++)
|
|
45
|
+
{
|
|
46
|
+
var item = obj[i];
|
|
47
|
+
this.parseElement(item, fragment);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else
|
|
51
|
+
{
|
|
52
|
+
this.parseElement(obj, fragment);
|
|
53
|
+
}
|
|
54
|
+
parent.appendChild(fragment);
|
|
55
|
+
|
|
56
|
+
return this;
|
|
57
|
+
},
|
|
58
|
+
|
|
59
|
+
/* this will parse a layout element.
|
|
60
|
+
@param (object) obj
|
|
61
|
+
@param (mixed) parent = a parent element
|
|
62
|
+
object or parent id string */
|
|
63
|
+
parseElement: function(obj, parent)
|
|
64
|
+
{
|
|
65
|
+
var settings = this.getElementSettings(obj);
|
|
66
|
+
var ele = this.create(settings.node, settings.attr, parent);
|
|
67
|
+
if(typeof obj.onCreated === 'function')
|
|
68
|
+
{
|
|
69
|
+
obj.onCreated(ele);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* this will check to bind the element to
|
|
73
|
+
the prop of a model */
|
|
74
|
+
var bind = obj.bind;
|
|
75
|
+
if(bind && typeof bind === 'object')
|
|
76
|
+
{
|
|
77
|
+
base.DataBinder.bind(ele, bind.model, bind.prop);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* we want to recursively add the children to
|
|
81
|
+
the new element */
|
|
82
|
+
var children = settings.children;
|
|
83
|
+
if (children.length > 0)
|
|
84
|
+
{
|
|
85
|
+
for (var i = 0, length = children.length; i < length; i++)
|
|
86
|
+
{
|
|
87
|
+
var child = children[i];
|
|
88
|
+
this.parseElement(child, ele);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
|
|
93
|
+
getElementNode: function(obj)
|
|
94
|
+
{
|
|
95
|
+
var nodeType = 'div';
|
|
96
|
+
|
|
97
|
+
if (typeof obj.node !== 'undefined')
|
|
98
|
+
{
|
|
99
|
+
nodeType = obj.node;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return nodeType;
|
|
103
|
+
},
|
|
104
|
+
|
|
105
|
+
/* this will get the nodeType, attr, and children
|
|
106
|
+
from an element. children can be an array of
|
|
107
|
+
children or an element object.
|
|
108
|
+
@param (object) obj
|
|
109
|
+
@return (object) the attr settings */
|
|
110
|
+
getElementSettings: function(obj)
|
|
111
|
+
{
|
|
112
|
+
var attr = {},
|
|
113
|
+
children = [];
|
|
114
|
+
|
|
115
|
+
for (var key in obj)
|
|
116
|
+
{
|
|
117
|
+
if (obj.hasOwnProperty(key))
|
|
118
|
+
{
|
|
119
|
+
if (key === 'node' || key === 'onCreated' || key === 'bind')
|
|
120
|
+
{
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
var value = obj[key];
|
|
125
|
+
/* we need to filter the children from the attr
|
|
126
|
+
settings. the children need to keep their order. */
|
|
127
|
+
if (key !== 'children' && typeof value !== 'object')
|
|
128
|
+
{
|
|
129
|
+
attr[key] = value;
|
|
130
|
+
}
|
|
131
|
+
else
|
|
132
|
+
{
|
|
133
|
+
if (key === 'children')
|
|
134
|
+
{
|
|
135
|
+
children = children.concat(value);
|
|
136
|
+
}
|
|
137
|
+
else
|
|
138
|
+
{
|
|
139
|
+
children.push(value);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
var node = this.getElementNode(obj);
|
|
146
|
+
if(node === 'button')
|
|
147
|
+
{
|
|
148
|
+
attr.type = 'button';
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return {
|
|
152
|
+
node: this.getElementNode(obj),
|
|
153
|
+
attr: attr,
|
|
154
|
+
children: children
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
/* this will add a reference to the layout parser
|
|
160
|
+
and add a shortcut method to parse lyout objects */
|
|
161
|
+
base.extend.layoutParser = new LayoutParser();
|
|
162
|
+
|
|
163
|
+
/* this will parse a layout object.
|
|
164
|
+
@param (object) obj
|
|
165
|
+
@param (mixed) parent = a parent element
|
|
166
|
+
object or parent id string
|
|
167
|
+
@return (object) a reference to the object */
|
|
168
|
+
base.extend.parseLayout = function(obj, parent)
|
|
169
|
+
{
|
|
170
|
+
base.layoutParser.parseLayout(obj, parent);
|
|
171
|
+
};
|
|
172
|
+
})();
|