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