PageSourceSearch

https://blackboard.lasierra.edu/webapps/blackboard/dwr/engine.js?v….0.0-rel.86+98f554a_4001.0.0-rel.86+98f554a

js lasierra.edu collected 2026-10-02 04:39:36 UTC 53,363 bytes, 2,728 lines download raw bytes

1/*
2 * Copyright 2005 JS Foundation https://js.foundation/
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 
17
18
19
20
21(function() {
22
23
24
25if (typeof dwr == 'undefined') dwr = {};
26if (!dwr.engine) dwr.engine = {};
27
28
29
30
31
32dwr.engine.setErrorHandler = function(handler) {
33dwr.engine._errorHandler = handler;
34};
35
36
37
38
39
40dwr.engine.setWarningHandler = function(handler) {
41dwr.engine._warningHandler = handler;
42};
43
44
45
46
47
48
49
50
51
52dwr.engine.setTextHtmlHandler = function(handler) {
53dwr.engine._textHtmlHandler = handler;
54};
55
56dwr.engine.setPollStatusHandler = function(handler) {
57dwr.engine._pollStatusHandler = handler;
58};
59
60
61
62
63
64dwr.engine.setTimeout = function(timeout) {
65dwr.engine._timeout = timeout;
66};
67
68
69
70
71dwr.engine.setPollTimeout = function(timeout) {
72dwr.engine._pollTimeout = timeout;
73};
74
75
76
77
78
79dwr.engine.setPreHook = function(handler) {
80dwr.engine._preHook = handler;
81};
82
83
84
85
86
87dwr.engine.setPostHook = function(handler) {
88dwr.engine._postHook = handler;
89};
90
91
92
93
94
95dwr.engine.setOverridePath = function(path) {
96dwr.engine._overridePath = path;
97};
98
99
100
101
102
103dwr.engine.setOverrideContextPath = function(path) {
104dwr.engine._overrideContextPath = path;
105};
106
107
108
109
110
111dwr.engine.setCookieAttributes = function(attributeString) {
112dwr.engine._cookieAttributes = attributeString;
113};
114
115
116
117
118
119dwr.engine.setHeaders = function(headers) {
120dwr.engine._headers = headers;
121};
122
123
124
125
126
127dwr.engine.setAttributes = function(attributes) {
128dwr.engine._attributes = attributes;
129};
130
131
132
133
134
135dwr.engine.setOrdered = function(ordered) {
136dwr.engine._ordered = ordered;
137};
138
139
140
141
142
143
144
145dwr.engine.setAsync = function(async) {
146dwr.engine._async = async;
147};
148
149
150
151
152
153dwr.engine.setActiveReverseAjax = function(activeReverseAjax) {
154if (activeReverseAjax) {
155
156if (dwr.engine._activeReverseAjax) return;
157
158if (!dwr.engine._retryIntervals || dwr.engine._retryIntervals.length === 0) { dwr.engine._retryIntervals = dwr.engine._defaultRetryIntervals; }
159dwr.engine._activeReverseAjax = true;
160if (dwr.engine._initializing) return;
161dwr.engine._poll();
162}
163else {
164
165if (dwr.engine._activeReverseAjax && dwr.engine._pollBatch) {
166dwr.engine.transport.abort(dwr.engine._pollBatch);
167}
168dwr.engine._activeReverseAjax = false;
169}
170
171
172
173};
174
175
176
177
178
179dwr.engine.setNotifyServerOnPageUnload = function(notify, asyncUnload) {
180dwr.engine._asyncUnload = (asyncUnload !== undefined) ? asyncUnload : false;
181dwr.engine._isNotifyServerOnPageUnload = notify;
182};
183
184
185
186
187
188dwr.engine.setNotifyServerOnPageLoad = function(notify) {
189dwr.engine._isNotifyServerOnPageLoad = notify;
190if (notify && !dwr.engine._initializing && !dwr.engine._isNotifyServerOnPageLoadSent) {
191eval("dwr.engine._execute(dwr.engine._pathToDwrServlet, '__System', 'pageLoaded', [ function() { dwr.engine._ordered = false; }]);");
192dwr.engine._isNotifyServerOnPageLoadSent = true;
193}
194};
195
196
197
198
199
200dwr.engine.setMaxRetries = function(maxRetries) {
201dwr.engine._maxRetries = maxRetries;
202};
203
204
205
206
207
208dwr.engine.setRetryIntervals = function(intervalsArray) {
209dwr.engine._retryIntervals = intervalsArray;
210};
211
212
213
214
215
216
217dwr.engine.defaultErrorHandler = function(message, ex) {
218dwr.engine._debug("Error: " + ex.name + ", " + ex.message, true);
219if (!message) message = "A server error has occurred.";
220
221if (message.indexOf("0x80040111") != -1) return;
222if ("false" == "true") alert(message);
223};
224
225
226
227
228
229
230dwr.engine.defaultWarningHandler = function(message, ex) {
231dwr.engine._debug(message);
232};
233
234
235
236
237
238
239dwr.engine.defaultPollStatusHandler = function(newStatus, ex) {
240dwr.engine.util.logHandlerEx(function() {
241if (newStatus === false && dwr.engine._errorHandler) dwr.engine._errorHandler(ex.message, ex);
242});
243};
244
245
246
247
248dwr.engine.beginBatch = function() {
249if (dwr.engine._batch) {
250dwr.engine._handleError(null, { name:"dwr.engine.batchBegun", message:"Batch already begun" });
251return;
252}
253dwr.engine._batch = dwr.engine.batch.create();
254};
255
256
257
258
259
260dwr.engine.endBatch = function(options) {
261var batch = dwr.engine._batch;
262if (batch == null) {
263dwr.engine._handleError(null, { name:"dwr.engine.batchNotBegun", message:"No batch in progress" });
264return;
265}
266dwr.engine._batch = null;
267if (batch.map.callCount === 0) {
268return;
269}
270
271
272if (options) {
273dwr.engine.batch.merge(batch, options);
274}
275
276
277
278if (batch.async && (dwr.engine._ordered || dwr.engine._internalOrdered) && dwr.engine._batchesLength !== 0) {
279dwr.engine._batchQueue[dwr.engine._batchQueue.length] = batch;
280}
281else {
282return dwr.engine.transport.send(batch);
283}
284};
285
286
287
288
289
290
291dwr.engine.openInDownload = function(data) {
292var div = document.createElement("div");
293document.body.appendChild(div);
294div.innerHTML = "<iframe width='0' height='0' scrolling='no' frameborder='0' src='" + data + "'></iframe>";
295};
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311dwr.version = {
312
313
314
315major:parseInt("3", 10),
316
317
318
319
320minor:parseInt("0", 10),
321
322
323
324
325revision:parseInt("3", 10),
326
327
328
329
330build:parseInt("-1", 10),
331
332
333
334
335
336title:"bb-3",
337
338
339
340
341label:"3.0.3-bb-3"
342};
343
344
345
346
347
348
349dwr.engine._initializing = true;
350
351
352dwr.engine._allowGetButMakeForgeryEasier = "false";
353
354
355dwr.engine._scriptTagProtection = "throw 'allowScriptTagRemoting is false.';";
356
357
358dwr.engine._pathToDwrServlet = "/webapps/blackboard/dwr";
359
360
361dwr.engine._overridePath = "";
362if (typeof pathToDwrServlet != "undefined") {
363dwr.engine._overridePath = pathToDwrServlet;
364}
365
366dwr.engine._effectivePath = function() {
367return dwr.engine._overridePath || dwr.engine._pathToDwrServlet;
368};
369
370
371dwr.engine._contextPath = "/webapps/blackboard";
372
373
374dwr.engine._overrideContextPath = "";
375
376dwr.engine._effectiveContextPath = function() {
377return dwr.engine._overrideContextPath || dwr.engine._contextPath;
378};
379
380
381dwr.engine._cookieAttributes = "";
382
383
384dwr.engine._useStreamingPoll = "true";
385
386dwr.engine._pollOnline = true;
387
388
389dwr.engine._ModePlainCall = "/call/plaincall/";
390dwr.engine._ModePlainPoll = "/call/plainpoll/";
391dwr.engine._ModeHtmlCall = "/call/htmlcall/";
392dwr.engine._ModeHtmlPoll = "/call/htmlpoll/";
393
394
395dwr.engine._async = Boolean("true");
396
397
398dwr.engine._pageId = null;
399
400
401dwr.engine._dwrSessionId = null;
402
403
404dwr.engine._scriptSessionId = "";
405
406
407dwr.engine._preHook = null;
408
409
410dwr.engine._postHook = null;
411
412
413dwr.engine._batches = {};
414
415
416dwr.engine._batchesLength = 0;
417
418
419dwr.engine._batchQueue = [];
420
421
422dwr.engine._ordered = false;
423
424
425dwr.engine._internalOrdered = false;
426
427
428dwr.engine._batch = null;
429
430
431dwr.engine._timeout = 0;
432
433
434dwr.engine._activeReverseAjax = false;
435
436
437dwr.engine._nextReverseAjaxIndex = 0;
438
439
440dwr.engine._reverseAjaxQueue = {};
441
442
443dwr.engine._pollBatch = null;
444
445
446dwr.engine._pollTimeout = 0;
447
448
449dwr.engine._pollCometInterval = 200;
450
451
452dwr.engine._retries = 1;
453dwr.engine._maxRetries = -1;
454
455
456dwr.engine._retryIntervals = [];
457
458
459
460
461
462dwr.engine._defaultRetryIntervals = [ 1, 3, 3 ];
463
464dwr.engine._textHtmlHandler = null;
465
466
467dwr.engine._headers = null;
468
469
470if (typeof attributes != "undefined") {
471dwr.engine._attributes = attributes;
472}
473else {
474dwr.engine._attributes = null;
475}
476
477
478dwr.engine._nextBatchId = 0;
479
480
481dwr.engine._instanceId = -1;
482
483
484dwr.engine._propnames = [ "async", "timeout", "errorHandler", "warningHandler", "textHtmlHandler" ];
485
486
487dwr.engine._partialResponseNo = 0;
488dwr.engine._partialResponseYes = 1;
489
490
491dwr.engine._isNotifyServerOnPageUnload = false;
492
493
494dwr.engine._isNotifyServerOnPageLoad = false;
495dwr.engine._isNotifyServerOnPageLoadSent = false;
496
497
498dwr.engine._asyncUnload = false;
499
500
501
502
503
504dwr.engine._mappedClasses = {};
505
506
507dwr.engine._errorHandler = dwr.engine.defaultErrorHandler;
508
509
510dwr.engine._warningHandler = dwr.engine.defaultWarningHandler;
511
512dwr.engine._pollStatusHandler = dwr.engine.defaultPollStatusHandler;
513
514
515dwr.engine._postSeperator = "\n";
516dwr.engine._defaultInterceptor = function(data) { return data; };
517dwr.engine._urlRewriteHandler = dwr.engine._defaultInterceptor;
518dwr.engine._contentRewriteHandler = dwr.engine._defaultInterceptor;
519dwr.engine._replyRewriteHandler = dwr.engine._defaultInterceptor;
520
521
522dwr.engine._excludeObjectAttributes = {
523"$dwrClassName": true,
524"$dwrByRef": true,
525"$_dwrConversionRef": true
526};
527
528dwr.engine._ieConditions = {};
529
530
531dwr.engine._beforeUnloading = false;
532
533
534dwr.engine._queuedBatchException = null;
535
536
537
538dwr.engine._beforeUnloader = function() {
539dwr.engine._beforeUnloading = true;
540
541
542
543setTimeout(function() {
544
545
546
547setTimeout(function() {
548dwr.engine._beforeUnloading = false;
549}, 1000);
550}, 1);
551};
552
553
554dwr.engine._unloading = false;
555
556
557dwr.engine._unloader = function() {
558dwr.engine._unloading = true;
559
560
561dwr.engine._batchQueue.length = 0;
562
563
564var batch;
565for (var batchId in dwr.engine._batches) {
566batch = dwr.engine._batches[batchId];
567if (batch.transport && batch.transport.abort) {
568batch.transport.abort(batch);
569}
570}
571
572
573if (dwr.engine._isNotifyServerOnPageUnload) {
574dwr.engine._debug("calling unloader for: " + dwr.engine._scriptSessionId);
575batch = {
576map:{
577callCount:1,
578'c0-scriptName':'__System',
579'c0-methodName':'pageUnloaded',
580'c0-id':0
581},
582paramCount:0, isPoll:false, async:dwr.engine._asyncUnload,
583headers:{}, preHooks:[], postHooks:[],
584timeout:dwr.engine._timeout,
585errorHandler:null, globalErrorHandler:dwr.engine._errorHandler, warningHandler:null, textHtmlHandler:null, globalTextHtmlHandler:null,
586handlers:[{ exceptionHandler:null, callback:null }]
587};
588dwr.engine.transport.send(batch);
589dwr.engine._isNotifyServerOnPageUnload = false;
590}
591};
592
593function ignoreIfUnloading(batch, f) {
594
595if (dwr.engine._unloading) return;
596
597if (dwr.engine._beforeUnloading && (batch == null || batch.async)) {
598setTimeout(function() {
599ignoreIfUnloading(batch, f);
600}, 100);
601}
602
603else {
604return f();
605}
606}
607
608dwr.engine._initializer = {
609
610
611
612preInit: function() {
613
614dwr.engine._pageId = dwr.engine.util.tokenify(new Date().getTime()) + "-" + dwr.engine.util.tokenify(Math.random() * 1E16);
615
616
617dwr.engine.transport.updateDwrSessionFromCookie();
618
619
620dwr.engine.util.addEventListener(window, 'beforeunload', dwr.engine._beforeUnloader);
621dwr.engine.util.addEventListener(window, 'unload', dwr.engine._unloader);
622
623
624var g = dwr.engine._global;
625if (!g.dwr) g.dwr = {};
626if (!g.dwr._) g.dwr._ = [];
627dwr.engine._instanceId = g.dwr._.length;
628g.dwr._[dwr.engine._instanceId] = dwr;
629},
630
631loadDwrConfig: function() {
632if (typeof dwrConfig != "undefined") {
633for(p in dwrConfig) {
634var methodName = "set" + p.charAt(0).toUpperCase() + p.substring(1);
635var setter = dwr.engine[methodName];
636if (setter) setter(dwrConfig[p]);
637}
638}
639},
640
641init: function() {
642dwr.engine._initializer.preInit();
643dwr.engine._initializer.loadDwrConfig();
644dwr.engine._initializing = false;
645
646if (dwr.engine._isNotifyServerOnPageLoad) {
647eval("dwr.engine._execute(dwr.engine._pathToDwrServlet, '__System', 'pageLoaded', [ function() { dwr.engine._ordered = false; }]);");
648dwr.engine._isNotifyServerOnPageLoadSent = true;
649}
650if (dwr.engine._activeReverseAjax) {
651dwr.engine._poll();
652}
653}
654};
655
656
657
658
659
660
661
662
663
664
665
666dwr.engine._execute = function(overridePath, scriptName, methodName, args) {
667var path = overridePath || dwr.engine._effectivePath();
668dwr.engine._singleShot = false;
669if (dwr.engine._batch == null) {
670dwr.engine.beginBatch();
671dwr.engine._singleShot = true;
672}
673
674var batch = dwr.engine._batch;
675
676
677if (batch.path == null) {
678batch.path = path;
679}
680else {
681if (batch.path != path) {
682dwr.engine._handleError(batch, { name:"dwr.engine.multipleServlets", message:"Can't batch requests to multiple DWR Servlets." });
683return;
684}
685}
686
687dwr.engine.batch.addCall(batch, scriptName, methodName, args);
688
689if (dwr.engine._isHeartbeatBatch(batch)) {
690
691batch.timeout = 750;
692}
693
694
695batch.map.callCount++;
696if (dwr.engine._singleShot) {
697return dwr.engine.endBatch();
698}
699};
700
701
702
703
704
705dwr.engine._poll = function() {
706if (!dwr.engine._activeReverseAjax) {
707return;
708}
709dwr.engine._pollBatch = dwr.engine.batch.createPoll();
710dwr.engine.transport.send(dwr.engine._pollBatch);
711};
712
713
714dwr.engine._executeScript = function(script) {
715if (script == null) {
716return null;
717}
718if (script === "") {
719dwr.engine._debug("Warning: blank script", true);
720return null;
721}
722
723(new Function("dwr", script))(dwr);
724};
725
726
727dwr.engine._callPostHooks = function(batch) {
728if (batch.postHooks) {
729for (var i = 0; i < batch.postHooks.length; i++) {
730batch.postHooks[i]();
731}
732batch.postHooks = null;
733}
734};
735
736
737
738
739
740
741
742dwr.engine._isHeartbeatBatch = function(batch) {
743return (batch.map && batch.map['c0-methodName'] === 'checkHeartbeat' && batch.map['c0-scriptName'] === '__System');
744};
745
746
747
748
749
750
751
752dwr.engine._handleError = function(batch, ex) {
753if (batch && dwr.engine._isHeartbeatBatch(batch)) {
754return;
755}
756var errorHandlers = [];
757var anyCallWithoutErrorHandler = false;
758if (batch && batch.isPoll) {
759dwr.engine._handlePollRetry(batch, ex);
760} else {
761
762if (batch) {
763for (var i = 0; i < batch.map.callCount; i++) {
764var handlers = batch.handlers[i];
765if (!handlers.completed) {
766if (typeof handlers.errorHandler == "function")
767errorHandlers.push(handlers.errorHandler);
768else
769anyCallWithoutErrorHandler = true;
770handlers.completed = true;
771}
772}
773}
774
775ignoreIfUnloading(batch, function() {
776if (batch) {
777var textHtmlHandler = batch.textHtmlHandler || batch.globalTextHtmlHandler;
778if (ex.name === "dwr.engine.textHtmlReply" && textHtmlHandler) {
779dwr.engine.util.logHandlerEx(function() {
780textHtmlHandler(ex);
781});
782return;
783}
784}
785dwr.engine._prepareException(ex);
786var errorHandler;
787while(errorHandlers.length > 0) {
788errorHandler = errorHandlers.shift();
789dwr.engine.util.logHandlerEx(function() {
790errorHandler(ex.message, ex);
791});
792}
793if (batch) {
794dwr.engine.util.logHandlerEx(function() {
795if (typeof batch.errorHandler == "function") batch.errorHandler(ex.message, ex);
796else if (anyCallWithoutErrorHandler) {
797if (typeof batch.globalErrorHandler == "function") batch.globalErrorHandler(ex.message, ex);
798}
799});
800dwr.engine.batch.remove(batch);
801}
802});
803}
804};
805
806
807
808
809
810
811
812dwr.engine._handlePollRetry = function(batch, ex) {
813var retryInterval = dwr.engine._getRetryInterval();
814
815if (dwr.engine._retries === dwr.engine._retryIntervals.length - 1) {
816dwr.engine._debug("poll retry - going offline: " + retryInterval/1000 + " seconds");
817dwr.engine._handlePollStatusChange(false, ex, batch);
818
819var heartbeatInterval = setInterval(function() {
820if (dwr.engine._maxRetries === -1 || dwr.engine._retries < dwr.engine._maxRetries) {
821dwr.engine._execute(null, '__System', 'checkHeartbeat', [ function() {
822
823clearInterval(heartbeatInterval);
824dwr.engine._poll();
825}]);
826dwr.engine._retries++;
827dwr.engine._debug("DWR Offline - poll retry - interval: " + retryInterval/1000 + " seconds");
828} else {
829
830clearInterval(heartbeatInterval);
831dwr.engine._debug("max retries reached, stop polling for server status.");
832dwr.engine._handlePollStatusChange(false, ex, batch);
833}
834}, retryInterval);
835} else {
836dwr.engine._retries++;
837dwr.engine.batch.remove(batch);
838dwr.engine._debug("DWR Online - poll retry - interval: " + retryInterval/1000 + " seconds");
839setTimeout(dwr.engine._poll, retryInterval);
840}
841};
842
843dwr.engine._getRetryInterval = function() {
844var retryInterval;
845if (dwr.engine._retries < dwr.engine._retryIntervals.length) {
846retryInterval = dwr.engine._retryIntervals[dwr.engine._retries] * 1000;
847} else {
848
849retryInterval = dwr.engine._retryIntervals[dwr.engine._retryIntervals.length - 1] * 1000;
850}
851return retryInterval;
852};
853
854
855
856
857
858
859dwr.engine._handlePollStatusChange = function(newStatus, ex, batch) {
860if (batch.isPoll || dwr.engine._isHeartbeatBatch(batch)) {
861var changed = dwr.engine._pollOnline !== newStatus;
862var maxRetriesReached = dwr.engine._maxRetries === dwr.engine._retries;
863dwr.engine._pollOnline = newStatus;
864if ((changed || maxRetriesReached) && typeof dwr.engine._pollStatusHandler === "function")
865dwr.engine.util.logHandlerEx(function() {
866dwr.engine._pollStatusHandler(newStatus, ex, maxRetriesReached);
867});
868if (newStatus) {
869dwr.engine._retries = 1;
870}
871}
872};
873
874
875
876
877
878
879
880dwr.engine._handleWarning = function(batch, ex) {
881if (batch && dwr.engine._isHeartbeatBatch(batch)) {
882return;
883}
884ignoreIfUnloading(batch, function() {
885
886dwr.engine._prepareException(ex);
887dwr.engine.util.logHandlerEx(function() {
888if (batch && typeof batch.warningHandler == "function") batch.warningHandler(ex.message, ex);
889else if (dwr.engine._warningHandler) dwr.engine._warningHandler(ex.message, ex);
890});
891if (batch) dwr.engine.batch.remove(batch);
892});
893};
894
895
896
897
898
899
900dwr.engine._prepareException = function(ex) {
901if (typeof ex == "string") ex = { name:"unknown", message:ex };
902if (ex.message == null) ex.message = "";
903if (ex.name == null) ex.name = "unknown";
904};
905
906
907
908
909
910dwr.engine._delegate = (function() {
911function F(){}
912return (function(obj){
913F.prototype = obj;
914return new F();
915});
916})();
917
918
919
920
921
922dwr.engine._createFromMap = function(map) {
923var obj = new this();
924for(prop in map) if (map.hasOwnProperty(prop)) obj[prop] = map[prop];
925return obj;
926};
927
928
929
930
931dwr.engine._global = (function(){return this;}).call(null);
932
933
934
935
936
937
938
939dwr.engine._getObject = function(prop) {
940var parts = prop.split(".");
941var value = undefined;
942var scope = dwr.engine._global;
943while(parts.length > 0) {
944var currprop = parts.shift();
945if (!scope) return undefined;
946value = scope[currprop];
947if (value && value.tagName && document.getElementById(currprop) == value) return undefined;
948scope = value;
949}
950return value;
951};
952
953
954
955
956
957
958dwr.engine._setObject = function(prop, obj) {
959var parts = prop.split(".");
960var level;
961var scope = dwr.engine._global;
962while(parts.length > 0) {
963var currprop = parts.shift();
964if (parts.length === 0) {
965scope[currprop] = obj;
966}
967else {
968level = scope[currprop];
969if (level == null || level.tagName && document.getElementById(currprop) == level) {
970scope[currprop] = level = {};
971}
972scope = level;
973}
974}
975};
976
977
978
979
980
981
982
983dwr.engine._debug = function(message, stacktrace) {
984var written = false;
985try {
986if (window.console) {
987if (stacktrace && window.console.trace) window.console.trace();
988if (window.console.log) window.console.log(message);
989written = true;
990}
991else if (window.opera && window.opera.postError) {
992window.opera.postError(message);
993written = true;
994}
995}
996catch (ex) {   }
997
998if (!written) {
999var debug = document.getElementById("dwr-debug");
1000if (debug) {
1001var contents = message + "<br/>" + debug.innerHTML;
1002if (contents.length > 2048) contents = contents.substring(0, 2048);
1003debug.innerHTML = contents;
1004}
1005}
1006};
1007
1008
1009
1010
1011dwr.engine.remote = {
1012
1013
1014
1015
1016
1017
1018
1019handleCallback:function(batchId, callId, reply) {
1020var batch = dwr.engine._batches[batchId];
1021if (!batch) return;
1022
1023
1024batch.reply = reply;
1025
1026
1027
1028try {
1029var handlers = batch.handlers[callId];
1030if (!handlers) {
1031dwr.engine._debug("Warning: Missing handlers. callId=" + callId, true);
1032}
1033else {
1034batch.handlers[callId].completed = true;
1035if (typeof handlers.callback == "function") {
1036dwr.engine.util.logHandlerEx(function() {
1037if(handlers.callbackArg !== undefined)
1038handlers.callback.call(handlers.callbackScope, reply, handlers.callbackArg);
1039else
1040handlers.callback.call(handlers.callbackScope, reply);
1041});
1042}
1043}
1044}
1045catch (ex) {
1046dwr.engine._handleError(batch, ex);
1047}
1048},
1049
1050
1051
1052
1053
1054
1055handleFunctionCall:function(id, args) {
1056var func = dwr.engine.serialize.remoteFunctions[id];
1057func.apply(window, args);
1058},
1059
1060
1061
1062
1063
1064
1065handleObjectCall:function(id, methodName, args) {
1066var obj = dwr.engine.serialize.remoteFunctions[id];
1067obj[methodName].apply(obj, args);
1068},
1069
1070
1071
1072
1073
1074
1075handleSetCall:function(id, propertyName, data) {
1076var obj = dwr.engine.serialize.remoteFunctions[id];
1077obj[propertyName] = data;
1078},
1079
1080
1081
1082
1083
1084handleFunctionClose:function(id) {
1085delete dwr.engine.serialize.remoteFunctions[id];
1086},
1087
1088
1089
1090
1091
1092
1093
1094
1095handleException:function(batchId, callId, ex) {
1096var batch = dwr.engine._batches[batchId];
1097if (!batch) return;
1098
1099var handlers = batch.handlers[callId];
1100batch.handlers[callId].completed = true;
1101if (handlers == null) {
1102dwr.engine._debug("Warning: null handlers in remoteHandleException", true);
1103return;
1104}
1105
1106if (ex.message === undefined) {
1107ex.message = "";
1108}
1109
1110dwr.engine.util.logHandlerEx(function() {
1111if (typeof handlers.exceptionHandler == "function") {
1112if (handlers.exceptionArg !== undefined)
1113handlers.exceptionHandler.call(handlers.exceptionScope, ex.message, ex, handlers.exceptionArg);
1114else
1115handlers.exceptionHandler.call(handlers.exceptionScope, ex.message, ex);
1116}
1117else if (typeof handlers.errorHandler == "function") {
1118handlers.errorHandler(ex.message, ex);
1119}
1120else if (typeof batch.errorHandler == "function") {
1121batch.errorHandler(ex.message, ex);
1122}
1123else if (typeof batch.globalErrorHandler == "function") {
1124batch.globalErrorHandler(ex.message, ex);
1125}
1126});
1127},
1128
1129
1130
1131
1132handleReverseAjax:function(reverseAjaxIndex, reverseAjaxFunc) {
1133if (reverseAjaxIndex < dwr.engine._nextReverseAjaxIndex) return;
1134dwr.engine._reverseAjaxQueue[reverseAjaxIndex] = reverseAjaxFunc;
1135while(true) {
1136var nextFunc = dwr.engine._reverseAjaxQueue[dwr.engine._nextReverseAjaxIndex];
1137if (!nextFunc) return;
1138dwr.engine.util.logHandlerEx(function() {
1139nextFunc();
1140});
1141delete dwr.engine._reverseAjaxQueue[dwr.engine._nextReverseAjaxIndex];
1142dwr.engine._nextReverseAjaxIndex++;
1143}
1144},
1145
1146
1147
1148
1149
1150
1151
1152handleBatchException:function(ex, batchId) {
1153var batch = dwr.engine._batches[batchId];
1154if (ex.message === undefined) ex.message = "";
1155if (batch) {
1156dwr.engine._handleError(batch, ex);
1157} else {
1158dwr.engine._queuedBatchException = ex;
1159}
1160},
1161
1162
1163
1164
1165
1166
1167
1168pollCometDisabled:function(ex, batchId){
1169dwr.engine.setActiveReverseAjax(false);
1170var batch = dwr.engine._batches[batchId];
1171if (ex.message === undefined) {
1172ex.message = "";
1173}
1174dwr.engine._handleError(batch, ex);
1175},
1176
1177
1178
1179
1180
1181
1182
1183newObject:function(dwrClassName, memberMap){
1184var classfunc = dwr.engine._mappedClasses[dwrClassName];
1185if (classfunc && classfunc.createFromMap) {
1186return classfunc.createFromMap(memberMap);
1187}
1188else {
1189memberMap.$dwrClassName = dwrClassName;
1190return memberMap;
1191}
1192}
1193};
1194
1195
1196
1197
1198dwr.engine.serialize = {
1199
1200
1201
1202domDocument:[
1203"Msxml2.DOMDocument.6.0",
1204"Msxml2.DOMDocument.5.0",
1205"Msxml2.DOMDocument.4.0",
1206"Msxml2.DOMDocument.3.0",
1207"MSXML2.DOMDocument",
1208"MSXML.DOMDocument",
1209"Microsoft.XMLDOM"
1210],
1211
1212
1213
1214
1215remoteFunctions:{},
1216
1217
1218
1219
1220funcId:0,
1221
1222
1223
1224
1225
1226toDomElement:function(xml) {
1227return dwr.engine.serialize.toDomDocument(xml).documentElement;
1228},
1229
1230
1231
1232
1233
1234toDomDocument:function(xml) {
1235var dom;
1236if (window.DOMParser) {
1237var parser = new DOMParser();
1238dom = parser.parseFromString(xml, "text/xml");
1239if (!dom.documentElement || dom.documentElement.tagName == "parsererror") {
1240var message = dom.documentElement.firstChild.data;
1241message += "\n" + dom.documentElement.firstChild.nextSibling.firstChild.data;
1242throw message;
1243}
1244return dom;
1245}
1246else if (window.ActiveXObject) {
1247dom = dwr.engine.util.newActiveXObject(dwr.engine.serialize.domDocument);
1248dom.loadXML(xml);
1249return dom;
1250}
1251else {
1252var div = document.createElement("div");
1253div.innerHTML = xml;
1254return div;
1255}
1256},
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267convert:function(batch, directrefmap, otherrefmap, data, name, depth) {
1268if (data == null) {
1269batch.map[name] = "null:null";
1270return;
1271}
1272
1273switch (typeof data) {
1274case "boolean":
1275batch.map[name] = "boolean:" + data;
1276break;
1277case "number":
1278batch.map[name] = "number:" + data;
1279break;
1280case "string":
1281batch.map[name] = "string:" + encodeURIComponent(data);
1282break;
1283case "object":
1284var ref = dwr.engine.serialize.lookup(directrefmap, otherrefmap, data, name);
1285var objstr = Object.prototype.toString.call(data);
1286if (data.$dwrByRef) batch.map[name] = dwr.engine.serialize.convertByReference(batch, directrefmap, otherrefmap, data, name, depth + 1);
1287else if (ref != null) batch.map[name] = ref;
1288else if (objstr == "[object String]") batch.map[name] = "string:" + encodeURIComponent(data);
1289else if (objstr == "[object Boolean]") batch.map[name] = "boolean:" + data;
1290else if (objstr == "[object Number]") batch.map[name] = "number:" + data;
1291else if (objstr == "[object Date]") batch.map[name] = "date:" + data.getTime();
1292else if (objstr == "[object Array]") batch.map[name] = dwr.engine.serialize.convertArray(batch, directrefmap, otherrefmap, data, name, depth + 1);
1293else if (data && data.tagName && data.tagName.toLowerCase() == "input" && data.type && data.type.toLowerCase() == "file") {
1294batch.fileUpload = true;
1295batch.map[name] = data;
1296}
1297else {
1298
1299
1300if (data.nodeName && data.nodeType) {
1301batch.map[name] = dwr.engine.serialize.convertDom(data);
1302}
1303else {
1304batch.map[name] = dwr.engine.serialize.convertObject(batch, directrefmap, otherrefmap, data, name, depth + 1);
1305}
1306}
1307break;
1308case "function":
1309
1310if (depth === 0) {
1311batch.map[name] = dwr.engine.serialize.convertByReference(batch, directrefmap, otherrefmap, data, name, depth + 1);
1312}
1313break;
1314default:
1315dwr.engine._handleWarning(null, { name:"dwr.engine.unexpectedType", message:"Unexpected type: " + typeof data + ", attempting default converter." });
1316batch.map[name] = "default:" + data;
1317break;
1318}
1319},
1320
1321
1322
1323
1324
1325
1326convertByReference:function(batch, directrefmap, otherrefmap, data, name, depth) {
1327var funcId = "f" + dwr.engine.serialize.funcId;
1328dwr.engine.serialize.remoteFunctions[funcId] = data;
1329dwr.engine.serialize.funcId++;
1330return "byref:" + funcId;
1331},
1332
1333
1334
1335
1336
1337
1338convertArray:function(batch, directrefmap, otherrefmap, data, name, depth) {
1339var childName, i;
1340if (dwr.engine.util.ieCondition("if lte IE 7")) {
1341
1342var buf = ["array:["];
1343for (i = 0; i < data.length; i++) {
1344if (i !== 0) buf.push(",");
1345batch.paramCount++;
1346childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount;
1347dwr.engine.serialize.convert(batch, directrefmap, otherrefmap, data[i], childName, depth + 1);
1348buf.push("reference:");
1349buf.push(childName);
1350}
1351buf.push("]");
1352reply = buf.join("");
1353}
1354else {
1355
1356var reply = "array:[";
1357for (i = 0; i < data.length; i++) {
1358if (i !== 0) reply += ",";
1359batch.paramCount++;
1360childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount;
1361dwr.engine.serialize.convert(batch, directrefmap, otherrefmap, data[i], childName, depth + 1);
1362reply += "reference:";
1363reply += childName;
1364}
1365reply += "]";
1366}
1367
1368return reply;
1369},
1370
1371
1372
1373
1374
1375
1376convertObject:function(batch, directrefmap, otherrefmap, data, name, depth) {
1377
1378var reply = "Object_" + dwr.engine.serialize.getObjectClassName(data).replace(/:/g, "?") + ":{";
1379var elementset = (data.constructor && data.constructor.$dwrClassMembers ? data.constructor.$dwrClassMembers : data);
1380var element;
1381for (element in elementset) {
1382if (typeof data[element] != "function" && !dwr.engine._excludeObjectAttributes[element]) {
1383batch.paramCount++;
1384var childName = "c" + dwr.engine._batch.map.callCount + "-e" + batch.paramCount;
1385dwr.engine.serialize.convert(batch, directrefmap, otherrefmap, data[element], childName, depth + 1);
1386reply += encodeURIComponent(element) + ":reference:" + childName + ", ";
1387}
1388}
1389
1390if (reply.substring(reply.length - 2) == ", ") {
1391reply = reply.substring(0, reply.length - 2);
1392}
1393reply += "}";
1394
1395return reply;
1396},
1397
1398
1399
1400
1401
1402
1403convertDom:function(data) {
1404return "xml:" + encodeURIComponent(dwr.engine.serialize.serializeDom(data));
1405},
1406serializeDom:function(data) {
1407var output;
1408if (window.XMLSerializer) output = new XMLSerializer().serializeToString(data);
1409else if (data.xml) output = data.xml;
1410else throw new Error("The browser doesn't support XML serialization of: " + data);
1411return output;
1412},
1413
1414
1415
1416
1417
1418
1419lookup:function(directrefmap, otherrefmap, data, name) {
1420
1421var ref;
1422if ("$_dwrConversionRef" in data) {
1423ref = data.$_dwrConversionRef;
1424if (ref && directrefmap[ref] != data) ref = null;
1425}
1426if (ref == null) {
1427for(r in otherrefmap) {
1428if (otherrefmap[r] == data) {
1429ref = r;
1430break;
1431}
1432}
1433}
1434if (ref != null) return "reference:" + ref;
1435
1436try {
1437data.$_dwrConversionRef = name;
1438directrefmap[name] = data;
1439}
1440catch(err) {
1441otherrefmap[name] = data;
1442}
1443return null;
1444},
1445
1446
1447
1448
1449
1450cleanup:function(directrefmap) {
1451for(var refName in directrefmap) {
1452var data = directrefmap[refName];
1453try {
1454delete data.$_dwrConversionRef;
1455}
1456catch(err) {
1457data.$_dwrConversionRef = undefined;
1458}
1459}
1460},
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470getObjectClassName:function(obj) {
1471
1472if (obj.$dwrClassName)
1473return obj.$dwrClassName;
1474else if (obj.constructor && obj.constructor.$dwrClassName)
1475return obj.constructor.$dwrClassName;
1476else
1477return "Object";
1478}
1479};
1480
1481
1482
1483
1484dwr.engine.transport = {
1485
1486
1487
1488
1489
1490send:function(batch) {
1491if (batch.path == null) {
1492batch.path = dwr.engine._effectivePath();
1493}
1494dwr.engine.transport.updateDwrSessionFromCookie();
1495if (!dwr.engine._dwrSessionId) {
1496dwr.engine._internalOrdered = true;
1497var retval;
1498var idbatch = {
1499map:{
1500callCount:1,
1501'c0-scriptName':'__System',
1502'c0-methodName':'generateId',
1503'c0-id':0
1504},
1505paramCount:0, isPoll:false, async:batch.async,
1506headers:{}, preHooks:[],
1507postHooks:[function() {
1508dwr.engine._internalOrdered = false;
1509}],
1510timeout:dwr.engine._timeout,
1511errorHandler:batch.errorHandler, globalErrorHandler:batch.globalErrorHandler, warningHandler:batch.warningHandler, textHtmlHandler:batch.textHtmlHandler, globalTextHtmlHandler:batch.globalTextHtmlHandler,
1512path:batch.path,
1513handlers:[{
1514exceptionHandler:null,
1515callback:function(id) {
1516dwr.engine.transport.updateDwrSessionFromCookie();
1517if (!dwr.engine._dwrSessionId) {
1518dwr.engine.transport.setDwrSession(id);
1519}
1520retval = dwr.engine.transport.send2(batch);
1521}
1522}]
1523};
1524dwr.engine.transport.send2(idbatch);
1525return retval;
1526}
1527else {
1528return dwr.engine.transport.send2(batch);
1529}
1530},
1531
1532
1533
1534
1535
1536
1537send2:function(batch) {
1538dwr.engine.batch.prepareToSend(batch);
1539
1540
1541var isCrossDomain = false;
1542if (batch.path.indexOf("http://") === 0 || batch.path.indexOf("https://") === 0) {
1543var dwrShortPath = batch.path.split("/", 3).join("/");
1544var hrefShortPath = window.location.href.split("/", 3).join("/");
1545isCrossDomain = (dwrShortPath != hrefShortPath);
1546}
1547
1548if (batch.fileUpload) {
1549if (isCrossDomain) {
1550throw new Error("Cross domain file uploads are not possible with this release of DWR");
1551}
1552batch.transport = dwr.engine.transport.iframe;
1553}
1554else if (isCrossDomain) {
1555batch.transport = dwr.engine.transport.scriptTag;
1556}
1557else if (batch.isPoll && dwr.engine._useStreamingPoll == "true" && dwr.engine.util.ieCondition("if (IE 8)|(IE 9)")) {
1558batch.transport = dwr.engine.transport.iframe;
1559}
1560else {
1561batch.transport = dwr.engine.transport.xhr;
1562}
1563
1564return batch.transport.send(batch);
1565},
1566
1567
1568
1569
1570complete:function(batch) {
1571dwr.engine.batch.validate(batch);
1572dwr.engine.transport.remove(batch);
1573},
1574
1575
1576
1577
1578
1579
1580abort:function(batch) {
1581var transport = batch.transport;
1582if (transport.abort) {
1583transport.abort(batch);
1584}
1585dwr.engine.transport.remove(batch);
1586},
1587
1588
1589
1590
1591
1592remove:function(batch) {
1593if (batch.transport) {
1594dwr.engine._callPostHooks(batch);
1595batch.transport.remove(batch);
1596batch.transport = null;
1597}
1598dwr.engine.batch.remove(batch);
1599},
1600
1601setDwrSession:function(dwrsess) {
1602dwr.engine._dwrSessionId = dwrsess;
1603var attrs = "";
1604if (!dwr.engine._cookieAttributes.match(/^path=/i)) {
1605attrs = "; path=" + (dwr.engine._effectiveContextPath() || "/");
1606}
1607if (dwr.engine._cookieAttributes) {
1608attrs += "; " + dwr.engine._cookieAttributes;
1609}
1610document.cookie = "DWRSESSIONID=" + dwrsess + attrs;
1611dwr.engine._scriptSessionId = dwrsess + "/" + dwr.engine._pageId;
1612},
1613
1614updateDwrSessionFromCookie:function() {
1615if (!dwr.engine._dwrSessionId) {
1616var match = document.cookie.match(/(?:^|; )DWRSESSIONID=([^;]+)/);
1617if (match) {
1618dwr.engine.transport.setDwrSession(match[1]);
1619}
1620}
1621},
1622
1623
1624
1625
1626xhr:{
1627
1628
1629
1630httpMethod:"POST",
1631
1632
1633
1634
1635
1636
1637XMLHTTP:["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"],
1638
1639
1640
1641
1642
1643send:function(batch) {
1644if (batch.isPoll) {
1645batch.map.partialResponse = dwr.engine._partialResponseYes;
1646}
1647
1648
1649if (batch.isPoll && dwr.engine._useStreamingPoll == "false") {
1650batch.map.partialResponse = dwr.engine._partialResponseNo;
1651}
1652if (batch.isPoll && dwr.engine.util.ieCondition("if lte IE 9")) {
1653batch.map.partialResponse = dwr.engine._partialResponseNo;
1654}
1655
1656if (window.XMLHttpRequest) {
1657batch.req = new XMLHttpRequest();
1658}
1659else if (window.ActiveXObject) {
1660batch.req = dwr.engine.util.newActiveXObject(dwr.engine.transport.xhr.XMLHTTP);
1661}
1662
1663
1664if (batch.async === true) {
1665batch.req.onreadystatechange = function() {
1666if (typeof dwr != 'undefined') {
1667dwr.engine.transport.xhr.stateChange(batch);
1668}
1669};
1670}
1671
1672var httpMethod = dwr.engine.transport.xhr.httpMethod;
1673
1674batch.mode = batch.isPoll ? dwr.engine._ModePlainPoll : dwr.engine._ModePlainCall;
1675var request = dwr.engine.batch.constructRequest(batch, httpMethod);
1676
1677try {
1678batch.req.open(httpMethod, request.url, batch.async);
1679try {
1680for (var prop in batch.headers) {
1681var value = batch.headers[prop];
1682if (typeof value == "string") {
1683batch.req.setRequestHeader(prop, value);
1684}
1685}
1686if (!batch.headers["Content-Type"]) {
1687batch.req.setRequestHeader("Content-Type", "text/plain");
1688}
1689}
1690catch (ex) {
1691dwr.engine._handleWarning(batch, ex);
1692}
1693
1694batch.req.send(request.body);
1695if (batch.async === false) {
1696dwr.engine.transport.xhr.stateChange(batch);
1697}
1698}
1699catch (ex2) {
1700dwr.engine._handleError(batch, ex2);
1701}
1702
1703if (batch.isPoll && batch.map.partialResponse == dwr.engine._partialResponseYes) {
1704dwr.engine.transport.xhr.checkCometPoll();
1705}
1706
1707
1708return batch.reply;
1709},
1710
1711
1712
1713
1714
1715
1716stateChange:function(batch) {
1717var toEval;
1718
1719if (batch.aborted) return;
1720if (batch.completed) {
1721if (batch.transport) dwr.engine._debug("Error: _stateChange() with batch.completed");
1722return;
1723}
1724
1725
1726var req = batch.req;
1727var status = 0;
1728try {
1729if (req.readyState >= 2) {
1730status = req.status;
1731}
1732}
1733catch(ignore) {}
1734
1735
1736
1737if (status === 0 && req.readyState < 4) {
1738return;
1739}
1740
1741
1742
1743
1744
1745if (status === 200) {
1746dwr.engine._handlePollStatusChange(true, null, batch);
1747}
1748
1749
1750if (req.readyState != 4) {
1751return;
1752}
1753
1754if (dwr.engine._unloading) {
1755dwr.engine._debug("Ignoring reply from server as page is unloading.");
1756return;
1757}
1758
1759try {
1760var reply = req.responseText;
1761reply = dwr.engine._replyRewriteHandler(reply);
1762var contentType = req.getResponseHeader("Content-Type");
1763if (status >= 200 && status < 300) {
1764if (contentType.indexOf("text/plain") < 0 && contentType.indexOf("text/javascript") < 0) {
1765if (contentType.indexOf("text/html") == 0) {
1766dwr.engine._handleError(batch, { name:"dwr.engine.textHtmlReply", message:"HTML reply from the server.", responseText:reply||"" });
1767} else {
1768dwr.engine._handleError(batch, { name:"dwr.engine.invalidMimeType", message:"Invalid content type: '" + contentType + "'" });
1769}
1770} else if (reply == null || reply === "") {
1771dwr.engine._handleError(batch, { name:"dwr.engine.missingData", message:"No data received from server" });
1772} else {
1773if (batch.isPoll && batch.map.partialResponse == dwr.engine._partialResponseYes) {
1774dwr.engine.transport.xhr.processCometResponse(reply, batch);
1775} else {
1776if (reply.search("//#DWR") === -1) {
1777dwr.engine._handleError(batch, { name:"dwr.engine.invalidReply", message:"Invalid reply from server" });
1778} else {
1779toEval = reply;
1780}
1781}
1782}
1783} else if (status >= 400) {
1784var statusText = "statusText could not be read.";
1785try {
1786statusText = req.statusText;
1787} catch (ex) {
1788
1789}
1790dwr.engine._handleError(batch, { name:"dwr.engine.http." + status, message:statusText });
1791}
1792
1793if (toEval != null) toEval = toEval.replace(dwr.engine._scriptTagProtection, "");
1794dwr.engine._executeScript(toEval);
1795dwr.engine.transport.complete(batch);
1796
1797} catch (ex2) {
1798dwr.engine._handleError(batch, ex2);
1799}
1800},
1801
1802
1803
1804
1805
1806checkCometPoll:function() {
1807var req = dwr.engine._pollBatch && dwr.engine._pollBatch.req;
1808if (req) {
1809var text = req.responseText;
1810if (text != null) {
1811dwr.engine.transport.xhr.processCometResponse(text, dwr.engine._pollBatch);
1812}
1813}
1814
1815if (dwr.engine._pollBatch) {
1816setTimeout(dwr.engine.transport.xhr.checkCometPoll, dwr.engine._pollCometInterval);
1817}
1818},
1819
1820
1821
1822
1823
1824
1825
1826
1827processCometResponse:function(response, batch) {
1828if (batch.charsProcessed == response.length) return;
1829if (response.length === 0) {
1830batch.charsProcessed = 0;
1831return;
1832}
1833
1834var firstStartTag = response.indexOf("//#DWR-START#", batch.charsProcessed);
1835if (firstStartTag == -1) {
1836
1837return;
1838}
1839
1840
1841
1842
1843var lastEndTag = response.lastIndexOf("//#DWR-END#");
1844if (lastEndTag == -1) {
1845
1846return;
1847}
1848
1849
1850if (response.charCodeAt(lastEndTag + 11) == 13 && response.charCodeAt(lastEndTag + 12) == 10) {
1851batch.charsProcessed = lastEndTag + 13;
1852}
1853else {
1854batch.charsProcessed = lastEndTag + 11;
1855}
1856
1857var exec = response.substring(firstStartTag + 13, lastEndTag);
1858
1859try {
1860dwr.engine._executeScript(exec);
1861}
1862catch (ex) {
1863
1864
1865if (dwr != null) {
1866dwr.engine._handleError(batch, ex);
1867}
1868}
1869},
1870
1871
1872
1873
1874abort:function(batch) {
1875if (batch.req) {
1876batch.aborted = true;
1877batch.req.abort();
1878}
1879},
1880
1881
1882
1883
1884
1885remove:function(batch) {
1886
1887if (batch.req) {
1888delete batch.req;
1889}
1890}
1891},
1892
1893
1894
1895
1896iframe:{
1897
1898
1899
1900httpMethod:"POST",
1901
1902
1903
1904
1905
1906send:function(batch) {
1907if (document.body == null) {
1908setTimeout(function(){dwr.engine.transport.iframe.send(batch);}, 100);
1909return;
1910}
1911batch.httpMethod = dwr.engine.transport.iframe.httpMethod;
1912if (batch.fileUpload) {
1913batch.httpMethod = "POST";
1914batch.encType = "multipart/form-data";
1915}
1916batch.loadingStarted = false;
1917if (window.location.hostname != document.domain) batch.map.documentDomain = document.domain;
1918var idname = dwr.engine.transport.iframe.getId(batch);
1919batch.div1 = document.createElement("div");
1920batch.div1.innerHTML = "<iframe frameborder='0' style='width:0px;height:0px;border:0;display:none;' id='" + idname + "' name='" + idname + "'></iframe>";
1921batch.iframe = batch.div1.firstChild;
1922batch.document = document;
1923batch.iframe.batch = batch;
1924batch.fileInputs = [];
1925dwr.engine.util.addEventListener(batch.iframe, "load", function(ev) {
1926
1927if (!batch.loadingStarted) return;
1928
1929while(batch.fileInputs.length > 0) {
1930var entry = batch.fileInputs.pop();
1931entry.original.setAttribute("id", entry.clone.getAttribute("id"));
1932entry.original.setAttribute("name", entry.clone.getAttribute("name"));
1933entry.original.style.display = entry.clone.style.display;
1934entry.clone.parentNode.replaceChild(entry.original, entry.clone);
1935}
1936
1937if (batch.completed) return;
1938
1939if (dwr.engine._queuedBatchException) {
1940dwr.engine._handleError(batch, dwr.engine._queuedBatchException);
1941dwr.engine._queuedBatchException = null;
1942return;
1943}
1944
1945try {
1946var contentDoc = batch.iframe.contentDocument || batch.iframe.contentWindow.document;
1947} catch(ex) {
1948var contentEx = ex;
1949}
1950if (typeof dwr != "undefined") {
1951var htmlResponse = contentDoc && contentDoc.documentElement ? contentDoc.documentElement.outerHTML : "(Could not extract HTML response: " + contentEx.message + ")";
1952dwr.engine._handleError(batch, {name:"dwr.engine.textHtmlReply", message:"HTML reply from the server.", responseText:htmlResponse});
1953}
1954});
1955
1956// http://stackoverflow.com/questions/18414964/load-event-for-iframe-does-not-fire-in-ie
1957document.body.appendChild(batch.div1);
1958dwr.engine.transport.iframe.beginLoader(batch, idname);
1959},
1960
1961
1962
1963
1964
1965
1966getId:function(batch) {
1967return batch.isPoll ? "dwr-if-poll-" + dwr.engine._instanceId + "-" + batch.map.batchId : "dwr-if-" + dwr.engine._instanceId + "-" + batch.map.batchId;
1968},
1969
1970
1971
1972
1973
1974beginLoader:function(batch, idname) {
1975if (batch.isPoll) {
1976batch.map.partialResponse = dwr.engine._partialResponseYes;
1977}
1978batch.mode = batch.isPoll ? dwr.engine._ModeHtmlPoll : dwr.engine._ModeHtmlCall;
1979var request = dwr.engine.batch.constructRequest(batch, batch.httpMethod);
1980if (batch.httpMethod === "GET") {
1981batch.iframe.setAttribute("src", request.url);
1982}
1983else {
1984
1985// See http://soakedandsoaped.com/articles/read/firefox-3-native-ajax-file-upload
1986
1987batch.div2 = document.createElement("div");
1988document.body.appendChild(batch.div2);
1989batch.div2.innerHTML = "<form" + (batch.encType ? " encType='" + batch.encType + "' encoding='" + batch.encType + "'" : "") + "></form>";
1990batch.form = batch.div2.firstChild;
1991batch.form.setAttribute("action", request.url);
1992batch.form.setAttribute("target", idname);
1993batch.form.setAttribute("style", "display:none");
1994batch.form.setAttribute("method", batch.httpMethod);
1995for (var prop in batch.map) {
1996var value = batch.map[prop];
1997if (typeof value != "function") {
1998if (value && value.tagName && value.tagName.toLowerCase() == "input" && value.type && value.type.toLowerCase() == "file") {
1999
2000
2001
2002if (value.parentNode) {
2003var clone = value.cloneNode(true);
2004value.parentNode.replaceChild(clone, value);
2005batch.fileInputs.push({original:value, clone:clone});
2006}
2007value.removeAttribute("id");
2008value.setAttribute("name", prop);
2009value.style.display = "none";
2010batch.form.appendChild(value);
2011} else {
2012var formInput = batch.document.createElement("input");
2013formInput.setAttribute("type", "hidden");
2014formInput.setAttribute("name", prop);
2015formInput.setAttribute("value", value);
2016batch.form.appendChild(formInput);
2017}
2018}
2019}
2020batch.loadingStarted = true;
2021batch.form.submit();
2022}
2023},
2024
2025
2026
2027
2028remote:{
2029
2030
2031
2032
2033
2034
2035beginIFrameResponse:function(iframe, batchId) {
2036},
2037
2038
2039
2040
2041
2042
2043endChunk:function(iframeWindow) {
2044setTimeout(function() {
2045
2046var scriptTags = iframeWindow.document.body.getElementsByTagName("script");
2047if (scriptTags.length > 0) {
2048var s = scriptTags[0];
2049s.parentNode.removeChild(s);
2050}
2051}, 0);
2052},
2053
2054
2055
2056
2057
2058
2059endIFrameResponse:function(batchId) {
2060var batch = dwr.engine._batches[batchId];
2061if (batch) dwr.engine.transport.complete(batch);
2062}
2063},
2064
2065remove:function(batch) {
2066
2067
2068setTimeout(function(){
2069if (batch.iframe && batch.iframe.parentNode) {
2070batch.iframe.parentNode.removeChild(batch.iframe);
2071batch.iframe = null;
2072}
2073if (batch.div1 && batch.div1.parentNode) {
2074batch.div1.parentNode.removeChild(batch.div1);
2075batch.div1 = null;
2076}
2077if (batch.form && batch.form.parentNode) {
2078batch.form.parentNode.removeChild(batch.form);
2079batch.form = null;
2080}
2081if (batch.div2 && batch.div2.parentNode) {
2082batch.div2.parentNode.removeChild(batch.div2);
2083batch.div2 = null;
2084}
2085}, 100);
2086}
2087},
2088
2089
2090
2091
2092scriptTag:{
2093
2094
2095
2096
2097send:function(batch) {
2098if (batch.isPoll) {
2099batch.map.partialResponse = dwr.engine._partialResponseNo;
2100}
2101batch.mode = batch.isPoll ? dwr.engine._ModePlainPoll : dwr.engine._ModePlainCall;
2102var request = dwr.engine.batch.constructRequest(batch, "GET");
2103
2104batch.script = document.createElement("script");
2105batch.script.id = "dwr-st-" + batch.map.batchId;
2106batch.script.src = request.url;
2107batch.script.type = "text/javascript";
2108batch.script.async = true;
2109dwr.engine.util.addEventListener(batch.script, "load", function(ev) {
2110if (typeof dwr != "undefined") dwr.engine.transport.scriptTag.complete(batch);
2111});
2112dwr.engine.util.addEventListener(batch.script, "error", function(ev) {
2113if (typeof dwr != "undefined") dwr.engine.transport.scriptTag.complete(batch);
2114});
2115dwr.engine.util.addEventListener(batch.script, "readystatechange", function(ev) {
2116if (typeof dwr != "undefined") {
2117if (batch.completed) return;
2118if (batch.script.readyState == "complete" || batch.script.readyState == "loaded") {
2119dwr.engine.transport.scriptTag.complete(batch);
2120}
2121}
2122});
2123document.getElementsByTagName("head")[0].appendChild(batch.script);
2124},
2125
2126
2127
2128
2129complete:function(batch) {
2130dwr.engine.transport.complete(batch);
2131},
2132
2133
2134
2135
2136remove:function(batch) {
2137
2138if (!batch.script) return;
2139
2140
2141batch.script.parentNode.removeChild(batch.script);
2142batch.script = null;
2143}
2144}
2145};
2146
2147
2148
2149
2150
2151dwr.engine.batch = {
2152
2153
2154
2155
2156create:function() {
2157var batch = {
2158async:dwr.engine._async,
2159charsProcessed:0,
2160handlers:[],
2161isPoll:false,
2162map:{ callCount:0 },
2163paramCount:0,
2164preHooks:[],
2165postHooks:[],
2166timeout:dwr.engine._timeout,
2167errorHandler:null,
2168globalErrorHandler:dwr.engine._errorHandler,
2169warningHandler:dwr.engine._warningHandler,
2170textHtmlHandler:null,
2171globalTextHtmlHandler:dwr.engine._textHtmlHandler
2172};
2173if (!dwr.engine._activeReverseAjax) batch.map.nextReverseAjaxIndex = dwr.engine._nextReverseAjaxIndex;
2174
2175if (dwr.engine._preHook) {
2176batch.preHooks.push(dwr.engine._preHook);
2177}
2178if (dwr.engine._postHook) {
2179batch.postHooks.push(dwr.engine._postHook);
2180}
2181
2182dwr.engine.batch.populateHeadersAndAttributes(batch);
2183return batch;
2184},
2185
2186
2187
2188
2189
2190
2191createPoll:function() {
2192var batch = {
2193async:true,
2194charsProcessed:0,
2195handlers:[{
2196callback:function(pause) {
2197dwr.engine._pollBatch = null;
2198setTimeout(dwr.engine._poll, pause);
2199}
2200}],
2201isPoll:true,
2202map:{ callCount:1, nextReverseAjaxIndex:dwr.engine._nextReverseAjaxIndex},
2203paramCount:0,
2204preHooks:[],
2205postHooks:[],
2206timeout:dwr.engine._pollTimeout
2207};
2208dwr.engine.batch.populateHeadersAndAttributes(batch);
2209return batch;
2210},
2211
2212
2213
2214
2215
2216
2217populateHeadersAndAttributes:function(batch) {
2218var propname, data;
2219batch.headers = {};
2220if (dwr.engine._headers) {
2221for (propname in dwr.engine._headers) {
2222data = dwr.engine._headers[propname];
2223if (typeof data != "function") batch.headers[propname] = data;
2224}
2225}
2226batch.attributes = {};
2227if (dwr.engine._attributes) {
2228for (propname in dwr.engine._attributes) {
2229data = dwr.engine._attributes[propname];
2230if (typeof data != "function") batch.attributes[propname] = data;
2231}
2232}
2233},
2234
2235
2236
2237
2238
2239addCall:function(batch, scriptName, methodName, args) {
2240
2241
2242var callData, stopAt;
2243var lastArg = args[args.length - 1];
2244if (lastArg == null || typeof lastArg == "function") {
2245callData = { callback:lastArg };
2246stopAt = args.length - 1;
2247}
2248else if (dwr.engine.util.isCallOptionArgument(lastArg)) {
2249callData = lastArg;
2250stopAt = args.length - 1;
2251}
2252else {
2253callData = {};
2254stopAt = args.length;
2255}
2256
2257
2258if (dwr.engine._singleShot) dwr.engine.batch.merge(batch, callData);
2259batch.handlers[batch.map.callCount] = {
2260callback:callData.callbackHandler || callData.callback,
2261callbackArg:callData.callbackArg || callData.arg,
2262callbackScope:callData.callbackScope || callData.scope || window,
2263exceptionHandler:callData.exceptionHandler,
2264exceptionArg:callData.exceptionArg || callData.arg,
2265exceptionScope:callData.exceptionScope || callData.scope || window,
2266errorHandler:callData.errorHandler
2267};
2268
2269
2270var prefix = "c" + batch.map.callCount + "-";
2271batch.map[prefix + "scriptName"] = scriptName;
2272batch.map[prefix + "methodName"] = methodName;
2273batch.map[prefix + "id"] = batch.map.callCount;
2274var directrefmap = {}, otherrefmap = {};
2275for (var i = 0; i < stopAt; i++) {
2276dwr.engine.serialize.convert(batch, directrefmap, otherrefmap, args[i], prefix + "param" + i, 0);
2277}
2278dwr.engine.serialize.cleanup(directrefmap);
2279},
2280
2281
2282
2283
2284
2285
2286
2287merge:function(batch, overrides) {
2288var propname, data;
2289for (var i = 0; i < dwr.engine._propnames.length; i++) {
2290propname = dwr.engine._propnames[i];
2291if (dwr.engine._singleShot && propname == "errorHandler") continue;
2292if (overrides[propname] != null) batch[propname] = overrides[propname];
2293}
2294if (overrides.preHook != null) batch.preHooks.unshift(overrides.preHook);
2295if (overrides.postHook != null) batch.postHooks.push(overrides.postHook);
2296if (overrides.headers) {
2297for (propname in overrides.headers) {
2298data = overrides.headers[propname];
2299if (typeof data != "function") batch.headers[propname] = data;
2300}
2301}
2302var attrs = null;
2303if (overrides.attributes) attrs = overrides.attributes;
2304if (attrs) {
2305for (propname in attrs) {
2306data = attrs[propname];
2307if (typeof data != "function") batch.attributes[propname] = data;
2308}
2309}
2310},
2311
2312
2313
2314
2315
2316
2317prepareToSend:function(batch) {
2318batch.map.batchId = dwr.engine._nextBatchId;
2319dwr.engine._nextBatchId++;
2320dwr.engine._batches[batch.map.batchId] = batch;
2321dwr.engine._batchesLength++;
2322batch.completed = false;
2323batch.map.instanceId = dwr.engine._instanceId;
2324
2325
2326batch.map.page = encodeURIComponent(window.location.pathname + window.location.search);
2327batch.map.scriptSessionId = dwr.engine._scriptSessionId;
2328
2329for (var i = 0; i < batch.preHooks.length; i++) {
2330batch.preHooks[i]();
2331}
2332batch.preHooks = null;
2333
2334if (batch.timeout && batch.timeout !== 0) {
2335batch.timeoutId = setTimeout(function() {
2336dwr.engine.transport.abort(batch);
2337dwr.engine._handleError(batch, { name:"dwr.engine.timeout", message:"Timeout" });
2338}, batch.timeout);
2339}
2340},
2341
2342
2343
2344
2345
2346
2347
2348constructRequest:function(batch, httpMethod) {
2349
2350var urlBuffer = [];
2351urlBuffer.push(batch.path);
2352urlBuffer.push(batch.mode);
2353if (batch.isPoll) {
2354urlBuffer.push("ReverseAjax.dwr");
2355}
2356else if (batch.map.callCount == 1) {
2357urlBuffer.push(batch.map["c0-scriptName"]);
2358urlBuffer.push(".");
2359urlBuffer.push(batch.map["c0-methodName"]);
2360urlBuffer.push(".dwr");
2361}
2362else {
2363urlBuffer.push("Multiple.");
2364urlBuffer.push(batch.map.callCount);
2365urlBuffer.push(".dwr");
2366}
2367
2368var sessionMatchExpr = new RegExp(
2369"^" +
2370"[^;\\?#]+" +
2371"(;[^\\?#]+)");
2372var sessionMatch = location.href.match(sessionMatchExpr);
2373if (sessionMatch != null) {
2374urlBuffer.push(sessionMatch[1]);
2375}
2376
2377
2378if (batch.attributes) {
2379for (var attrname in batch.attributes) {
2380var data = batch.attributes[attrname];
2381if (typeof data != "function") batch.map["a-" + attrname] = "" + data;
2382}
2383}
2384
2385var request = {};
2386var prop;
2387if (httpMethod == "GET") {
2388
2389
2390batch.map.callCount = "" + batch.map.callCount;
2391urlBuffer.push("?");
2392for (prop in batch.map) {
2393if (typeof batch.map[prop] != "function") {
2394urlBuffer.push(encodeURIComponent(prop));
2395urlBuffer.push("=");
2396urlBuffer.push(encodeURIComponent(batch.map[prop]));
2397urlBuffer.push("&");
2398}
2399}
2400urlBuffer.pop();
2401request.body = null;
2402}
2403else {
2404
2405request.body = "";
2406if (dwr.engine.util.ieCondition("if lte IE 7")) {
2407
2408var buf = [];
2409for (prop in batch.map) {
2410if (typeof batch.map[prop] != "function") {
2411buf.push(prop + "=" + batch.map[prop] + dwr.engine._postSeperator);
2412}
2413}
2414request.body = buf.join("");
2415}
2416else {
2417
2418for (prop in batch.map) {
2419if (typeof batch.map[prop] != "function") {
2420request.body += prop + "=" + batch.map[prop] + dwr.engine._postSeperator;
2421}
2422}
2423}
2424request.body = dwr.engine._contentRewriteHandler(request.body);
2425}
2426request.url = dwr.engine._urlRewriteHandler(urlBuffer.join(""));
2427return request;
2428},
2429
2430
2431
2432
2433
2434
2435
2436validate:function(batch) {
2437if (!batch.completed) {
2438var repliesReceived = 0;
2439for (var i = 0; i < batch.map.callCount; i++) {
2440if (batch.handlers[i].completed === true) {
2441repliesReceived++;
2442}
2443}
2444if (repliesReceived == 0 && dwr.engine._queuedBatchException) {
2445dwr.engine._handleError(batch, dwr.engine._queuedBatchException);
2446dwr.engine._queuedBatchException = null;
2447} else if (repliesReceived < batch.map.callCount) {
2448dwr.engine._handleError(batch, { name:"dwr.engine.incompleteReply", message:"Incomplete reply from server" });
2449}
2450}
2451},
2452
2453
2454
2455
2456
2457
2458remove:function(batch) {
2459if (!batch) {
2460dwr.engine._debug("Warning: null batch in dwr.engine.batch.remove()", true);
2461return;
2462}
2463
2464if (batch.completed) {
2465return;
2466}
2467batch.completed = true;
2468
2469
2470dwr.engine.transport.remove(batch);
2471
2472
2473if (batch.timeoutId != null) {
2474clearTimeout(batch.timeoutId);
2475delete batch.timeoutId;
2476}
2477
2478
2479if (batch.map && (batch.map.batchId != null)) {
2480delete dwr.engine._batches[batch.map.batchId];
2481dwr.engine._batchesLength--;
2482}
2483if (batch == dwr.engine._batch) dwr.engine._batch = null;
2484if (batch == dwr.engine._pollBatch) dwr.engine._pollBatch = null;
2485
2486
2487
2488
2489if (dwr.engine._batchQueue.length !== 0) {
2490var sendbatch = dwr.engine._batchQueue.shift();
2491dwr.engine.transport.send(sendbatch);
2492}
2493}
2494};
2495
2496
2497
2498
2499
2500dwr.engine.util = {
2501
2502
2503
2504
2505newActiveXObject:function(axarray) {
2506var returnValue;
2507for (var i = 0; i < axarray.length; i++) {
2508try {
2509returnValue = new ActiveXObject(axarray[i]);
2510break;
2511}
2512catch (ex) {   }
2513}
2514return returnValue;
2515},
2516
2517ieCondition:function(cond) {
2518if (!(cond in dwr.engine._ieConditions)) {
2519var div = document.createElement("div");
2520div.innerHTML = "<!--[" + cond + "]><p><![endif]-->";
2521dwr.engine._ieConditions[cond] = !!(div.getElementsByTagName("p").length);
2522}
2523return dwr.engine._ieConditions[cond];
2524},
2525
2526
2527
2528
2529tokenify: function(number) {
2530var tokenbuf = [];
2531var charmap = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ*$";
2532var remainder = number;
2533while (remainder > 0)
2534{
2535tokenbuf.push(charmap.charAt(remainder & 0x3F));
2536remainder = Math.floor(remainder / 64);
2537}
2538return tokenbuf.join("");
2539},
2540
2541addEventListener: function(elem, name, func) {
2542if (elem.addEventListener)
2543elem.addEventListener(name, func, false);
2544else
2545elem.attachEvent("on" + name, func);
2546},
2547
2548isCallOptionArgument: function(lastArg) {
2549return (typeof lastArg === "object" && (typeof lastArg.callback === "function" ||
2550typeof lastArg.exceptionHandler === "function" || typeof lastArg.callbackHandler === "function" ||
2551typeof lastArg.errorHandler === "function" || typeof lastArg.warningHandler === "function" || lastArg.hasOwnProperty("async")));
2552},
2553
2554logHandlerEx: function(func) {
2555try {
2556func();
2557} catch(ex) {
2558dwr.engine._debug("Exception occured in user-specified handler:");
2559dwr.engine._debug(ex);
2560}
2561}
2562};
2563
2564
2565dwr.engine._initializer.init();
2566
2567
2568
2569
2570dwr.hub = {
2571
2572
2573
2574
2575
2576publish:function(topicName, data) {
2577dwr.engine._execute(null, '__System', 'publish', topicName, data, {});
2578},
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588subscribe:function(topicName, callback, scope, subscriberData) {
2589var subscription = "" + dwr.hub._subscriptionId;
2590dwr.hub._subscriptionId++;
2591dwr.hub._subscriptions[subscription] = {
2592callback:callback,
2593scope:scope,
2594subscriberData:subscriberData
2595};
2596dwr.engine._execute(null, '__System', 'subscribe', topicName, subscription, {});
2597return subscription;
2598},
2599
2600
2601
2602
2603
2604
2605
2606_remotePublish:function(subscriptionId, publishData) {
2607var subscriptionData = dwr.hub._subscriptions[subscriptionId];
2608if (!subscriptionData) return;
2609subscriptionData.callback.call(subscriptionData.scope, publishData, subscriptionData.subscriberData);
2610},
2611
2612
2613
2614
2615_subscriptionId:0,
2616
2617
2618
2619
2620_subscriptions:{}
2621};
2622
2623
2624
2625
2626
2627dwr.data = {
2628
2629
2630
2631
2632
2633StoreChangeListener:{
2634
2635
2636
2637
2638
2639itemRemoved:function(source, itemId) { },
2640
2641
2642
2643
2644
2645
2646itemAdded:function(source, item) { },
2647
2648
2649
2650
2651
2652
2653
2654
2655itemChanged:function(source, item, changedAttributes) { }
2656},
2657
2658
2659
2660
2661
2662
2663
2664
2665Cache:function(storeId, listener) {
2666this.storeId = storeId;
2667this.listener = listener;
2668}
2669};
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682dwr.data.Cache.prototype.viewRegion = function(region, callbackObj) {
2683if (!region) region = { };
2684if (!region.start) region.start = 0;
2685if (!region.count) region.count = -1;
2686if (!region.sort) region.sort = [];
2687else {
2688for (var index = 0; index < region.sort.length; index++) {
2689if (typeof region.sort[index].descending == "undefined") {
2690region.sort[index].descending = false;
2691}
2692}
2693}
2694if (!region.query) region.query = {};
2695
2696return dwr.engine._execute(null, '__Data', 'viewRegion', [ this.storeId, region, this.listener, callbackObj ]);
2697};
2698
2699
2700
2701
2702
2703
2704dwr.data.Cache.prototype.viewItem = function(itemId, callbackObj) {
2705return dwr.engine._execute(null, '__Data', 'viewItem', [ this.storeId, itemId, this.listener, callbackObj ]);
2706};
2707
2708
2709
2710
2711
2712dwr.data.Cache.prototype.unsubscribe = function(callbackObj) {
2713if (this.listener) {
2714return dwr.engine._execute(null, '__Data', 'unsubscribe', [ this.storeId, this.listener, callbackObj ]);
2715}
2716};
2717
2718
2719
2720
2721
2722
2723dwr.data.Cache.prototype.update = function(items, callbackObj) {
2724return dwr.engine._execute(null, '__Data', 'update', [ this.storeId, items, callbackObj ]);
2725};
2726
2727})();
2728

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.