| 1 | //!----------------------------------------------------------
|
|---|
| 2 | //! Copyright (C) Microsoft Corporation. All rights reserved.
|
|---|
| 3 | //!----------------------------------------------------------
|
|---|
| 4 | //! MicrosoftMvcAjax.js
|
|---|
| 5 |
|
|---|
| 6 | Type.registerNamespace('Sys.Mvc');
|
|---|
| 7 |
|
|---|
| 8 | ////////////////////////////////////////////////////////////////////////////////
|
|---|
| 9 | // Sys.Mvc.AjaxOptions
|
|---|
| 10 |
|
|---|
| 11 | Sys.Mvc.$create_AjaxOptions = function Sys_Mvc_AjaxOptions() { return {}; }
|
|---|
| 12 |
|
|---|
| 13 |
|
|---|
| 14 | ////////////////////////////////////////////////////////////////////////////////
|
|---|
| 15 | // Sys.Mvc.InsertionMode
|
|---|
| 16 |
|
|---|
| 17 | Sys.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 | };
|
|---|
| 25 | Sys.Mvc.InsertionMode.prototype = {
|
|---|
| 26 | replace: 0,
|
|---|
| 27 | insertBefore: 1,
|
|---|
| 28 | insertAfter: 2
|
|---|
| 29 | }
|
|---|
| 30 | Sys.Mvc.InsertionMode.registerEnum('Sys.Mvc.InsertionMode', false);
|
|---|
| 31 |
|
|---|
| 32 |
|
|---|
| 33 | ////////////////////////////////////////////////////////////////////////////////
|
|---|
| 34 | // Sys.Mvc.AjaxContext
|
|---|
| 35 |
|
|---|
| 36 | Sys.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 | }
|
|---|
| 60 | Sys.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_response: function Sys_Mvc_AjaxContext$get_response() {
|
|---|
| 88 | /// <value type="Sys.Net.WebRequestExecutor"></value>
|
|---|
| 89 | return this._response;
|
|---|
| 90 | },
|
|---|
| 91 | set_response: function Sys_Mvc_AjaxContext$set_response(value) {
|
|---|
| 92 | /// <value type="Sys.Net.WebRequestExecutor"></value>
|
|---|
| 93 | this._response = value;
|
|---|
| 94 | return value;
|
|---|
| 95 | },
|
|---|
| 96 |
|
|---|
| 97 | get_request: function Sys_Mvc_AjaxContext$get_request() {
|
|---|
| 98 | /// <value type="Sys.Net.WebRequest"></value>
|
|---|
| 99 | return this._request;
|
|---|
| 100 | },
|
|---|
| 101 |
|
|---|
| 102 | get_updateTarget: function Sys_Mvc_AjaxContext$get_updateTarget() {
|
|---|
| 103 | /// <value type="Object" domElement="true"></value>
|
|---|
| 104 | return this._updateTarget;
|
|---|
| 105 | }
|
|---|
| 106 | }
|
|---|
| 107 |
|
|---|
| 108 |
|
|---|
| 109 | ////////////////////////////////////////////////////////////////////////////////
|
|---|
| 110 | // Sys.Mvc.AsyncHyperlink
|
|---|
| 111 |
|
|---|
| 112 | Sys.Mvc.AsyncHyperlink = function Sys_Mvc_AsyncHyperlink() {
|
|---|
| 113 | }
|
|---|
| 114 | Sys.Mvc.AsyncHyperlink.handleClick = function Sys_Mvc_AsyncHyperlink$handleClick(anchor, evt, ajaxOptions) {
|
|---|
| 115 | /// <param name="anchor" type="Object" domElement="true">
|
|---|
| 116 | /// </param>
|
|---|
| 117 | /// <param name="evt" type="Sys.UI.DomEvent">
|
|---|
| 118 | /// </param>
|
|---|
| 119 | /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
|
|---|
| 120 | /// </param>
|
|---|
| 121 | evt.preventDefault();
|
|---|
| 122 | Sys.Mvc.MvcHelpers._asyncRequest(anchor.href, 'post', '', anchor, ajaxOptions);
|
|---|
| 123 | }
|
|---|
| 124 |
|
|---|
| 125 |
|
|---|
| 126 | ////////////////////////////////////////////////////////////////////////////////
|
|---|
| 127 | // Sys.Mvc.MvcHelpers
|
|---|
| 128 |
|
|---|
| 129 | Sys.Mvc.MvcHelpers = function Sys_Mvc_MvcHelpers() {
|
|---|
| 130 | }
|
|---|
| 131 | Sys.Mvc.MvcHelpers._serializeForm = function Sys_Mvc_MvcHelpers$_serializeForm(form) {
|
|---|
| 132 | /// <param name="form" type="Object" domElement="true">
|
|---|
| 133 | /// </param>
|
|---|
| 134 | /// <returns type="String"></returns>
|
|---|
| 135 | var formElements = form.elements;
|
|---|
| 136 | var formBody = new Sys.StringBuilder();
|
|---|
| 137 | var count = formElements.length;
|
|---|
| 138 | for (var i = 0; i < count; i++) {
|
|---|
| 139 | var element = formElements[i];
|
|---|
| 140 | var name = element.name;
|
|---|
| 141 | if (!name || !name.length) {
|
|---|
| 142 | continue;
|
|---|
| 143 | }
|
|---|
| 144 | var tagName = element.tagName.toUpperCase();
|
|---|
| 145 | if (tagName === 'INPUT') {
|
|---|
| 146 | var inputElement = element;
|
|---|
| 147 | var type = inputElement.type;
|
|---|
| 148 | if ((type === 'text') || (type === 'password') || (type === 'hidden') || (((type === 'checkbox') || (type === 'radio')) && element.checked)) {
|
|---|
| 149 | formBody.append(encodeURIComponent(name));
|
|---|
| 150 | formBody.append('=');
|
|---|
| 151 | formBody.append(encodeURIComponent(inputElement.value));
|
|---|
| 152 | formBody.append('&');
|
|---|
| 153 | }
|
|---|
| 154 | }
|
|---|
| 155 | else if (tagName === 'SELECT') {
|
|---|
| 156 | var selectElement = element;
|
|---|
| 157 | var optionCount = selectElement.options.length;
|
|---|
| 158 | for (var j = 0; j < optionCount; j++) {
|
|---|
| 159 | var optionElement = selectElement.options[j];
|
|---|
| 160 | if (optionElement.selected) {
|
|---|
| 161 | formBody.append(encodeURIComponent(name));
|
|---|
| 162 | formBody.append('=');
|
|---|
| 163 | formBody.append(encodeURIComponent(optionElement.value));
|
|---|
| 164 | formBody.append('&');
|
|---|
| 165 | }
|
|---|
| 166 | }
|
|---|
| 167 | }
|
|---|
| 168 | else if (tagName === 'TEXTAREA') {
|
|---|
| 169 | formBody.append(encodeURIComponent(name));
|
|---|
| 170 | formBody.append('=');
|
|---|
| 171 | formBody.append(encodeURIComponent((element.value)));
|
|---|
| 172 | formBody.append('&');
|
|---|
| 173 | }
|
|---|
| 174 | }
|
|---|
| 175 | return formBody.toString();
|
|---|
| 176 | }
|
|---|
| 177 | Sys.Mvc.MvcHelpers._asyncRequest = function Sys_Mvc_MvcHelpers$_asyncRequest(url, verb, body, triggerElement, ajaxOptions) {
|
|---|
| 178 | /// <param name="url" type="String">
|
|---|
| 179 | /// </param>
|
|---|
| 180 | /// <param name="verb" type="String">
|
|---|
| 181 | /// </param>
|
|---|
| 182 | /// <param name="body" type="String">
|
|---|
| 183 | /// </param>
|
|---|
| 184 | /// <param name="triggerElement" type="Object" domElement="true">
|
|---|
| 185 | /// </param>
|
|---|
| 186 | /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
|
|---|
| 187 | /// </param>
|
|---|
| 188 | if (ajaxOptions.confirm) {
|
|---|
| 189 | if (!confirm(ajaxOptions.confirm)) {
|
|---|
| 190 | return;
|
|---|
| 191 | }
|
|---|
| 192 | }
|
|---|
| 193 | if (ajaxOptions.url) {
|
|---|
| 194 | url = ajaxOptions.url;
|
|---|
| 195 | }
|
|---|
| 196 | if (ajaxOptions.httpMethod) {
|
|---|
| 197 | verb = ajaxOptions.httpMethod;
|
|---|
| 198 | }
|
|---|
| 199 | if (body.length > 0 && !body.endsWith('&')) {
|
|---|
| 200 | body += '&';
|
|---|
| 201 | }
|
|---|
| 202 | body += 'X-Requested-With=XMLHttpRequest';
|
|---|
| 203 | var requestBody = '';
|
|---|
| 204 | if (verb.toUpperCase() === 'GET' || verb.toUpperCase() === 'DELETE') {
|
|---|
| 205 | if (url.indexOf('?') > -1) {
|
|---|
| 206 | if (!url.endsWith('&')) {
|
|---|
| 207 | url += '&';
|
|---|
| 208 | }
|
|---|
| 209 | url += body;
|
|---|
| 210 | }
|
|---|
| 211 | else {
|
|---|
| 212 | url += '?';
|
|---|
| 213 | url += body;
|
|---|
| 214 | }
|
|---|
| 215 | }
|
|---|
| 216 | else {
|
|---|
| 217 | requestBody = body;
|
|---|
| 218 | }
|
|---|
| 219 | var request = new Sys.Net.WebRequest();
|
|---|
| 220 | request.set_url(url);
|
|---|
| 221 | request.set_httpVerb(verb);
|
|---|
| 222 | request.set_body(requestBody);
|
|---|
| 223 | if (verb.toUpperCase() === 'PUT') {
|
|---|
| 224 | request.get_headers()['Content-Type'] = 'application/x-www-form-urlencoded;';
|
|---|
| 225 | }
|
|---|
| 226 | request.get_headers()['X-Requested-With'] = 'XMLHttpRequest';
|
|---|
| 227 | var updateElement = null;
|
|---|
| 228 | if (ajaxOptions.updateTargetId) {
|
|---|
| 229 | updateElement = $get(ajaxOptions.updateTargetId);
|
|---|
| 230 | }
|
|---|
| 231 | var loadingElement = null;
|
|---|
| 232 | if (ajaxOptions.loadingElementId) {
|
|---|
| 233 | loadingElement = $get(ajaxOptions.loadingElementId);
|
|---|
| 234 | }
|
|---|
| 235 | var ajaxContext = new Sys.Mvc.AjaxContext(request, updateElement, loadingElement, ajaxOptions.insertionMode);
|
|---|
| 236 | var continueRequest = true;
|
|---|
| 237 | if (ajaxOptions.onBegin) {
|
|---|
| 238 | continueRequest = ajaxOptions.onBegin(ajaxContext) !== false;
|
|---|
| 239 | }
|
|---|
| 240 | if (loadingElement) {
|
|---|
| 241 | Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), true);
|
|---|
| 242 | }
|
|---|
| 243 | if (continueRequest) {
|
|---|
| 244 | request.add_completed(Function.createDelegate(null, function(executor) {
|
|---|
| 245 | Sys.Mvc.MvcHelpers._onComplete(request, ajaxOptions, ajaxContext);
|
|---|
| 246 | }));
|
|---|
| 247 | request.invoke();
|
|---|
| 248 | }
|
|---|
| 249 | }
|
|---|
| 250 | Sys.Mvc.MvcHelpers._onComplete = function Sys_Mvc_MvcHelpers$_onComplete(request, ajaxOptions, ajaxContext) {
|
|---|
| 251 | /// <param name="request" type="Sys.Net.WebRequest">
|
|---|
| 252 | /// </param>
|
|---|
| 253 | /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
|
|---|
| 254 | /// </param>
|
|---|
| 255 | /// <param name="ajaxContext" type="Sys.Mvc.AjaxContext">
|
|---|
| 256 | /// </param>
|
|---|
| 257 | ajaxContext.set_response(request.get_executor());
|
|---|
| 258 | if (ajaxOptions.onComplete && ajaxOptions.onComplete(ajaxContext) === false) {
|
|---|
| 259 | return;
|
|---|
| 260 | }
|
|---|
| 261 | var statusCode = ajaxContext.get_response().get_statusCode();
|
|---|
| 262 | if ((statusCode >= 200 && statusCode < 300) || statusCode === 304 || statusCode === 1223) {
|
|---|
| 263 | if (statusCode !== 204 && statusCode !== 304 && statusCode !== 1223) {
|
|---|
| 264 | var contentType = ajaxContext.get_response().getResponseHeader('Content-Type');
|
|---|
| 265 | if ((contentType) && (contentType.indexOf('application/x-javascript') !== -1)) {
|
|---|
| 266 | eval(ajaxContext.get_data());
|
|---|
| 267 | }
|
|---|
| 268 | else {
|
|---|
| 269 | Sys.Mvc.MvcHelpers.updateDomElement(ajaxContext.get_updateTarget(), ajaxContext.get_insertionMode(), ajaxContext.get_data());
|
|---|
| 270 | }
|
|---|
| 271 | }
|
|---|
| 272 | if (ajaxOptions.onSuccess) {
|
|---|
| 273 | ajaxOptions.onSuccess(ajaxContext);
|
|---|
| 274 | }
|
|---|
| 275 | }
|
|---|
| 276 | else {
|
|---|
| 277 | if (ajaxOptions.onFailure) {
|
|---|
| 278 | ajaxOptions.onFailure(ajaxContext);
|
|---|
| 279 | }
|
|---|
| 280 | }
|
|---|
| 281 | if (ajaxContext.get_loadingElement()) {
|
|---|
| 282 | Sys.UI.DomElement.setVisible(ajaxContext.get_loadingElement(), false);
|
|---|
| 283 | }
|
|---|
| 284 | }
|
|---|
| 285 | Sys.Mvc.MvcHelpers.updateDomElement = function Sys_Mvc_MvcHelpers$updateDomElement(target, insertionMode, content) {
|
|---|
| 286 | /// <param name="target" type="Object" domElement="true">
|
|---|
| 287 | /// </param>
|
|---|
| 288 | /// <param name="insertionMode" type="Sys.Mvc.InsertionMode">
|
|---|
| 289 | /// </param>
|
|---|
| 290 | /// <param name="content" type="String">
|
|---|
| 291 | /// </param>
|
|---|
| 292 | if (target) {
|
|---|
| 293 | switch (insertionMode) {
|
|---|
| 294 | case Sys.Mvc.InsertionMode.replace:
|
|---|
| 295 | target.innerHTML = content;
|
|---|
| 296 | break;
|
|---|
| 297 | case Sys.Mvc.InsertionMode.insertBefore:
|
|---|
| 298 | if (content && content.length > 0) {
|
|---|
| 299 | target.innerHTML = content + target.innerHTML.trimStart();
|
|---|
| 300 | }
|
|---|
| 301 | break;
|
|---|
| 302 | case Sys.Mvc.InsertionMode.insertAfter:
|
|---|
| 303 | if (content && content.length > 0) {
|
|---|
| 304 | target.innerHTML = target.innerHTML.trimEnd() + content;
|
|---|
| 305 | }
|
|---|
| 306 | break;
|
|---|
| 307 | }
|
|---|
| 308 | }
|
|---|
| 309 | }
|
|---|
| 310 |
|
|---|
| 311 |
|
|---|
| 312 | ////////////////////////////////////////////////////////////////////////////////
|
|---|
| 313 | // Sys.Mvc.AsyncForm
|
|---|
| 314 |
|
|---|
| 315 | Sys.Mvc.AsyncForm = function Sys_Mvc_AsyncForm() {
|
|---|
| 316 | }
|
|---|
| 317 | Sys.Mvc.AsyncForm.handleSubmit = function Sys_Mvc_AsyncForm$handleSubmit(form, evt, ajaxOptions) {
|
|---|
| 318 | /// <param name="form" type="Object" domElement="true">
|
|---|
| 319 | /// </param>
|
|---|
| 320 | /// <param name="evt" type="Sys.UI.DomEvent">
|
|---|
| 321 | /// </param>
|
|---|
| 322 | /// <param name="ajaxOptions" type="Sys.Mvc.AjaxOptions">
|
|---|
| 323 | /// </param>
|
|---|
| 324 | evt.preventDefault();
|
|---|
| 325 | var body = Sys.Mvc.MvcHelpers._serializeForm(form);
|
|---|
| 326 | Sys.Mvc.MvcHelpers._asyncRequest(form.action, form.method || 'post', body, form, ajaxOptions);
|
|---|
| 327 | }
|
|---|
| 328 |
|
|---|
| 329 |
|
|---|
| 330 | Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext');
|
|---|
| 331 | Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink');
|
|---|
| 332 | Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers');
|
|---|
| 333 | Sys.Mvc.AsyncForm.registerClass('Sys.Mvc.AsyncForm');
|
|---|
| 334 |
|
|---|
| 335 | // ---- Do not remove this footer ----
|
|---|
| 336 | // Generated using Script# v0.5.0.0 (http://projects.nikhilk.net)
|
|---|
| 337 | // -----------------------------------
|
|---|