comparison Agendas/trunk/src/Agendas.Web/Scripts/MicrosoftMvcAjax.debug.js @ 10:c62b77fc33f4

website inicial
author nelo@MTEySS.neluz.int
date Sun, 13 Mar 2011 18:51:06 -0300
parents
children
comparison
equal deleted inserted replaced
9:c90492faf268 10:c62b77fc33f4
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_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
118 Sys.Mvc.AsyncHyperlink = function Sys_Mvc_AsyncHyperlink() {
119 }
120 Sys.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
135 Sys.Mvc.MvcHelpers = function Sys_Mvc_MvcHelpers() {
136 }
137 Sys.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 }
168 Sys.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 }
219 Sys.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 }
304 Sys.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 }
339 Sys.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
369 Sys.Mvc.AsyncForm = function Sys_Mvc_AsyncForm() {
370 }
371 Sys.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 }
379 Sys.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
401 Sys.Mvc.AjaxContext.registerClass('Sys.Mvc.AjaxContext');
402 Sys.Mvc.AsyncHyperlink.registerClass('Sys.Mvc.AsyncHyperlink');
403 Sys.Mvc.MvcHelpers.registerClass('Sys.Mvc.MvcHelpers');
404 Sys.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 // -----------------------------------