PageSourceSearch

https://mockflow.com/js/external/engine.js

js mockflow.com collected 2026-10-01 08:50:36 UTC 53,922 bytes, 2,757 lines download raw bytes

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

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.