@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.
Files changed (190) hide show
  1. package/base.min.js +1 -0
  2. package/es5/base.js +2968 -0
  3. package/es5/modules/ajax.js +663 -0
  4. package/es5/modules/animation.js +188 -0
  5. package/es5/modules/animations.js +1080 -0
  6. package/es5/modules/atom.js +65 -0
  7. package/es5/modules/component.js +1310 -0
  8. package/es5/modules/data-binder.js +1131 -0
  9. package/es5/modules/data.js +1808 -0
  10. package/es5/modules/date.js +525 -0
  11. package/es5/modules/form-validator.js +324 -0
  12. package/es5/modules/history.js +126 -0
  13. package/es5/modules/html-builder.js +461 -0
  14. package/es5/modules/layout.js +1679 -0
  15. package/es5/modules/mouse.js +124 -0
  16. package/es5/modules/nav-link.js +123 -0
  17. package/es5/modules/olderversions/animations-ease.js +1095 -0
  18. package/es5/modules/olderversions/animations-update.js +1048 -0
  19. package/es5/modules/olderversions/base-animations.js +636 -0
  20. package/es5/modules/olderversions/base-component-class.js +100 -0
  21. package/es5/modules/olderversions/base-data-binder-1.js +407 -0
  22. package/es5/modules/olderversions/base-data-binder-class.js +358 -0
  23. package/es5/modules/olderversions/base-layout-parser-class.js +172 -0
  24. package/es5/modules/olderversions/base-mode-1.js +777 -0
  25. package/es5/modules/olderversions/base-model-class.js +585 -0
  26. package/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +358 -0
  27. package/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +585 -0
  28. package/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +353 -0
  29. package/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +604 -0
  30. package/es5/modules/olderversions/data-binder-update-watcher.js +640 -0
  31. package/es5/modules/olderversions/data-tracker.js +187 -0
  32. package/es5/modules/olderversions/event-update.js +666 -0
  33. package/es5/modules/olderversions/nav-link.js +119 -0
  34. package/es5/modules/olderversions/router-with-templates-1.js +785 -0
  35. package/es5/modules/olderversions/router-with-templates.js +701 -0
  36. package/es5/modules/prototypes/ajax.js +657 -0
  37. package/es5/modules/prototypes/atom.js +65 -0
  38. package/es5/modules/prototypes/component.js +972 -0
  39. package/es5/modules/prototypes/data-binder.js +1089 -0
  40. package/es5/modules/prototypes/data.js +1290 -0
  41. package/es5/modules/prototypes/html-builder.js +414 -0
  42. package/es5/modules/prototypes/layout.js +879 -0
  43. package/es5/modules/router.js +1680 -0
  44. package/es5/modules/state.js +274 -0
  45. package/es6/.jshintrc +3 -0
  46. package/es6/base.js +41 -0
  47. package/es6/core.js +1 -0
  48. package/es6/data-tracker.js +351 -0
  49. package/es6/events.js +602 -0
  50. package/es6/legacy/es5/base.js +2968 -0
  51. package/es6/legacy/es5/modules/ajax.js +663 -0
  52. package/es6/legacy/es5/modules/animation.js +188 -0
  53. package/es6/legacy/es5/modules/animations.js +1080 -0
  54. package/es6/legacy/es5/modules/atom.js +65 -0
  55. package/es6/legacy/es5/modules/component.js +1310 -0
  56. package/es6/legacy/es5/modules/data-binder.js +1131 -0
  57. package/es6/legacy/es5/modules/data.js +1808 -0
  58. package/es6/legacy/es5/modules/date.js +525 -0
  59. package/es6/legacy/es5/modules/form-validator.js +324 -0
  60. package/es6/legacy/es5/modules/history.js +126 -0
  61. package/es6/legacy/es5/modules/html-builder.js +461 -0
  62. package/es6/legacy/es5/modules/layout.js +1679 -0
  63. package/es6/legacy/es5/modules/mouse.js +124 -0
  64. package/es6/legacy/es5/modules/nav-link.js +123 -0
  65. package/es6/legacy/es5/modules/olderversions/animations-ease.js +1095 -0
  66. package/es6/legacy/es5/modules/olderversions/animations-update.js +1048 -0
  67. package/es6/legacy/es5/modules/olderversions/base-animations.js +636 -0
  68. package/es6/legacy/es5/modules/olderversions/base-component-class.js +100 -0
  69. package/es6/legacy/es5/modules/olderversions/base-data-binder-1.js +407 -0
  70. package/es6/legacy/es5/modules/olderversions/base-data-binder-class.js +358 -0
  71. package/es6/legacy/es5/modules/olderversions/base-layout-parser-class.js +172 -0
  72. package/es6/legacy/es5/modules/olderversions/base-mode-1.js +777 -0
  73. package/es6/legacy/es5/modules/olderversions/base-model-class.js +585 -0
  74. package/es6/legacy/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +358 -0
  75. package/es6/legacy/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +585 -0
  76. package/es6/legacy/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +353 -0
  77. package/es6/legacy/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +604 -0
  78. package/es6/legacy/es5/modules/olderversions/data-binder-update-watcher.js +640 -0
  79. package/es6/legacy/es5/modules/olderversions/data-tracker.js +187 -0
  80. package/es6/legacy/es5/modules/olderversions/event-update.js +666 -0
  81. package/es6/legacy/es5/modules/olderversions/nav-link.js +119 -0
  82. package/es6/legacy/es5/modules/olderversions/router-with-templates-1.js +785 -0
  83. package/es6/legacy/es5/modules/olderversions/router-with-templates.js +701 -0
  84. package/es6/legacy/es5/modules/prototypes/ajax.js +657 -0
  85. package/es6/legacy/es5/modules/prototypes/atom.js +65 -0
  86. package/es6/legacy/es5/modules/prototypes/component.js +972 -0
  87. package/es6/legacy/es5/modules/prototypes/data-binder.js +1089 -0
  88. package/es6/legacy/es5/modules/prototypes/data.js +1290 -0
  89. package/es6/legacy/es5/modules/prototypes/html-builder.js +414 -0
  90. package/es6/legacy/es5/modules/prototypes/layout.js +879 -0
  91. package/es6/legacy/es5/modules/router.js +1680 -0
  92. package/es6/legacy/es5/modules/state.js +274 -0
  93. package/es6/main.js +1331 -0
  94. package/es6/modules/ajax/ajax.js +514 -0
  95. package/es6/modules/animation/animation.js +236 -0
  96. package/es6/modules/animations/animation-controller.js +231 -0
  97. package/es6/modules/animations/animation.js +64 -0
  98. package/es6/modules/animations/attr-movement.js +66 -0
  99. package/es6/modules/animations/css-movement.js +170 -0
  100. package/es6/modules/animations/movement.js +131 -0
  101. package/es6/modules/animations/value.js +187 -0
  102. package/es6/modules/atom/atom.js +54 -0
  103. package/es6/modules/component/component.js +230 -0
  104. package/es6/modules/component/event-helper.js +119 -0
  105. package/es6/modules/component/jot.js +144 -0
  106. package/es6/modules/component/state-helper.js +262 -0
  107. package/es6/modules/component/unit.js +551 -0
  108. package/es6/modules/data/attrs.js +40 -0
  109. package/es6/modules/data/basic-data.js +500 -0
  110. package/es6/modules/data/data-utils.js +29 -0
  111. package/es6/modules/data/data.js +3 -0
  112. package/es6/modules/data/deep-data.js +541 -0
  113. package/es6/modules/data/model-service.js +528 -0
  114. package/es6/modules/data/model.js +133 -0
  115. package/es6/modules/data/simple-data.js +33 -0
  116. package/es6/modules/data-binder/connection-tracker.js +113 -0
  117. package/es6/modules/data-binder/connection.js +16 -0
  118. package/es6/modules/data-binder/data-binder.js +352 -0
  119. package/es6/modules/data-binder/data-pub-sub.js +141 -0
  120. package/es6/modules/data-binder/data-source.js +56 -0
  121. package/es6/modules/data-binder/element-source.js +219 -0
  122. package/es6/modules/data-binder/one-way-connection.js +46 -0
  123. package/es6/modules/data-binder/one-way-source.js +43 -0
  124. package/es6/modules/data-binder/source.js +36 -0
  125. package/es6/modules/data-binder/two-way-connection.js +75 -0
  126. package/es6/modules/data-binder/two-way-source.js +41 -0
  127. package/es6/modules/date/date.js +544 -0
  128. package/es6/modules/history/history.js +89 -0
  129. package/es6/modules/html-builder/html-builder.js +434 -0
  130. package/es6/modules/import/import.js +390 -0
  131. package/es6/modules/layout/layout-builder.js +1269 -0
  132. package/es6/modules/layout/layout-parser.js +134 -0
  133. package/es6/modules/layout/watcher-helper.js +282 -0
  134. package/es6/modules/mouse/mouse.js +114 -0
  135. package/es6/modules/router/component-helper.js +163 -0
  136. package/es6/modules/router/history-controller.js +216 -0
  137. package/es6/modules/router/nav-link.js +124 -0
  138. package/es6/modules/router/route.js +401 -0
  139. package/es6/modules/router/router.js +789 -0
  140. package/es6/modules/router/utils.js +31 -0
  141. package/es6/modules/state/state-target.js +91 -0
  142. package/es6/modules/state/state.js +171 -0
  143. package/es6/package-lock.json +13 -0
  144. package/es6/package.json +28 -0
  145. package/es6/shared/objects.js +99 -0
  146. package/legacy/es5/base.js +2968 -0
  147. package/legacy/es5/modules/ajax.js +663 -0
  148. package/legacy/es5/modules/animation.js +188 -0
  149. package/legacy/es5/modules/animations.js +1080 -0
  150. package/legacy/es5/modules/atom.js +65 -0
  151. package/legacy/es5/modules/component.js +1310 -0
  152. package/legacy/es5/modules/data-binder.js +1131 -0
  153. package/legacy/es5/modules/data.js +1808 -0
  154. package/legacy/es5/modules/date.js +525 -0
  155. package/legacy/es5/modules/form-validator.js +324 -0
  156. package/legacy/es5/modules/history.js +126 -0
  157. package/legacy/es5/modules/html-builder.js +461 -0
  158. package/legacy/es5/modules/layout.js +1679 -0
  159. package/legacy/es5/modules/mouse.js +124 -0
  160. package/legacy/es5/modules/nav-link.js +123 -0
  161. package/legacy/es5/modules/olderversions/animations-ease.js +1095 -0
  162. package/legacy/es5/modules/olderversions/animations-update.js +1048 -0
  163. package/legacy/es5/modules/olderversions/base-animations.js +636 -0
  164. package/legacy/es5/modules/olderversions/base-component-class.js +100 -0
  165. package/legacy/es5/modules/olderversions/base-data-binder-1.js +407 -0
  166. package/legacy/es5/modules/olderversions/base-data-binder-class.js +358 -0
  167. package/legacy/es5/modules/olderversions/base-layout-parser-class.js +172 -0
  168. package/legacy/es5/modules/olderversions/base-mode-1.js +777 -0
  169. package/legacy/es5/modules/olderversions/base-model-class.js +585 -0
  170. package/legacy/es5/modules/olderversions/data-binder/element-binding/base-data-binder-class.js +358 -0
  171. package/legacy/es5/modules/olderversions/data-binder/element-binding/base-model-class.js +585 -0
  172. package/legacy/es5/modules/olderversions/data-binder/model-binding/base-data-binder-class.js +353 -0
  173. package/legacy/es5/modules/olderversions/data-binder/model-binding/base-model-class.js +604 -0
  174. package/legacy/es5/modules/olderversions/data-binder-update-watcher.js +640 -0
  175. package/legacy/es5/modules/olderversions/data-tracker.js +187 -0
  176. package/legacy/es5/modules/olderversions/event-update.js +666 -0
  177. package/legacy/es5/modules/olderversions/nav-link.js +119 -0
  178. package/legacy/es5/modules/olderversions/router-with-templates-1.js +785 -0
  179. package/legacy/es5/modules/olderversions/router-with-templates.js +701 -0
  180. package/legacy/es5/modules/prototypes/ajax.js +657 -0
  181. package/legacy/es5/modules/prototypes/atom.js +65 -0
  182. package/legacy/es5/modules/prototypes/component.js +972 -0
  183. package/legacy/es5/modules/prototypes/data-binder.js +1089 -0
  184. package/legacy/es5/modules/prototypes/data.js +1290 -0
  185. package/legacy/es5/modules/prototypes/html-builder.js +414 -0
  186. package/legacy/es5/modules/prototypes/layout.js +879 -0
  187. package/legacy/es5/modules/router.js +1680 -0
  188. package/legacy/es5/modules/state.js +274 -0
  189. package/package.json +8 -3
  190. 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
+ })();