/MvcMusicStore/Scripts/MicrosoftMvcAjax.debug.js
JavaScript | 408 lines | 281 code | 28 blank | 99 comment | 77 complexity | 7f4dfc11f4feb1310eef77858aa9da13 MD5 | raw file
1//!---------------------------------------------------------- 2//! Copyright (C) Microsoft Corporation. All rights reserved. 3//!---------------------------------------------------------- 4//! MicrosoftMvcAjax.js 5 6Type.registerNamespace('Sys.Mvc'); 7 8//////////////////////////////////////////////////////////////////////////////// 9// Sys.Mvc.AjaxOptions 10 11Sys.Mvc.$create_AjaxOptions = function Sys_Mvc_AjaxOptions() { return {}; } 12 13 14//////////////////////////////////////////////////////////////////////////////// 15// Sys.Mvc.InsertionMode 16 17Sys.Mvc.InsertionMode = function() { 18 /// <field name="replace" type="Number" integer="true" static="true"> 19 /// </field> 20 /// <field name="insertBefore" type="Number" integer="true" static="true"> 21 /// </field> 22 /// <field name="insertAfter" type="Number" integer="true" static="true"> 23 /// </field> 24}; 25Sys.Mvc.InsertionMode.prototype = { 26 replace: 0, 27 insertBefore: 1, 28 insertAfter: 2 29} 30Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode', false); 31 32 33//////////////////////////////////////////////////////////////////////////////// 34// Sys.Mvc.AjaxContext 35 36Sys.Mvc.AjaxContext = function Sys_Mvc_AjaxContext(request, updateTarget, loadingElement, insertionMode) { 37 /// <param name="request" type="Sys.Net.WebRequest"> 38 /// </param> 39 /// <param name="updateTarget" type="Object" domElement="true"> 40 /// </param> 41 /// <param name="loadingElement" type="Object" domElement="true"> 42 /// </param> 43 /// <param name="insertionMode" type="Sys.Mvc.InsertionMode"> 44 /// </param> 45 /// <field name="_insertionMode" type="Sys.Mvc.InsertionMode"> 46 /// </field> 47 /// <field name="_loadingElement" type="Object" domElement="true"> 48 /// </field> 49 /// <field name="_response" type="Sys.Net.WebRequestExecutor"> 50 /// </field> 51 /// <field name="_request" type="Sys.Net.WebRequest"> 52 /// </field> 53 /// <field name="_updateTarget" type="Object" domElement="true"> 54 /// </field> 55 this._request = request; 56 this._updateTarget = updateTarget; 57 this._loadingElement = loadingElement; 58 this._insertionMode = insertionMode; 59} 60Sys.Mvc.AjaxContext.prototype = { 61 _insertionMode: 0, 62 _loadingElement: null, 63 _response: null, 64 _request: null, 65 _updateTarget: null, 66 67 get_data: function Sys_Mvc_AjaxContext$get_data() { 68 /// <value type="String"></value> 69 if (this._response) { 70 return this._response.get_responseData(); 71 } 72 else { 73 return null; 74 } 75 }, 76 77 get_insertionMode: function Sys_Mvc_AjaxContext$get_insertionMode() { 78 /// <value type="Sys.Mvc.InsertionMode"></value> 79 return this._insertionMode; 80 }, 81 82 get_loadingElement: function Sys_Mvc_AjaxContext$get_loadingElement() { 83 /// <value type="Object" domElement="true"></value> 84 return this._loadingElement; 85 }, 86 87 get_object: function Sys_Mvc_AjaxContext$get_object() { 88 /// <value type="Object"></value> 89 var executor = this.get_response(); 90 return (executor) ? executor.get_object() : null; 91 }, 92 93 get_response: function Sys_Mvc_AjaxContext$get_response() { 94 /// <value type="Sys.Net.WebRequestExecutor"></value> 95 return this._response; 96 }, 97 set_response: function Sys_Mvc_AjaxContext$set_response(value) { 98 /// <value type="Sys.Net.WebRequestExecutor"></value> 99 this._response = value; 100 return value; 101 }, 102 103 get_request: function Sys_Mvc_AjaxContext$get_request() { 104 /// <value type="Sys.Net.WebRequest"></value> 105 return this._request; 106 }, 107 108 get_updateTarget: function Sys_Mvc_AjaxContext$get_updateTarget() { 109 /// <value type="Object" domElement="true"></value> 110 return this._updateTarget; 111 } 112} 113 114 115//////////////////////////////////////////////////////////////////////////////// 116// Sys.Mvc.AsyncHyperlink 117 118Sys.Mvc.AsyncHyperlink = function Sys_Mvc_AsyncHyperlink() { 119} 120Sys.Mvc.AsyncHyperlink.handleClick = function Sys_Mvc_AsyncHyperlink$handleClick(anchor, evt, ajaxOptions) { 121 /// <param name="anchor" type="Object" domElement="true"> 122 /// </param> 123 /// <param name="evt" type="Sys.UI.DomEvent"> 124 /// </param> 125 /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions"> 126 /// </param> 127 evt.preventDefault(); 128 Sys.Mvc.MvcHelpers._asyncRequest(anchor.href, 'post', '', anchor, ajaxOptions); 129} 130 131 132//////////////////////////////////////////////////////////////////////////////// 133// Sys.Mvc.MvcHelpers 134 135Sys.Mvc.MvcHelpers = function Sys_Mvc_MvcHelpers() { 136} 137Sys.Mvc.MvcHelpers._serializeSubmitButton = function Sys_Mvc_MvcHelpers$_serializeSubmitButton(element, offsetX, offsetY) { 138 /// <param name="element" type="Object" domElement="true"> 139 /// </param> 140 /// <param name="offsetX" type="Number" integer="true"> 141 /// </param> 142 /// <param name="offsetY" type="Number" integer="true"> 143 /// </param> 144 /// <returns type="String"></returns> 145 if (element.disabled) { 146 return null; 147 } 148 var name = element.name; 149 if (name) { 150 var tagName = element.tagName.toUpperCase(); 151 var encodedName = encodeURIComponent(name); 152 var inputElement = element; 153 if (tagName === 'INPUT') { 154 var type = inputElement.type; 155 if (type === 'submit') { 156 return encodedName + '=' + encodeURIComponent(inputElement.value); 157 } 158 else if (type === 'image') { 159 return encodedName + '.x=' + offsetX + '&' + encodedName + '.y=' + offsetY; 160 } 161 } 162 else if ((tagName === 'BUTTON') && (name.length) && (inputElement.type === 'submit')) { 163 return encodedName + '=' + encodeURIComponent(inputElement.value); 164 } 165 } 166 return null; 167} 168Sys.Mvc.MvcHelpers._serializeForm = function Sys_Mvc_MvcHelpers$_serializeForm(form) { 169 /// <param name="form" type="Object" domElement="true"> 170 /// </param> 171 /// <returns type="String"></returns> 172 var formElements = form.elements; 173 var formBody = new Sys.StringBuilder(); 174 var count = formElements.length; 175 for (var i = 0; i < count; i++) { 176 var element = formElements[i]; 177 var name = element.name; 178 if (!name || !name.length) { 179 continue; 180 } 181 var tagName = element.tagName.toUpperCase(); 182 if (tagName === 'INPUT') { 183 var inputElement = element; 184 var type = inputElement.type; 185 if ((type === 'text') || (type === 'password') || (type === 'hidden') || (((type === 'checkbox') || (type === 'radio')) && element.checked)) { 186 formBody.append(encodeURIComponent(name)); 187 formBody.append('='); 188 formBody.append(encodeURIComponent(inputElement.value)); 189 formBody.append('&'); 190 } 191 } 192 else if (tagName === 'SELECT') { 193 var selectElement = element; 194 var optionCount = selectElement.options.length; 195 for (var j = 0; j < optionCount; j++) { 196 var optionElement = selectElement.options[j]; 197 if (optionElement.selected) { 198 formBody.append(encodeURIComponent(name)); 199 formBody.append('='); 200 formBody.append(encodeURIComponent(optionElement.value)); 201 formBody.append('&'); 202 } 203 } 204 } 205 else if (tagName === 'TEXTAREA') { 206 formBody.append(encodeURIComponent(name)); 207 formBody.append('='); 208 formBody.append(encodeURIComponent((element.value))); 209 formBody.append('&'); 210 } 211 } 212 var additionalInput = form._additionalInput; 213 if (additionalInput) { 214 formBody.append(additionalInput); 215 formBody.append('&'); 216 } 217 return formBody.toString(); 218} 219Sys.Mvc.MvcHelpers._asyncRequest = function Sys_Mvc_MvcHelpers$_asyncRequest(url, verb, body, triggerElement, ajaxOptions) { 220 /// <param name="url" type="String"> 221 /// </param> 222 /// <param name="verb" type="String"> 223 /// </param> 224 /// <param name="body" type="String"> 225 /// </param> 226 /// <param name="triggerElement" type="Object" domElement="true"> 227 /// </param> 228 /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions"> 229 /// </param> 230 if (ajaxOptions.confirm) { 231 if (!confirm(ajaxOptions.confirm)) { 232 return; 233 } 234 } 235 if (ajaxOptions.url) { 236 url = ajaxOptions.url; 237 } 238 if (ajaxOptions.httpMethod) { 239 verb = ajaxOptions.httpMethod; 240 } 241 if (body.length > 0 && !body.endsWith('&')) { 242 body += '&'; 243 } 244 body += 'X-Requested-With=XMLHttpRequest'; 245 var upperCaseVerb = verb.toUpperCase(); 246 var isGetOrPost = (upperCaseVerb === 'GET' || upperCaseVerb === 'POST'); 247 if (!isGetOrPost) { 248 body += '&'; 249 body += 'X-HTTP-Method-Override=' + upperCaseVerb; 250 } 251 var requestBody = ''; 252 if (upperCaseVerb === 'GET' || upperCaseVerb === 'DELETE') { 253 if (url.indexOf('?') > -1) { 254 if (!url.endsWith('&')) { 255 url += '&'; 256 } 257 url += body; 258 } 259 else { 260 url += '?'; 261 url += body; 262 } 263 } 264 else { 265 requestBody = body; 266 } 267 var request = new Sys.Net.WebRequest(); 268 request.set_url(url); 269 if (isGetOrPost) { 270 request.set_httpVerb(verb); 271 } 272 else { 273 request.set_httpVerb('POST'); 274 request.get_headers()['X-HTTP-Method-Override'] = upperCaseVerb; 275 } 276 request.set_body(requestBody); 277 if (verb.toUpperCase() === 'PUT') { 278 request.get_headers()['Content-Type'] = 'application/x-www-form-urlencoded;'; 279 } 280 request.get_headers()['X-Requested-With'] = 'XMLHttpRequest'; 281 var updateElement = null; 282 if (ajaxOptions.updateTargetId) { 283 updateElement = $get(ajaxOptions.updateTargetId); 284 } 285 var loadingElement = null; 286 if (ajaxOptions.loadingElementId) { 287 loadingElement = $get(ajaxOptions.loadingElementId); 288 } 289 var ajaxContext = new Sys.Mvc.AjaxContext(request, updateElement, loadingElement, ajaxOptions.insertionMode); 290 var continueRequest = true; 291 if (ajaxOptions.onBegin) { 292 continueRequest = ajaxOptions.onBegin(ajaxContext) !== false; 293 } 294 if (loadingElement) { 295 Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), true); 296 } 297 if (continueRequest) { 298 request.add_completed(Function.createDelegate(null, function(executor) { 299 Sys.Mvc.MvcHelpers._onComplete(request, ajaxOptions, ajaxContext); 300 })); 301 request.invoke(); 302 } 303} 304Sys.Mvc.MvcHelpers._onComplete = function Sys_Mvc_MvcHelpers$_onComplete(request, ajaxOptions, ajaxContext) { 305 /// <param name="request" type="Sys.Net.WebRequest"> 306 /// </param> 307 /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions"> 308 /// </param> 309 /// <param name="ajaxContext" type="Sys.Mvc.AjaxContext"> 310 /// </param> 311 ajaxContext.set_response(request.get_executor()); 312 if (ajaxOptions.onComplete && ajaxOptions.onComplete(ajaxContext) === false) { 313 return; 314 } 315 var statusCode = ajaxContext.get_response().get_statusCode(); 316 if ((statusCode >= 200 && statusCode < 300) || statusCode === 304 || statusCode === 1223) { 317 if (statusCode !== 204 && statusCode !== 304 && statusCode !== 1223) { 318 var contentType = ajaxContext.get_response().getResponseHeader('Content-Type'); 319 if ((contentType) && (contentType.indexOf('application/x-javascript') !== -1)) { 320 eval(ajaxContext.get_data()); 321 } 322 else { 323 Sys.Mvc.MvcHelpers.updateDomElement(ajaxContext.get_updateTarget(), ajaxContext.get_insertionMode(), ajaxContext.get_data()); 324 } 325 } 326 if (ajaxOptions.onSuccess) { 327 ajaxOptions.onSuccess(ajaxContext); 328 } 329 } 330 else { 331 if (ajaxOptions.onFailure) { 332 ajaxOptions.onFailure(ajaxContext); 333 } 334 } 335 if (ajaxContext.get_loadingElement()) { 336 Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), false); 337 } 338} 339Sys.Mvc.MvcHelpers.updateDomElement = function Sys_Mvc_MvcHelpers$updateDomElement(target, insertionMode, content) { 340 /// <param name="target" type="Object" domElement="true"> 341 /// </param> 342 /// <param name="insertionMode" type="Sys.Mvc.InsertionMode"> 343 /// </param> 344 /// <param name="content" type="String"> 345 /// </param> 346 if (target) { 347 switch (insertionMode) { 348 case Sys.Mvc.InsertionMode.replace: 349 target.innerHTML = content; 350 break; 351 case Sys.Mvc.InsertionMode.insertBefore: 352 if (content && content.length > 0) { 353 target.innerHTML = content + target.innerHTML.trimStart(); 354 } 355 break; 356 case Sys.Mvc.InsertionMode.insertAfter: 357 if (content && content.length > 0) { 358 target.innerHTML = target.innerHTML.trimEnd() + content; 359 } 360 break; 361 } 362 } 363} 364 365 366//////////////////////////////////////////////////////////////////////////////// 367// Sys.Mvc.AsyncForm 368 369Sys.Mvc.AsyncForm = function Sys_Mvc_AsyncForm() { 370} 371Sys.Mvc.AsyncForm.handleClick = function Sys_Mvc_AsyncForm$handleClick(form, evt) { 372 /// <param name="form" type="Object" domElement="true"> 373 /// </param> 374 /// <param name="evt" type="Sys.UI.DomEvent"> 375 /// </param> 376 var additionalInput = Sys.Mvc.MvcHelpers._serializeSubmitButton(evt.target, evt.offsetX, evt.offsetY); 377 form._additionalInput = additionalInput; 378} 379Sys.Mvc.AsyncForm.handleSubmit = function Sys_Mvc_AsyncForm$handleSubmit(form, evt, ajaxOptions) { 380 /// <param name="form" type="Object" domElement="true"> 381 /// </param> 382 /// <param name="evt" type="Sys.UI.DomEvent"> 383 /// </param> 384 /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions"> 385 /// </param> 386 evt.preventDefault(); 387 var validationCallbacks = form.validationCallbacks; 388 if (validationCallbacks) { 389 for (var i = 0; i < validationCallbacks.length; i++) { 390 var callback = validationCallbacks[i]; 391 if (!callback()) { 392 return; 393 } 394 } 395 } 396 var body = Sys.Mvc.MvcHelpers._serializeForm(form); 397 Sys.Mvc.MvcHelpers._asyncRequest(form.action, form.method || 'post', body, form, ajaxOptions); 398} 399 400 401Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext'); 402Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink'); 403Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers'); 404Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm'); 405 406// ---- Do not remove this footer ---- 407// Generated using Script# v0.5.0.0 (http://projects.nikhilk.net) 408// -----------------------------------