123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408 |
- //!----------------------------------------------------------
- //! Copyright (C) Microsoft Corporation. All rights reserved.
- //!----------------------------------------------------------
- //! MicrosoftMvcAjax.js
- Type.registerNamespace('Sys.Mvc');
- ////////////////////////////////////////////////////////////////////////////////
- // Sys.Mvc.AjaxOptions
- Sys.Mvc.$create_AjaxOptions = function Sys_Mvc_AjaxOptions() { return {}; }
- ////////////////////////////////////////////////////////////////////////////////
- // Sys.Mvc.InsertionMode
- Sys.Mvc.InsertionMode = function() {
- /// <field name="replace" type="Number" integer="true" static="true">
- /// </field>
- /// <field name="insertBefore" type="Number" integer="true" static="true">
- /// </field>
- /// <field name="insertAfter" type="Number" integer="true" static="true">
- /// </field>
- };
- Sys.Mvc.InsertionMode.prototype = {
- replace: 0,
- insertBefore: 1,
- insertAfter: 2
- }
- Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode', false);
- ////////////////////////////////////////////////////////////////////////////////
- // Sys.Mvc.AjaxContext
- Sys.Mvc.AjaxContext = function Sys_Mvc_AjaxContext(request, updateTarget, loadingElement, insertionMode) {
- /// <param name="request" type="Sys.Net.WebRequest">
- /// </param>
- /// <param name="updateTarget" type="Object" domElement="true">
- /// </param>
- /// <param name="loadingElement" type="Object" domElement="true">
- /// </param>
- /// <param name="insertionMode" type="Sys.Mvc.InsertionMode">
- /// </param>
- /// <field name="_insertionMode" type="Sys.Mvc.InsertionMode">
- /// </field>
- /// <field name="_loadingElement" type="Object" domElement="true">
- /// </field>
- /// <field name="_response" type="Sys.Net.WebRequestExecutor">
- /// </field>
- /// <field name="_request" type="Sys.Net.WebRequest">
- /// </field>
- /// <field name="_updateTarget" type="Object" domElement="true">
- /// </field>
- this._request = request;
- this._updateTarget = updateTarget;
- this._loadingElement = loadingElement;
- this._insertionMode = insertionMode;
- }
- Sys.Mvc.AjaxContext.prototype = {
- _insertionMode: 0,
- _loadingElement: null,
- _response: null,
- _request: null,
- _updateTarget: null,
-
- get_data: function Sys_Mvc_AjaxContext$get_data() {
- /// <value type="String"></value>
- if (this._response) {
- return this._response.get_responseData();
- }
- else {
- return null;
- }
- },
-
- get_insertionMode: function Sys_Mvc_AjaxContext$get_insertionMode() {
- /// <value type="Sys.Mvc.InsertionMode"></value>
- return this._insertionMode;
- },
-
- get_loadingElement: function Sys_Mvc_AjaxContext$get_loadingElement() {
- /// <value type="Object" domElement="true"></value>
- return this._loadingElement;
- },
-
- get_object: function Sys_Mvc_AjaxContext$get_object() {
- /// <value type="Object"></value>
- var executor = this.get_response();
- return (executor) ? executor.get_object() : null;
- },
-
- get_response: function Sys_Mvc_AjaxContext$get_response() {
- /// <value type="Sys.Net.WebRequestExecutor"></value>
- return this._response;
- },
- set_response: function Sys_Mvc_AjaxContext$set_response(value) {
- /// <value type="Sys.Net.WebRequestExecutor"></value>
- this._response = value;
- return value;
- },
-
- get_request: function Sys_Mvc_AjaxContext$get_request() {
- /// <value type="Sys.Net.WebRequest"></value>
- return this._request;
- },
-
- get_updateTarget: function Sys_Mvc_AjaxContext$get_updateTarget() {
- /// <value type="Object" domElement="true"></value>
- return this._updateTarget;
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- // Sys.Mvc.AsyncHyperlink
- Sys.Mvc.AsyncHyperlink = function Sys_Mvc_AsyncHyperlink() {
- }
- Sys.Mvc.AsyncHyperlink.handleClick = function Sys_Mvc_AsyncHyperlink$handleClick(anchor, evt, ajaxOptions) {
- /// <param name="anchor" type="Object" domElement="true">
- /// </param>
- /// <param name="evt" type="Sys.UI.DomEvent">
- /// </param>
- /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
- /// </param>
- evt.preventDefault();
- Sys.Mvc.MvcHelpers._asyncRequest(anchor.href, 'post', '', anchor, ajaxOptions);
- }
- ////////////////////////////////////////////////////////////////////////////////
- // Sys.Mvc.MvcHelpers
- Sys.Mvc.MvcHelpers = function Sys_Mvc_MvcHelpers() {
- }
- Sys.Mvc.MvcHelpers._serializeSubmitButton = function Sys_Mvc_MvcHelpers$_serializeSubmitButton(element, offsetX, offsetY) {
- /// <param name="element" type="Object" domElement="true">
- /// </param>
- /// <param name="offsetX" type="Number" integer="true">
- /// </param>
- /// <param name="offsetY" type="Number" integer="true">
- /// </param>
- /// <returns type="String"></returns>
- if (element.disabled) {
- return null;
- }
- var name = element.name;
- if (name) {
- var tagName = element.tagName.toUpperCase();
- var encodedName = encodeURIComponent(name);
- var inputElement = element;
- if (tagName === 'INPUT') {
- var type = inputElement.type;
- if (type === 'submit') {
- return encodedName + '=' + encodeURIComponent(inputElement.value);
- }
- else if (type === 'image') {
- return encodedName + '.x=' + offsetX + '&' + encodedName + '.y=' + offsetY;
- }
- }
- else if ((tagName === 'BUTTON') && (name.length) && (inputElement.type === 'submit')) {
- return encodedName + '=' + encodeURIComponent(inputElement.value);
- }
- }
- return null;
- }
- Sys.Mvc.MvcHelpers._serializeForm = function Sys_Mvc_MvcHelpers$_serializeForm(form) {
- /// <param name="form" type="Object" domElement="true">
- /// </param>
- /// <returns type="String"></returns>
- var formElements = form.elements;
- var formBody = new Sys.StringBuilder();
- var count = formElements.length;
- for (var i = 0; i < count; i++) {
- var element = formElements[i];
- var name = element.name;
- if (!name || !name.length) {
- continue;
- }
- var tagName = element.tagName.toUpperCase();
- if (tagName === 'INPUT') {
- var inputElement = element;
- var type = inputElement.type;
- if ((type === 'text') || (type === 'password') || (type === 'hidden') || (((type === 'checkbox') || (type === 'radio')) && element.checked)) {
- formBody.append(encodeURIComponent(name));
- formBody.append('=');
- formBody.append(encodeURIComponent(inputElement.value));
- formBody.append('&');
- }
- }
- else if (tagName === 'SELECT') {
- var selectElement = element;
- var optionCount = selectElement.options.length;
- for (var j = 0; j < optionCount; j++) {
- var optionElement = selectElement.options[j];
- if (optionElement.selected) {
- formBody.append(encodeURIComponent(name));
- formBody.append('=');
- formBody.append(encodeURIComponent(optionElement.value));
- formBody.append('&');
- }
- }
- }
- else if (tagName === 'TEXTAREA') {
- formBody.append(encodeURIComponent(name));
- formBody.append('=');
- formBody.append(encodeURIComponent((element.value)));
- formBody.append('&');
- }
- }
- var additionalInput = form._additionalInput;
- if (additionalInput) {
- formBody.append(additionalInput);
- formBody.append('&');
- }
- return formBody.toString();
- }
- Sys.Mvc.MvcHelpers._asyncRequest = function Sys_Mvc_MvcHelpers$_asyncRequest(url, verb, body, triggerElement, ajaxOptions) {
- /// <param name="url" type="String">
- /// </param>
- /// <param name="verb" type="String">
- /// </param>
- /// <param name="body" type="String">
- /// </param>
- /// <param name="triggerElement" type="Object" domElement="true">
- /// </param>
- /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
- /// </param>
- if (ajaxOptions.confirm) {
- if (!confirm(ajaxOptions.confirm)) {
- return;
- }
- }
- if (ajaxOptions.url) {
- url = ajaxOptions.url;
- }
- if (ajaxOptions.httpMethod) {
- verb = ajaxOptions.httpMethod;
- }
- if (body.length > 0 && !body.endsWith('&')) {
- body += '&';
- }
- body += 'X-Requested-With=XMLHttpRequest';
- var upperCaseVerb = verb.toUpperCase();
- var isGetOrPost = (upperCaseVerb === 'GET' || upperCaseVerb === 'POST');
- if (!isGetOrPost) {
- body += '&';
- body += 'X-HTTP-Method-Override=' + upperCaseVerb;
- }
- var requestBody = '';
- if (upperCaseVerb === 'GET' || upperCaseVerb === 'DELETE') {
- if (url.indexOf('?') > -1) {
- if (!url.endsWith('&')) {
- url += '&';
- }
- url += body;
- }
- else {
- url += '?';
- url += body;
- }
- }
- else {
- requestBody = body;
- }
- var request = new Sys.Net.WebRequest();
- request.set_url(url);
- if (isGetOrPost) {
- request.set_httpVerb(verb);
- }
- else {
- request.set_httpVerb('POST');
- request.get_headers()['X-HTTP-Method-Override'] = upperCaseVerb;
- }
- request.set_body(requestBody);
- if (verb.toUpperCase() === 'PUT') {
- request.get_headers()['Content-Type'] = 'application/x-www-form-urlencoded;';
- }
- request.get_headers()['X-Requested-With'] = 'XMLHttpRequest';
- var updateElement = null;
- if (ajaxOptions.updateTargetId) {
- updateElement = $get(ajaxOptions.updateTargetId);
- }
- var loadingElement = null;
- if (ajaxOptions.loadingElementId) {
- loadingElement = $get(ajaxOptions.loadingElementId);
- }
- var ajaxContext = new Sys.Mvc.AjaxContext(request, updateElement, loadingElement, ajaxOptions.insertionMode);
- var continueRequest = true;
- if (ajaxOptions.onBegin) {
- continueRequest = ajaxOptions.onBegin(ajaxContext) !== false;
- }
- if (loadingElement) {
- Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), true);
- }
- if (continueRequest) {
- request.add_completed(Function.createDelegate(null, function(executor) {
- Sys.Mvc.MvcHelpers._onComplete(request, ajaxOptions, ajaxContext);
- }));
- request.invoke();
- }
- }
- Sys.Mvc.MvcHelpers._onComplete = function Sys_Mvc_MvcHelpers$_onComplete(request, ajaxOptions, ajaxContext) {
- /// <param name="request" type="Sys.Net.WebRequest">
- /// </param>
- /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
- /// </param>
- /// <param name="ajaxContext" type="Sys.Mvc.AjaxContext">
- /// </param>
- ajaxContext.set_response(request.get_executor());
- if (ajaxOptions.onComplete && ajaxOptions.onComplete(ajaxContext) === false) {
- return;
- }
- var statusCode = ajaxContext.get_response().get_statusCode();
- if ((statusCode >= 200 && statusCode < 300) || statusCode === 304 || statusCode === 1223) {
- if (statusCode !== 204 && statusCode !== 304 && statusCode !== 1223) {
- var contentType = ajaxContext.get_response().getResponseHeader('Content-Type');
- if ((contentType) && (contentType.indexOf('application/x-javascript') !== -1)) {
- eval(ajaxContext.get_data());
- }
- else {
- Sys.Mvc.MvcHelpers.updateDomElement(ajaxContext.get_updateTarget(), ajaxContext.get_insertionMode(), ajaxContext.get_data());
- }
- }
- if (ajaxOptions.onSuccess) {
- ajaxOptions.onSuccess(ajaxContext);
- }
- }
- else {
- if (ajaxOptions.onFailure) {
- ajaxOptions.onFailure(ajaxContext);
- }
- }
- if (ajaxContext.get_loadingElement()) {
- Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), false);
- }
- }
- Sys.Mvc.MvcHelpers.updateDomElement = function Sys_Mvc_MvcHelpers$updateDomElement(target, insertionMode, content) {
- /// <param name="target" type="Object" domElement="true">
- /// </param>
- /// <param name="insertionMode" type="Sys.Mvc.InsertionMode">
- /// </param>
- /// <param name="content" type="String">
- /// </param>
- if (target) {
- switch (insertionMode) {
- case Sys.Mvc.InsertionMode.replace:
- target.innerHTML = content;
- break;
- case Sys.Mvc.InsertionMode.insertBefore:
- if (content && content.length > 0) {
- target.innerHTML = content + target.innerHTML.trimStart();
- }
- break;
- case Sys.Mvc.InsertionMode.insertAfter:
- if (content && content.length > 0) {
- target.innerHTML = target.innerHTML.trimEnd() + content;
- }
- break;
- }
- }
- }
- ////////////////////////////////////////////////////////////////////////////////
- // Sys.Mvc.AsyncForm
- Sys.Mvc.AsyncForm = function Sys_Mvc_AsyncForm() {
- }
- Sys.Mvc.AsyncForm.handleClick = function Sys_Mvc_AsyncForm$handleClick(form, evt) {
- /// <param name="form" type="Object" domElement="true">
- /// </param>
- /// <param name="evt" type="Sys.UI.DomEvent">
- /// </param>
- var additionalInput = Sys.Mvc.MvcHelpers._serializeSubmitButton(evt.target, evt.offsetX, evt.offsetY);
- form._additionalInput = additionalInput;
- }
- Sys.Mvc.AsyncForm.handleSubmit = function Sys_Mvc_AsyncForm$handleSubmit(form, evt, ajaxOptions) {
- /// <param name="form" type="Object" domElement="true">
- /// </param>
- /// <param name="evt" type="Sys.UI.DomEvent">
- /// </param>
- /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
- /// </param>
- evt.preventDefault();
- var validationCallbacks = form.validationCallbacks;
- if (validationCallbacks) {
- for (var i = 0; i < validationCallbacks.length; i++) {
- var callback = validationCallbacks[i];
- if (!callback()) {
- return;
- }
- }
- }
- var body = Sys.Mvc.MvcHelpers._serializeForm(form);
- Sys.Mvc.MvcHelpers._asyncRequest(form.action, form.method || 'post', body, form, ajaxOptions);
- }
- Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext');
- Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink');
- Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers');
- Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm');
- // ---- Do not remove this footer ----
- // Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)
- // -----------------------------------
|