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.