@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,657 @@
1
+ /* base framework module */
2
+ (function()
3
+ {
4
+ "use strict";
5
+
6
+ /**
7
+ * This is the default xhr (ajax) settings.
8
+ */
9
+ var XhrDefaultSettings =
10
+ {
11
+ url: '',
12
+
13
+ /* this is the responseType of the server
14
+ response (string) */
15
+ responseType: 'json',
16
+
17
+ /* this is the server method */
18
+ method: 'POST',
19
+
20
+ /* this can fix a param string to be added
21
+ to every ajax request */
22
+ fixedParams: '',
23
+
24
+ /* headers (object) */
25
+ headers:
26
+ {
27
+ 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
28
+ },
29
+
30
+ /* this will set the ajax request to async (bool) */
31
+ async: true,
32
+
33
+ /* cross domain (bool) */
34
+ crossDomain: false,
35
+
36
+ /* cors with credentials (bool) */
37
+ withCredentials: false,
38
+
39
+ /* events (function) */
40
+ completed: null,
41
+ failed: null,
42
+ aborted: null,
43
+ progress: null
44
+ };
45
+
46
+ /**
47
+ * This is the xhr factory that can create new xhr objects.
48
+ */
49
+ var XhrFactory =
50
+ {
51
+ /**
52
+ * This will create an xhr object.
53
+ *
54
+ * @return {(object|null)}
55
+ */
56
+ _createXHR: function()
57
+ {
58
+ /* create a local function to perform the check
59
+ once then override the function */
60
+ var createXhr;
61
+ if(typeof XMLHttpRequest !== "undefined")
62
+ {
63
+ // modern browsers
64
+ createXhr = function()
65
+ {
66
+ return new XMLHttpRequest();
67
+ };
68
+ }
69
+ else
70
+ {
71
+ try{
72
+ createXhr = function()
73
+ {
74
+ return new ActiveXObject("Msxml2.XMLHTTP");
75
+ };
76
+ }
77
+ catch(e)
78
+ {
79
+ try{
80
+ createXhr = function()
81
+ {
82
+ return new ActiveXObject("Microsoft.XMLHTTP");
83
+ };
84
+ }
85
+ catch(err)
86
+ {
87
+
88
+ }
89
+ }
90
+
91
+ if(!createXhr)
92
+ {
93
+ createXhr = function()
94
+ {
95
+ return false;
96
+ };
97
+ }
98
+ }
99
+
100
+ return base.override(this, '_createXHR', createXhr, arguments);
101
+ },
102
+
103
+ /**
104
+ * This will create a CORS xhr object.
105
+ *
106
+ * @return {(object|null)}
107
+ */
108
+ _createCorsXHR: function()
109
+ {
110
+ /* create a local function to perform the check
111
+ once then override the function */
112
+ var createXhr;
113
+ if(typeof XMLHttpRequest !== "undefined" && typeof XDomainRequest === "undefined")
114
+ {
115
+ // modern browsers
116
+ createXhr = function()
117
+ {
118
+ return new XMLHttpRequest();
119
+ };
120
+ }
121
+ else if(typeof XDomainRequest !== "undefined")
122
+ {
123
+ createXhr = function()
124
+ {
125
+ return new XDomainRequest();
126
+ };
127
+ }
128
+ else
129
+ {
130
+ createXhr = function()
131
+ {
132
+ return false;
133
+ };
134
+ }
135
+
136
+ return base.override(this, '_createCorsXHR', createXhr, arguments);
137
+ }
138
+ };
139
+
140
+ /* this will add ajax settings to the base class */
141
+ base.augment(
142
+ {
143
+ /**
144
+ * @member {object} xhrSettings
145
+ */
146
+ xhrSettings: XhrDefaultSettings,
147
+
148
+ /**
149
+ * This will add fixed params to each xhr request.
150
+ *
151
+ * @param {(string|object)} params
152
+ */
153
+ addFixedParams: function(params)
154
+ {
155
+ base.xhrSettings.fixedParams = params;
156
+ },
157
+
158
+ /**
159
+ * This will update the xhr settings.
160
+ *
161
+ * @param {object} settingsObj
162
+ */
163
+ ajaxSettings: function(settingsObj)
164
+ {
165
+ if(typeof settingsObj === 'object')
166
+ {
167
+ base.xhrSettings = base.extendClass(base.xhrSettings, settingsObj);
168
+ }
169
+ },
170
+
171
+ /**
172
+ * This will reset the xhr settings.
173
+ */
174
+ resetAjaxSettings: function()
175
+ {
176
+ base.xhrSettings = XhrDefaultSettings;
177
+ }
178
+ });
179
+
180
+ /**
181
+ * This will make an xhr (ajax) request.
182
+ *
183
+ * @param {string} url
184
+ * @param {string} params
185
+ * @param {function} callBackFn
186
+ * @param {string} responseType
187
+ * @param {string} [method=POST]
188
+ * @param {boolean} async
189
+ *
190
+ * or
191
+ *
192
+ * @param {object} settings
193
+ * @example
194
+ * {
195
+ * url: '',
196
+ * params: '',
197
+ * completed: function(response)
198
+ * {
199
+ *
200
+ * }
201
+ * }
202
+ *
203
+ * @return {object} xhr object.
204
+ */
205
+ base.extend.ajax = function()
206
+ {
207
+ /* we want to save the args so we can check
208
+ which way we are adding the ajax settings */
209
+ var args = base.listToArray(arguments),
210
+ ajax = new XhrRequest(args);
211
+ return ajax.xhr;
212
+ };
213
+
214
+ /**
215
+ * XhrRequest
216
+ *
217
+ * This will create an xhr request object.
218
+ * @class
219
+ */
220
+ var XhrRequest = base.Class.extend(
221
+ {
222
+ /**
223
+ * @constructor
224
+ * @param {*} args
225
+ */
226
+ constructor: function(args)
227
+ {
228
+ this.settings = null;
229
+ this.xhr = null;
230
+ this.setup(args);
231
+ },
232
+
233
+ /**
234
+ * This will setup the xhr request.
235
+ *
236
+ * @protected
237
+ * @param {*} args
238
+ * @return {(object|boolean)}
239
+ */
240
+ setup: function(args)
241
+ {
242
+ this.getXhrSettings(args);
243
+
244
+ var xhr = this.xhr = this.createXHR();
245
+ if(xhr === false)
246
+ {
247
+ return false;
248
+ }
249
+
250
+ var settings = this.settings;
251
+ xhr.open(settings.method, settings.url, settings.async);
252
+
253
+ this.setupHeaders();
254
+ this.addXhrEvents();
255
+
256
+ /* this will setup the params and send the
257
+ xhr request */
258
+ xhr.send(this.getParams());
259
+ },
260
+
261
+ /**
262
+ * This will convert an object to a string.
263
+ *
264
+ * @protected
265
+ * @param {object} object
266
+ * @return {string}
267
+ */
268
+ objectToString: function(object)
269
+ {
270
+ var params = [];
271
+ for (var prop in object)
272
+ {
273
+ if(object.hasOwnProperty(prop))
274
+ {
275
+ params.push(prop + '=' + object[prop]);
276
+ }
277
+ }
278
+ return params.join('&');
279
+ },
280
+
281
+ /**
282
+ * This will add the base params to the request params.
283
+ *
284
+ * @protected
285
+ * @param {*} params
286
+ * @param {*} addingParams
287
+ * @return {*}
288
+ */
289
+ setupParams: function(params, addingParams)
290
+ {
291
+ var paramsType = typeof params;
292
+ if(addingParams)
293
+ {
294
+ /* this will convert the adding params to match
295
+ the params type */
296
+ var addingType = typeof addingParams;
297
+ if(paramsType === 'string')
298
+ {
299
+ if(addingType !== 'string')
300
+ {
301
+ addingParams = this.objectToString(addingParams);
302
+ }
303
+
304
+ var char = (params === '')? '?' : '&';
305
+ params += char + addingParams;
306
+ }
307
+ else
308
+ {
309
+ if(addingType === 'string')
310
+ {
311
+ addingParams = base.parseQueryString(addingParams);
312
+ }
313
+
314
+ if(params instanceof FormData)
315
+ {
316
+ for(var key in addingParams)
317
+ {
318
+ if(addingParams.hasOwnProperty(key))
319
+ {
320
+ params.append(key, addingParams[key]);
321
+ }
322
+ }
323
+ }
324
+ else if(paramsType === 'object')
325
+ {
326
+ /* we don't want to modify the original object
327
+ so we need to clone the object before extending */
328
+ params = base.clone(params);
329
+
330
+ params = base.extendObject(addingParams, params);
331
+ params = this.objectToString(params);
332
+ }
333
+ }
334
+ }
335
+ else
336
+ {
337
+ if((params instanceof FormData) === false && paramsType === 'object')
338
+ {
339
+ params = this.objectToString(params);
340
+ }
341
+ }
342
+ return params;
343
+ },
344
+
345
+ /**
346
+ * This will get the params.
347
+ * @protected
348
+ * @return {*}
349
+ */
350
+ getParams: function()
351
+ {
352
+ var settings = this.settings,
353
+ params = settings.params;
354
+
355
+ var fixedParams = settings.fixedParams;
356
+ if(params)
357
+ {
358
+ params = this.setupParams(params, fixedParams);
359
+ }
360
+ else if(fixedParams)
361
+ {
362
+ params = this.setupParams(fixedParams);
363
+ }
364
+
365
+ return params;
366
+ },
367
+
368
+ /**
369
+ * This will set the settings from the args.
370
+ *
371
+ * @protected
372
+ * @param {array} args
373
+ */
374
+ getXhrSettings: function(args)
375
+ {
376
+ /* we want to create a clone of the default
377
+ settings before adding the new settings */
378
+ var settings = this.settings = base.createObject(base.xhrSettings);
379
+
380
+ /* we want to check if we are adding the ajax settings by
381
+ individual args or by a settings object */
382
+ if(args.length >= 2 && typeof args[0] !== 'object')
383
+ {
384
+ for(var i = 0, maxLength = args.length; i < maxLength; i++)
385
+ {
386
+ var arg = args[i];
387
+
388
+ switch(i)
389
+ {
390
+ case 0:
391
+ settings.url = arg;
392
+ break;
393
+ case 1:
394
+ settings.params = arg;
395
+ break;
396
+ case 2:
397
+ settings.completed = arg;
398
+ settings.failed = arg;
399
+ break;
400
+ case 3:
401
+ settings.responseType = arg || 'json';
402
+ break;
403
+ case 4:
404
+ settings.method = (arg)? arg.toUpperCase() : 'POST';
405
+ break;
406
+ case 5:
407
+ settings.async = (typeof arg !== 'undefined')? arg : true;
408
+ break;
409
+ }
410
+ }
411
+ }
412
+ else
413
+ {
414
+ /* override the default settings with the args
415
+ settings object */
416
+ settings = this.settings = base.extendClass(this.settings, args[0]);
417
+
418
+ /* we want to check to add the completed callback
419
+ as the error and aborted if not set */
420
+ if(typeof settings.completed === 'function')
421
+ {
422
+ if(typeof settings.failed !== 'function')
423
+ {
424
+ settings.failed = settings.completed;
425
+ }
426
+
427
+ if(typeof settings.aborted !== 'function')
428
+ {
429
+ settings.aborted = settings.failed;
430
+ }
431
+ }
432
+ }
433
+ },
434
+
435
+ /**
436
+ * This will create the xhr object.
437
+ *
438
+ * @protected
439
+ * @return {(object|boolean)}
440
+ */
441
+ createXHR: function()
442
+ {
443
+ /* we want to check to setup the xhr by
444
+ the crossDomain settings */
445
+ var settings = this.settings;
446
+ var xhr = (settings && settings.crossDomain === true)? XhrFactory._createCorsXHR() : XhrFactory._createXHR();
447
+ if(!xhr)
448
+ {
449
+ return false;
450
+ }
451
+
452
+ if(xhr.hasOwnProperty('responseType'))
453
+ {
454
+ xhr.responseType = settings.responseType;
455
+ }
456
+
457
+ if(settings.withCredentials === true)
458
+ {
459
+ xhr.withCredentials = true;
460
+ }
461
+
462
+ return xhr;
463
+ },
464
+
465
+ /**
466
+ * This will setup the request headers.
467
+ */
468
+ setupHeaders: function()
469
+ {
470
+ var settings = this.settings;
471
+ if(settings && typeof settings.headers === 'object')
472
+ {
473
+ /* we want to add a header for each
474
+ property in the object */
475
+ var headers = settings.headers;
476
+ for(var header in headers)
477
+ {
478
+ if(headers.hasOwnProperty(header))
479
+ {
480
+ this.xhr.setRequestHeader(header, headers[header]);
481
+ }
482
+ }
483
+ }
484
+ },
485
+
486
+ /**
487
+ * This will update the request status.
488
+ *
489
+ * @param {object} e
490
+ * @param {string} [overrideType]
491
+ */
492
+ update: function(e, overrideType)
493
+ {
494
+ e = e || window.event;
495
+
496
+ var xhr = this.xhr;
497
+
498
+ /* this will remove the xhr events from the active events
499
+ after the events are completed, aborted, or errored */
500
+ var removeEvents = function()
501
+ {
502
+ var events = base.events;
503
+ events.removeEvents(xhr.upload);
504
+ events.removeEvents(xhr);
505
+ };
506
+
507
+ var settings = this.settings;
508
+ if(!settings)
509
+ {
510
+ return false;
511
+ }
512
+
513
+ var type = overrideType || e.type;
514
+ switch(type)
515
+ {
516
+ case 'load':
517
+ if(typeof settings.completed === 'function')
518
+ {
519
+ var response = this.getResponseData();
520
+ settings.completed(response, this.xhr);
521
+ }
522
+ removeEvents();
523
+ break;
524
+ case 'error':
525
+ if(typeof settings.failed === 'function')
526
+ {
527
+ settings.failed(false, this.xhr);
528
+ }
529
+ removeEvents();
530
+ break;
531
+ case 'progress':
532
+ if(typeof settings.progress === 'function')
533
+ {
534
+ settings.progress(e);
535
+ }
536
+ break;
537
+ case 'abort':
538
+ if(typeof settings.aborted === 'function')
539
+ {
540
+ settings.aborted(false, this.xhr);
541
+ }
542
+ removeEvents();
543
+ break;
544
+ }
545
+ },
546
+
547
+ /**
548
+ * This will get the response data.
549
+ *
550
+ * @return {*}
551
+ */
552
+ getResponseData: function()
553
+ {
554
+ var xhr = this.xhr,
555
+ response = xhr.responseText;
556
+
557
+ if(xhr.responseType || typeof response !== 'string')
558
+ {
559
+ return response;
560
+ }
561
+
562
+ var encoded = false;
563
+ /* we want to check to decode the response by the type */
564
+ switch(this.settings.responseType.toLowerCase())
565
+ {
566
+ case 'json':
567
+
568
+ encoded = base.jsonDecode(response);
569
+ if(encoded !== false)
570
+ {
571
+ response = encoded;
572
+ }
573
+ else
574
+ {
575
+ response = response;
576
+ this.error = 'yes';
577
+ }
578
+ break;
579
+ case 'xml':
580
+ encoded = base.xmlParse(response);
581
+ if(encoded !== false)
582
+ {
583
+ response = encoded;
584
+ }
585
+ else
586
+ {
587
+ response = response;
588
+ this.error = 'yes';
589
+ }
590
+ break;
591
+ case 'text':
592
+ break;
593
+
594
+ }
595
+
596
+ return response;
597
+ },
598
+
599
+ /**
600
+ * This will check the ready state.
601
+ *
602
+ * @protected
603
+ * @param {object} e
604
+ */
605
+ checkReadyState: function(e)
606
+ {
607
+ e = e || window.event;
608
+
609
+ var xhr = this.xhr;
610
+ if(xhr.readyState != 4)
611
+ {
612
+ /* the response is not ready */
613
+ return;
614
+ }
615
+
616
+ var type = 'error';
617
+ if(xhr.status == 200)
618
+ {
619
+ /* the ajax was successful
620
+ but we want to change the event type to load */
621
+ type = 'load';
622
+ }
623
+
624
+ this.update(e, type);
625
+ },
626
+
627
+ /**
628
+ * This will add the xhr events.
629
+ */
630
+ addXhrEvents: function()
631
+ {
632
+ var settings = this.settings;
633
+ if(!settings)
634
+ {
635
+ return false;
636
+ }
637
+
638
+ var xhr = this.xhr;
639
+ /* we need to check if we can add new event listeners or
640
+ if we have to use the old ready state */
641
+ if(typeof xhr.onload !== 'undefined')
642
+ {
643
+ var callBack = base.bind(this, this.update);
644
+ base.on(['load', 'error', 'abort'], xhr, callBack);
645
+ base.on('progress', xhr.upload, callBack);
646
+ }
647
+ else
648
+ {
649
+ var self = this;
650
+ xhr.onreadystatechange = function(e)
651
+ {
652
+ self.checkReadyState(e);
653
+ };
654
+ }
655
+ }
656
+ });
657
+ })();
@@ -0,0 +1,65 @@
1
+ /* base framework module */
2
+ /*
3
+ this will create dynamic html to be
4
+ added and modified
5
+ */
6
+ (function(global)
7
+ {
8
+ "use strict";
9
+
10
+ /**
11
+ * Atom
12
+ *
13
+ * This will create an interface for atoms to
14
+ * extend from a parent atom.
15
+ * @class
16
+ */
17
+ var Atom = function()
18
+ {
19
+
20
+ };
21
+
22
+ /**
23
+ * This will extend the atom to a child atom.
24
+ * @static
25
+ * @param {(object|function)}
26
+ * @return {function} The child atom constructor.
27
+ */
28
+ Atom.extend = function extend(childLayout)
29
+ {
30
+ var parent = this;
31
+
32
+ /*
33
+ this will setup a layout function to call to standardize
34
+ the interface for non function atoms.
35
+ */
36
+ if(typeof childLayout === 'object')
37
+ {
38
+ var layoutObject = childLayout;
39
+ childLayout = function(props)
40
+ {
41
+ return base.clone(layoutObject);
42
+ };
43
+ }
44
+
45
+ var child = function(props)
46
+ {
47
+ props = props || {};
48
+ var layout = childLayout(props);
49
+
50
+ // we want to check to merge the layout with the parent layout
51
+ var parentLayout = parent(props);
52
+ if(typeof parentLayout === 'object')
53
+ {
54
+ layout = base.extendObject(parentLayout, layout);
55
+ }
56
+ return layout;
57
+ };
58
+
59
+ child.extend = extend;
60
+ return child;
61
+ };
62
+
63
+ global.Atom = Atom;
64
+
65
+ })(this);