1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20if (window['dojo']) dojo.provide('dwr.util'); 21if (typeof window['dwr'] == 'undefined') window.dwr = {}; 22if (typeof dwr['util'] == 'undefined') dwr.util = {}; 23 24 25 26dwr.util._escapeHtml = true; 27 28 29 30 31dwr.util.setEscapeHtml = function(escapeHtml) { 32dwr.util._escapeHtml = escapeHtml; 33}; 34 35 36dwr.util._shouldEscapeHtml = function(options) { 37if (options && options.escapeHtml != null) { 38return options.escapeHtml; 39} 40return dwr.util._escapeHtml; 41}; 42 43 44 45 46 47dwr.util.escapeHtml = function(original) { 48return original.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,'''); 49}; 50 51 52 53 54 55dwr.util.unescapeHtml = function(original) { 56return original.replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,"'").replace(/&/g,'&'); 57}; 58 59 60 61 62 63dwr.util.replaceXmlCharacters = function(original) { 64original = original.replace("&", "+"); 65original = original.replace("<", "\u2039"); 66original = original.replace(">", "\u203A"); 67original = original.replace("\'", "\u2018"); 68original = original.replace("\"", "\u201C"); 69return original; 70}; 71 72 73 74 75 76dwr.util.containsXssRiskyCharacters = function(original) { 77return (original.indexOf('&') != -1 78|| original.indexOf('<') != -1 79|| original.indexOf('>') != -1 80|| original.indexOf('\'') != -1 81|| original.indexOf('\"') != -1); 82}; 83 84 85 86 87 88dwr.util.onReturn = function(event, action) { 89if (!event) event = window.event; 90if (event && event.keyCode && event.keyCode == 13) action(); 91}; 92 93 94 95 96 97dwr.util.selectRange = function(ele, start, end) { 98ele = dwr.util._getElementById(ele, "selectRange()"); 99if (ele == null) return; 100if (ele.setSelectionRange) { 101ele.setSelectionRange(start, end); 102} 103else if (ele.createTextRange) { 104var range = ele.createTextRange(); 105range.moveStart("character", start); 106range.moveEnd("character", end - ele.value.length); 107range.select(); 108} 109ele.focus(); 110}; 111 112 113 114 115 116dwr.util.byId = function() { 117var elems = []; 118for (var i = 0; i < arguments.length; i++) { 119var idOrElem = arguments[i]; 120var elem; 121if (typeof idOrElem == 'string') { 122var elem = document.getElementById(idOrElem); 123 124 125if (document.all && elem && elem.attributes.id.value != idOrElem) { 126elem = null; 127var maybeElems = document.all[idOrElem]; 128if (maybeElems.tagName) maybeElems = [maybeElems]; 129for (var j = 0; j < maybeElems.length; j++) { 130if (maybeElems[j].attributes.id.value == idOrElem) { 131elem = maybeElems[j]; 132break; 133} 134} 135} 136} 137else { 138elem = idOrElem; 139} 140if (arguments.length == 1) { 141return elem; 142} 143elems.push(elem); 144} 145return elems; 146} 147 148 149 150 151 152if (window['$'] == null) { 153window['$'] = dwr.util.byId; 154} 155 156 157 158 159 160dwr.util.toDescriptiveString = function(data, showLevels, options) { 161if (showLevels === undefined) showLevels = 1; 162var opt = {}; 163if (dwr.util._isObject(options)) opt = options; 164var defaultoptions = { 165escapeHtml:false, 166baseIndent: "", 167childIndent: "\u00A0\u00A0", 168lineTerminator: "\n", 169oneLineMaxItems: 5, 170shortStringMaxLength: 13, 171propertyNameMaxLength: 30 172}; 173for (var p in defaultoptions) { 174if (!(p in opt)) { 175opt[p] = defaultoptions[p]; 176} 177} 178 179var skipDomProperties = { 180document:true, ownerDocument:true, 181all:true, 182parentElement:true, parentNode:true, offsetParent:true, 183children:true, firstChild:true, lastChild:true, 184previousSibling:true, nextSibling:true, 185innerHTML:true, outerHTML:true, 186innerText:true, outerText:true, textContent:true, 187attributes:true, 188style:true, currentStyle:true, runtimeStyle:true, 189parentTextEdit:true 190}; 191 192function recursive(data, showLevels, indentDepth, options) { 193var reply = ""; 194try { 195 196if (dwr.util._isString(data)) { 197var str = data; 198if (showLevels == 0 && str.length > options.shortStringMaxLength) 199str = str.substring(0, options.shortStringMaxLength-3) + "..."; 200if (options.escapeHtml) { 201 202 203var lines = str.split("\n"); 204for (var i = 0; i < lines.length; i++) lines[i] = dwr.util.escapeHtml(lines[i]); 205str = lines.join("\n"); 206} 207if (showLevels == 0) { 208str = str.replace(/\n|\r|\t/g, function(ch) { 209switch (ch) { 210case "\n": return "\\n"; 211case "\r": return ""; 212case "\t": return "\\t"; 213} 214}); 215} 216else { 217str = str.replace(/\n|\r|\t/g, function(ch) { 218switch (ch) { 219case "\n": return options.lineTerminator + indent(indentDepth+1, options); 220case "\r": return ""; 221case "\t": return "\\t"; 222} 223}); 224} 225reply = '"' + str + '"'; 226} 227 228 229else if (dwr.util._isFunction(data)) { 230reply = "function"; 231} 232 233 234else if (dwr.util._isArrayLike(data)) { 235if (showLevels == 0) { 236if (data.length > 0) 237reply = "[...]"; 238else 239reply = "[]"; 240} 241else { 242var strarr = []; 243strarr.push("["); 244var count = 0; 245for (var i = 0; i < data.length; i++) { 246if (!(i in data) && data != "[object NodeList]") continue; 247var itemvalue = data[i]; 248if (count > 0) strarr.push(", "); 249if (showLevels == 1) { 250if (count == options.oneLineMaxItems) { 251strarr.push("..."); 252break; 253} 254} 255else { 256strarr.push(options.lineTerminator + indent(indentDepth+1, options)); 257} 258if (i != count) { 259strarr.push(i); 260strarr.push(":"); 261} 262strarr.push(recursive(itemvalue, showLevels-1, indentDepth+1, options)); 263count++; 264} 265if (showLevels > 1) strarr.push(options.lineTerminator + indent(indentDepth, options)); 266strarr.push("]"); 267reply = strarr.join(""); 268} 269} 270 271 272else if (dwr.util._isObject(data) && !dwr.util._isDate(data)) { 273if (showLevels == 0) { 274reply = dwr.util._detailedTypeOf(data); 275} 276else { 277var strarr = []; 278if (dwr.util._detailedTypeOf(data) != "Object") { 279strarr.push(dwr.util._detailedTypeOf(data)); 280if (typeof data.valueOf() != "object") { 281strarr.push(":"); 282strarr.push(recursive(data.valueOf(), 1, indentDepth, options)); 283} 284strarr.push(" "); 285} 286strarr.push("{"); 287var isDomObject = dwr.util._isHTMLElement(data); 288var count = 0; 289for (var prop in data) { 290var propvalue = data[prop]; 291if (isDomObject) { 292if (!propvalue) continue; 293if (typeof propvalue == "function") continue; 294if (skipDomProperties[prop]) continue; 295if (prop.toUpperCase() == prop) continue; 296} 297if (count > 0) strarr.push(", "); 298if (showLevels == 1) { 299if (count == options.oneLineMaxItems) { 300strarr.push("..."); 301break; 302} 303} 304else { 305strarr.push(options.lineTerminator + indent(indentDepth+1, options)); 306} 307strarr.push(prop.length > options.propertyNameMaxLength ? prop.substring(0, options.propertyNameMaxLength-3) + "..." : prop); 308strarr.push(":"); 309strarr.push(recursive(propvalue, showLevels-1, indentDepth+1, options)); 310count++; 311} 312if (showLevels > 1 && count > 0) strarr.push(options.lineTerminator + indent(indentDepth, options)); 313strarr.push("}"); 314reply = strarr.join(""); 315} 316} 317 318 319else { 320reply = "" + data; 321} 322 323return reply; 324} 325catch(err) { 326return (err.message ? err.message : ""+err); 327} 328} 329 330function indent(count, options) { 331var strarr = []; 332strarr.push(options.baseIndent); 333for (var i=0; i<count; i++) { 334strarr.push(options.childIndent); 335} 336return strarr.join(""); 337}; 338 339return recursive(data, showLevels, 0, opt); 340}; 341 342 343 344 345 346dwr.util.useLoadingMessage = function(message) { 347var loadingMessage; 348if (message) loadingMessage = message; 349else loadingMessage = "Loading"; 350dwr.engine.setPreHook(function() { 351var disabledZone = dwr.util.byId('disabledZone'); 352if (!disabledZone) { 353disabledZone = document.createElement('div'); 354disabledZone.setAttribute('id', 'disabledZone'); 355disabledZone.style.position = "absolute"; 356disabledZone.style.zIndex = "1000";
357disabledZone.style.left = "0px"; 358disabledZone.style.top = "0px"; 359disabledZone.style.width = "100%"; 360disabledZone.style.height = "100%"; 361 362if (window.ActiveXObject) { 363disabledZone.style.background = "white"; 364disabledZone.style.filter = "alpha(opacity=0)"; 365} 366document.body.appendChild(disabledZone); 367var messageZone = document.createElement('div'); 368messageZone.setAttribute('id', 'messageZone'); 369messageZone.style.position = "absolute"; 370messageZone.style.top = "0px"; 371messageZone.style.right = "0px"; 372messageZone.style.background = "red"; 373messageZone.style.color = "white"; 374messageZone.style.fontFamily = "Arial,Helvetica,sans-serif"; 375messageZone.style.padding = "4px"; 376document.body.appendChild(messageZone); 377var text = document.createTextNode(loadingMessage); 378messageZone.appendChild(text); 379dwr.util._disabledZoneUseCount = 1; 380} 381else { 382dwr.util.byId('messageZone').innerHTML = loadingMessage; 383disabledZone.style.visibility = 'visible'; 384dwr.util._disabledZoneUseCount++; 385dwr.util.byId('messageZone').style.visibility = 'visible'; 386} 387}); 388dwr.engine.setPostHook(function() { 389dwr.util._disabledZoneUseCount--; 390if (dwr.util._disabledZoneUseCount == 0) { 391dwr.util.byId('disabledZone').style.visibility = 'hidden'; 392dwr.util.byId('messageZone').style.visibility = 'hidden'; 393} 394}); 395}; 396 397 398 399 400dwr.util.setHighlightHandler = function(handler) { 401dwr.util._highlightHandler = handler; 402}; 403 404 405 406 407dwr.util.yellowFadeHighlightHandler = function(ele) { 408dwr.util._yellowFadeProcess(ele, 0); 409}; 410dwr.util._yellowFadeSteps = [ "d0", "b0", "a0", "90", "98", "a0", "a8", "b0", "b8", "c0", "c8", "d0", "d8", "e0", "e8", "f0", "f8" ]; 411dwr.util._yellowFadeProcess = function(ele, colorIndex) { 412ele = dwr.util.byId(ele); 413if (colorIndex < dwr.util._yellowFadeSteps.length) { 414ele.style.backgroundColor = "#ffff" + dwr.util._yellowFadeSteps[colorIndex]; 415setTimeout("dwr.util._yellowFadeProcess('" + ele.id + "'," + (colorIndex + 1) + ")", 200); 416} 417else { 418ele.style.backgroundColor = "transparent"; 419} 420}; 421 422 423 424 425dwr.util.borderFadeHighlightHandler = function(ele) { 426ele.style.borderWidth = "2px"; 427ele.style.borderStyle = "solid"; 428dwr.util._borderFadeProcess(ele, 0); 429}; 430dwr.util._borderFadeSteps = [ "d0", "b0", "a0", "90", "98", "a0", "a8", "b0", "b8", "c0", "c8", "d0", "d8", "e0", "e8", "f0", "f8" ]; 431dwr.util._borderFadeProcess = function(ele, colorIndex) { 432ele = dwr.util.byId(ele); 433if (colorIndex < dwr.util._borderFadeSteps.length) { 434ele.style.borderColor = "#ff" + dwr.util._borderFadeSteps[colorIndex] + dwr.util._borderFadeSteps[colorIndex]; 435setTimeout("dwr.util._borderFadeProcess('" + ele.id + "'," + (colorIndex + 1) + ")", 200); 436} 437else { 438ele.style.backgroundColor = "transparent"; 439} 440}; 441 442 443 444 445dwr.util.focusHighlightHandler = function(ele) { 446try { 447ele.focus(); 448} 449catch (ex) { } 450}; 451 452 453dwr.util._highlightHandler = null; 454 455 456 457 458dwr.util.highlight = function(ele, options) { 459if (options && options.highlightHandler) { 460options.highlightHandler(dwr.util.byId(ele)); 461} 462else if (dwr.util._highlightHandler != null) { 463dwr.util._highlightHandler(dwr.util.byId(ele)); 464} 465}; 466 467 468 469 470 471dwr.util.setValue = function(ele, val, options) { 472if (val == null) val = ""; 473if (options == null) options = {}; 474 475var orig = ele; 476ele = dwr.util.byId(ele); 477var nodes = null; 478if (ele == null) { 479 480nodes = document.getElementsByName(orig); 481if (nodes.length >= 1) ele = nodes.item(0); 482} 483 484if (ele == null) { 485dwr.util._debug("setValue() can't find an element with id/name: " + orig + "."); 486return; 487} 488 489 490dwr.util.highlight(ele, options); 491 492if (dwr.util._isHTMLElement(ele, "select")) { 493if (ele.type == "select-multiple" && dwr.util._isArray(val)) dwr.util._selectListItems(ele, val); 494else dwr.util._selectListItem(ele, val); 495return; 496} 497 498if (dwr.util._isHTMLElement(ele, "input")) { 499if (ele.type == "radio" || ele.type == "checkbox") { 500if (nodes && nodes.length >= 1) { 501for (var i = 0; i < nodes.length; i++) { 502var node = nodes.item(i); 503if (node.type != ele.type) continue; 504if (dwr.util._isArray(val)) { 505node.checked = false; 506for (var j = 0; j < val.length; j++) 507if (val[j] == node.value) node.checked = true; 508} 509else { 510node.checked = (node.value == val); 511} 512} 513} 514else { 515ele.checked = (val == true); 516} 517} 518else ele.value = val; 519 520return; 521} 522 523if (dwr.util._isHTMLElement(ele, "textarea")) { 524ele.value = val; 525return; 526} 527 528if (dwr.util._isHTMLElement(ele, "img")) { 529ele.src = val; 530return; 531} 532 533 534 535if (val.nodeType) { 536if (val.nodeType == 9 ) val = val.documentElement; 537val = dwr.util._importNode(ele.ownerDocument, val, true); 538ele.appendChild(val); 539return; 540} 541 542 543if (dwr.util._shouldEscapeHtml(options)) { 544if ("textContent" in ele) ele.textContent = val.toString(); 545else if ("innerText" in ele) ele.innerText = val.toString(); 546else ele.innerHTML = dwr.util.escapeHtml(val.toString()); 547} 548else { 549ele.innerHTML = val; 550} 551}; 552 553 554 555 556 557 558dwr.util._selectListItems = function(ele, val) { 559 560 561var found = 0; 562var i; 563var j; 564for (i = 0; i < ele.options.length; i++) { 565ele.options[i].selected = false;
566for (j = 0; j < val.length; j++) { 567if (ele.options[i].value == val[j]) { 568ele.options[i].selected = true; 569found++; 570} 571} 572} 573 574if (found == val.length) return; 575 576for (i = 0; i < ele.options.length; i++) { 577for (j = 0; j < val.length; j++) { 578if (ele.options[i].text == val[j]) { 579ele.options[i].selected = true; 580} 581} 582} 583}; 584 585 586 587 588 589 590dwr.util._selectListItem = function(ele, val) { 591 592 593var found = false; 594var i; 595for (i = 0; i < ele.options.length; i++) { 596if (ele.options[i].value == val) { 597ele.options[i].selected = true; 598found = true; 599} 600else { 601ele.options[i].selected = false; 602} 603} 604 605 606if (found) return; 607 608for (i = 0; i < ele.options.length; i++) { 609ele.options[i].selected = (ele.options[i].text == val); 610} 611}; 612 613 614 615 616 617dwr.util.getValue = function(ele, options) { 618if (options == null) options = {}; 619var orig = ele; 620ele = dwr.util.byId(ele); 621var nodes = null; 622if (ele == null) { 623 624nodes = document.getElementsByName(orig); 625if (nodes.length >= 1) ele = nodes.item(0); 626} 627if (ele == null) { 628dwr.util._debug("getValue() can't find an element with id/name: " + orig + "."); 629return ""; 630} 631 632if (dwr.util._isHTMLElement(ele, "select")) { 633 634 635if (ele.type == "select-multiple") { 636var reply = new Array(); 637for (var i = 0; i < ele.options.length; i++) { 638var item = ele.options[i]; 639if (item.selected) { 640var valueAttr = item.getAttributeNode("value"); 641if (valueAttr && valueAttr.specified) { 642reply.push(item.value); 643} 644else { 645reply.push(item.text); 646} 647} 648} 649return reply; 650} 651else { 652var sel = ele.selectedIndex; 653if (sel != -1) { 654var item = ele.options[sel]; 655var valueAttr = item.getAttributeNode("value"); 656if (valueAttr && valueAttr.specified) { 657return item.value; 658} 659return item.text; 660} 661else { 662return ""; 663} 664} 665} 666 667if (dwr.util._isHTMLElement(ele, "input")) { 668if (ele.type == "radio") { 669if (nodes && nodes.length >= 1) { 670for (var i = 0; i < nodes.length; i++) { 671var node = nodes.item(i); 672if (node.type == ele.type) { 673if (node.checked) return node.value; 674} 675} 676} 677return ele.checked; 678} 679if (ele.type == "checkbox") { 680if (nodes && nodes.length >= 1) { 681var reply = []; 682for (var i = 0; i < nodes.length; i++) { 683var node = nodes.item(i); 684if (node.type == ele.type) { 685if (node.checked) reply.push(node.value); 686} 687} 688return reply; 689} 690return ele.checked; 691} 692if (ele.type == "file") { 693return ele; 694} 695return ele.value; 696} 697 698if (dwr.util._isHTMLElement(ele, "textarea")) { 699return ele.value; 700} 701 702if (dwr.util._shouldEscapeHtml(options)) { 703if (ele.textContent) return ele.textContent; 704else if (ele.innerText) return ele.innerText; 705} 706return ele.innerHTML; 707}; 708 709 710 711 712 713dwr.util.getText = function(ele) { 714ele = dwr.util._getElementById(ele, "getText()"); 715if (ele == null) return null; 716if (!dwr.util._isHTMLElement(ele, "select")) { 717dwr.util._debug("getText() can only be used with select elements. Attempt to use: " + dwr.util._detailedTypeOf(ele) + " from id: " + orig + "."); 718return ""; 719} 720 721 722 723var sel = ele.selectedIndex; 724if (sel != -1) { 725return ele.options[sel].text; 726} 727else { 728return ""; 729} 730}; 731 732 733 734 735 736 737 738dwr.util.setValues = function(data, options) { 739var prefix = ""; 740var depth = 100; 741if (options && options.prefix) prefix = options.prefix; 742if (options && options.idPrefix) prefix = options.idPrefix; 743if (options && "depth" in options) depth = options.depth; 744dwr.util._setValuesRecursive(data, prefix, depth, options); 745}; 746 747 748 749 750dwr.util._setValuesRecursive = function(data, idpath, depth, options) { 751if (depth == 0) return; 752 753 754if (dwr.util._isArray(data) && data.length > 0 && dwr.util._isObject(data[0])) { 755for (var i = 0; i < data.length; i++) { 756dwr.util._setValuesRecursive(data[i], idpath+"["+i+"]", depth-1, options); 757} 758} 759 760else if (dwr.util._isObject(data) && !dwr.util._isArray(data)) { 761for (var prop in data) { 762var subidpath = idpath ? idpath+"."+prop : prop; 763 764if (dwr.util._isObject(data[prop]) && !dwr.util._isArray(data[prop]) && !dwr.util._isDate(data[prop]) 765|| dwr.util._isArray(data[prop]) && data[prop].length > 0 && dwr.util._isObject(data[prop][0])) { 766dwr.util._setValuesRecursive(data[prop], subidpath, depth-1, options); 767} 768 769else if (typeof data[prop] == "function") { 770 771} 772 773 774else { 775 776if (dwr.util.byId(subidpath) != null || document.getElementsByName(subidpath).length >= 1) { 777dwr.util.setValue(subidpath, data[prop], options); 778} 779} 780} 781} 782}; 783 784 785 786 787 788 789 790 791 792dwr.util.getValues = function(data, options) { 793if (typeof data == "string" || dwr.util._isHTMLElement(data)) { 794return dwr.util.getFormValues(data); 795} 796else { 797var prefix = ""; 798var depth = 100; 799if (options != null && options.prefix) prefix = options.prefix; 800if (options != null && options.idPrefix) prefix = options.idPrefix; 801if (options != null && "depth" in options) depth = options.depth; 802dwr.util._getValuesRecursive(data, prefix, depth, options); 803return data; 804} 805}; 806 807 808 809 810 811 812dwr.util.getFormValues = function(eleOrNameOrId) { 813var ele = null; 814if (typeof eleOrNameOrId == "string") { 815ele = document.forms[eleOrNameOrId]; 816if (ele == null) ele = dwr.util.byId(eleOrNameOrId); 817} 818else if (dwr.util._isHTMLElement(eleOrNameOrId)) { 819ele = eleOrNameOrId; 820} 821if (ele != null) { 822if (ele.elements == null) { 823alert("getFormValues() requires an object or reference to a form element."); 824return null; 825} 826var reply = {}; 827var name; 828var value; 829for (var i = 0; i < ele.elements.length; i++) { 830if (ele[i].type in {button:0,submit:0,reset:0,image:0,file:0}) continue; 831if (ele[i].name) { 832name = ele[i].name; 833value = dwr.util.getValue(name); 834} 835else { 836if (ele[i].id) name = ele[i].id; 837else name = "element" + i; 838value = dwr.util.getValue(ele[i]); 839} 840reply[name] = value; 841} 842return reply; 843} 844}; 845 846 847 848 849dwr.util._getValuesRecursive = function(data, idpath, depth, options) { 850if (depth == 0) return; 851 852 853if (dwr.util._isArray(data) && data.length > 0 && dwr.util._isObject(data[0])) { 854for (var i = 0; i < data.length; i++) { 855dwr.util._getValuesRecursive(data[i], idpath+"["+i+"]", depth-1, options); 856} 857} 858 859else if (dwr.util._isObject(data) && !dwr.util._isArray(data)) { 860for (var prop in data) { 861var subidpath = idpath ? idpath+"."+prop : prop; 862 863if (dwr.util._isObject(data[prop]) && !dwr.util._isArray(data[prop]) 864|| dwr.util._isArray(data[prop]) && data[prop].length > 0 && dwr.util._isObject(data[prop][0])) { 865dwr.util._getValuesRecursive(data[prop], subidpath, depth-1, options); 866} 867 868else if (typeof data[prop] == "function") { 869 870} 871 872 873else { 874 875if (dwr.util.byId(subidpath) != null || document.getElementsByName(subidpath).length >= 1) { 876data[prop] = dwr.util.getValue(subidpath); 877} 878} 879} 880} 881}; 882 883 884 885 886 887dwr.util.addOptions = function(ele, data ) { 888ele = dwr.util._getElementById(ele, "addOptions()"); 889if (ele == null) return; 890var useOptions = dwr.util._isHTMLElement(ele, "select"); 891var useLi = dwr.util._isHTMLElement(ele, ["ul", "ol"]); 892if (!useOptions && !useLi) { 893dwr.util._debug("addOptions() can only be used with select/ul/ol elements. Attempt to use: " + dwr.util._detailedTypeOf(ele)); 894return; 895} 896if (data == null) return; 897 898var argcount = arguments.length; 899var options = {}; 900var lastarg = arguments[argcount - 1]; 901if (argcount > 2 && dwr.util._isObject(lastarg)) { 902options = lastarg; 903argcount--; 904} 905var arg3 = null; if (argcount >= 3) arg3 = arguments[2]; 906var arg4 = null; if (argcount >= 4) arg4 = arguments[3]; 907if (!options.optionCreator && useOptions) options.optionCreator = dwr.util._defaultOptionCreator; 908if (!options.optionCreator && useLi) options.optionCreator = dwr.util._defaultListItemCreator; 909options.document = ele.ownerDocument; 910 911var text, value, li; 912if (dwr.util._isArray(data)) { 913 914for (var i = 0; i < data.length; i++) { 915options.data = data[i]; 916options.text = null; 917options.value = null; 918if (useOptions) { 919if (arg3 != null) { 920if (arg4 != null) { 921options.text = dwr.util._getValueFrom(data[i], arg4); 922options.value = dwr.util._getValueFrom(data[i], arg3); 923} 924else options.text = options.value = dwr.util._getValueFrom(data[i], arg3); 925} 926else options.text = options.value = dwr.util._getValueFrom(data[i]); 927 928if (options.text != null || options.value) { 929var opt = options.optionCreator(options); 930opt.text = options.text; 931opt.value = options.value;
932ele.options[ele.options.length] = opt; 933} 934} 935else { 936options.value = dwr.util._getValueFrom(data[i], arg3); 937if (options.value != null) { 938li = options.optionCreator(options); 939if (dwr.util._shouldEscapeHtml(options)) { 940options.value = dwr.util.escapeHtml(options.value); 941} 942li.innerHTML = options.value; 943ele.appendChild(li); 944} 945} 946} 947} 948else if (arg4 != null) { 949if (!useOptions) { 950alert("dwr.util.addOptions can only create select lists from objects."); 951return; 952} 953for (var prop in data) { 954options.data = data[prop]; 955options.value = dwr.util._getValueFrom(data[prop], arg3); 956options.text = dwr.util._getValueFrom(data[prop], arg4); 957 958if (options.text != null || options.value) { 959var opt = options.optionCreator(options); 960opt.text = options.text; 961opt.value = options.value; 962ele.options[ele.options.length] = opt; 963} 964} 965} 966else { 967if (!useOptions) { 968dwr.util._debug("dwr.util.addOptions can only create select lists from objects."); 969return; 970} 971for (var prop in data) { 972if (typeof data[prop] == "function") continue; 973options.data = data[prop]; 974if (!arg3) { 975options.value = prop; 976options.text = data[prop]; 977} 978else { 979options.value = data[prop]; 980options.text = prop; 981} 982if (options.text != null || options.value) { 983var opt = options.optionCreator(options); 984opt.text = options.text; 985opt.value = options.value; 986ele.options[ele.options.length] = opt; 987} 988} 989} 990 991 992dwr.util.highlight(ele, options); 993}; 994 995 996 997 998dwr.util._getValueFrom = function(data, method) { 999if (method == null) return data; 1000else if (typeof method == 'function') return method(data); 1001else return data[method]; 1002}; 1003 1004 1005 1006 1007dwr.util._defaultOptionCreator = function(options) { 1008return options.document.createElement("option"); 1009}; 1010 1011 1012 1013 1014dwr.util._defaultListItemCreator = function(options) { 1015return options.document.createElement("li"); 1016}; 1017 1018 1019 1020 1021 1022dwr.util.removeAllOptions = function(ele) { 1023ele = dwr.util._getElementById(ele, "removeAllOptions()"); 1024if (ele == null) return; 1025var useOptions = dwr.util._isHTMLElement(ele, "select"); 1026var useLi = dwr.util._isHTMLElement(ele, ["ul", "ol"]); 1027if (!useOptions && !useLi) { 1028dwr.util._debug("removeAllOptions() can only be used with select, ol and ul elements. Attempt to use: " + dwr.util._detailedTypeOf(ele)); 1029return; 1030} 1031if (useOptions) { 1032ele.options.length = 0; 1033} 1034else { 1035while (ele.childNodes.length > 0) { 1036ele.removeChild(ele.firstChild); 1037} 1038} 1039}; 1040 1041 1042 1043 1044 1045dwr.util.addRows = function(ele, data, cellFuncs, options) { 1046ele = dwr.util._getElementById(ele, "addRows()"); 1047if (ele == null) return; 1048if (!dwr.util._isHTMLElement(ele, ["table", "tbody", "thead", "tfoot"])) { 1049dwr.util._debug("addRows() can only be used with table, tbody, thead and tfoot elements. Attempt to use: " + dwr.util._detailedTypeOf(ele)); 1050return; 1051} 1052if (!options) options = {}; 1053if (!options.rowCreator) options.rowCreator = dwr.util._defaultRowCreator; 1054if (!options.cellCreator) options.cellCreator = dwr.util._defaultCellCreator; 1055options.document = ele.ownerDocument; 1056var tr, rowNum; 1057if (dwr.util._isArray(data)) { 1058for (rowNum = 0; rowNum < data.length; rowNum++) { 1059options.rowData = data[rowNum]; 1060options.rowIndex = rowNum; 1061options.rowNum = rowNum; 1062options.data = null; 1063options.cellNum = -1; 1064tr = dwr.util._addRowInner(cellFuncs, options); 1065if (tr != null) ele.appendChild(tr); 1066} 1067} 1068else if (typeof data == "object") { 1069rowNum = 0; 1070for (var rowIndex in data) { 1071options.rowData = data[rowIndex]; 1072options.rowIndex = rowIndex; 1073options.rowNum = rowNum; 1074options.data = null; 1075options.cellNum = -1; 1076tr = dwr.util._addRowInner(cellFuncs, options); 1077if (tr != null) ele.appendChild(tr); 1078rowNum++; 1079} 1080} 1081 1082dwr.util.highlight(ele, options); 1083}; 1084 1085 1086 1087 1088dwr.util._emptyTableCellReplacement = "<div style='width:0;height:0;overflow:hidden;'></div>"; 1089 1090 1091 1092 1093dwr.util._addRowInner = function(cellFuncs, options) { 1094var tr = options.rowCreator(options); 1095if (tr == null) return null; 1096for (var cellNum = 0; cellNum < cellFuncs.length; cellNum++) { 1097var func = cellFuncs[cellNum]; 1098if (typeof func == 'function') options.data = func(options.rowData, options); 1099else options.data = func || ""; 1100options.cellNum = cellNum; 1101var td = options.cellCreator(options); 1102if (td != null) { 1103if (options.data) { 1104if (dwr.util._isHTMLElement(options.data)) td.appendChild(options.data); 1105else { 1106if (dwr.util._shouldEscapeHtml(options) && typeof(options.data) == "string") { 1107td.innerHTML = dwr.util.escapeHtml(options.data); 1108} 1109else { 1110td.innerHTML = options.data; 1111} 1112} 1113} 1114else { 1115td.innerHTML = dwr.util._emptyTableCellReplacement; 1116} 1117tr.appendChild(td); 1118} 1119} 1120return tr; 1121}; 1122 1123 1124 1125 1126dwr.util._defaultRowCreator = function(options) { 1127return options.document.createElement("tr"); 1128}; 1129 1130 1131 1132 1133dwr.util._defaultCellCreator = function(options) { 1134return options.document.createElement("td"); 1135}; 1136 1137 1138 1139 1140 1141dwr.util.removeAllRows = function(ele, options) { 1142ele = dwr.util._getElementById(ele, "removeAllRows()"); 1143if (ele == null) return; 1144if (!options) options = {}; 1145if (!options.filter) options.filter = function() { return true; }; 1146if (!dwr.util._isHTMLElement(ele, ["table", "tbody", "thead", "tfoot"])) { 1147dwr.util._debug("removeAllRows() can only be used with table, tbody, thead and tfoot elements. Attempt to use: " + dwr.util._detailedTypeOf(ele)); 1148return; 1149} 1150var child = ele.firstChild; 1151var next; 1152while (child != null) { 1153next = child.nextSibling; 1154if (options.filter(child)) { 1155ele.removeChild(child); 1156} 1157child = next; 1158} 1159}; 1160 1161 1162 1163 1164dwr.util.setClassName = function(ele, className) { 1165ele = dwr.util._getElementById(ele, "setClassName()"); 1166if (ele == null) return; 1167ele.className = className; 1168}; 1169 1170 1171 1172 1173dwr.util.addClassName = function(ele, className) { 1174ele = dwr.util._getElementById(ele, "addClassName()"); 1175if (ele == null) return; 1176ele.className += " " + className; 1177}; 1178 1179 1180 1181 1182 1183dwr.util.removeClassName = function(ele, className) { 1184ele = dwr.util._getElementById(ele, "removeClassName()"); 1185if (ele == null) return; 1186var regex = new RegExp("(^|\\s)" + className + "(\\s|$)", 'g'); 1187ele.className = ele.className.replace(regex, ''); 1188}; 1189 1190 1191 1192 1193dwr.util.toggleClassName = function(ele, className) { 1194ele = dwr.util._getElementById(ele, "toggleClassName()"); 1195if (ele == null) return; 1196var regex = new RegExp("(^|\\s)" + className + "(\\s|$)"); 1197if (regex.test(ele.className)) { 1198ele.className = ele.className.replace(regex, ''); 1199} 1200else { 1201ele.className += " " + className; 1202} 1203}; 1204 1205 1206 1207 1208 1209dwr.util.cloneNode = function(ele, options) { 1210ele = dwr.util._getElementById(ele, "cloneNode()"); 1211if (ele == null) return null; 1212if (options == null) options = {}; 1213var clone = ele.cloneNode(true); 1214if (options.idPrefix || options.idSuffix) { 1215dwr.util._updateIds(clone, options); 1216} 1217else { 1218dwr.util._removeIds(clone); 1219} 1220ele.parentNode.insertBefore(clone, ele); 1221return clone; 1222}; 1223 1224 1225 1226 1227dwr.util._updateIds = function(ele, options) { 1228if (options == null) options = {}; 1229if (ele.id) { 1230ele.setAttribute("id", (options.idPrefix || "") + ele.id + (options.idSuffix || "")); 1231} 1232var children = ele.childNodes; 1233for (var i = 0; i < children.length; i++) { 1234var child = children.item(i); 1235if (child.nodeType == 1 ) { 1236dwr.util._updateIds(child, options); 1237} 1238} 1239}; 1240 1241 1242 1243 1244dwr.util._removeIds = function(ele) { 1245if (ele.id) ele.removeAttribute("id"); 1246var children = ele.childNodes; 1247for (var i = 0; i < children.length; i++) { 1248var child = children.item(i); 1249if (child.nodeType == 1 ) { 1250dwr.util._removeIds(child); 1251} 1252} 1253}; 1254 1255 1256 1257 1258 1259dwr.util.cloneNodeForValues = function(templateEle, data, options) { 1260templateEle = dwr.util._getElementById(templateEle, "cloneNodeForValues()"); 1261if (templateEle == null) return null; 1262if (options == null) options = {}; 1263var idpath; 1264if (options.idPrefix != null) 1265idpath = options.idPrefix; 1266else 1267idpath = templateEle.id || ""; 1268return dwr.util._cloneNodeForValuesRecursive(templateEle, data, idpath, options); 1269}; 1270 1271 1272 1273 1274dwr.util._cloneNodeForValuesRecursive = function(templateEle, data, idpath, options) { 1275 1276 1277if (dwr.util._isArray(data)) { 1278var clones = []; 1279for (var i = 0; i < data.length; i++) { 1280var item = data[i]; 1281var clone = dwr.util._cloneNodeForValuesRecursive(templateEle, item, idpath + "[" + i + "]", options); 1282clones.push(clone); 1283} 1284return clones; 1285} 1286else 1287 1288 1289 1290if (dwr.util._isObject(data) && !dwr.util._isArray(data)) { 1291var clone = templateEle.cloneNode(true); 1292if (options.updateCloneStyle && clone.style) { 1293for (var propname in options.updateCloneStyle) { 1294clone.style[propname] = options.updateCloneStyle[propname]; 1295} 1296} 1297dwr.util._replaceIds(clone, templateEle.id, idpath); 1298templateEle.parentNode.insertBefore(clone, templateEle); 1299dwr.util._cloneSubArrays(data, idpath, options); 1300return clone; 1301} 1302 1303 1304return null; 1305}; 1306 1307 1308 1309 1310 1311dwr.util._replaceIds = function(ele, oldidpath, newidpath) { 1312if (ele.id) { 1313var newId = null; 1314if (ele.id == oldidpath) { 1315newId = newidpath; 1316} 1317else if (ele.id.length > oldidpath.length) { 1318if (ele.id.substr(0, oldidpath.length) == oldidpath) { 1319var trailingChar = ele.id.charAt(oldidpath.length); 1320if (trailingChar == "." || trailingChar == "[") { 1321newId = newidpath + ele.id.substr(oldidpath.length); 1322} 1323} 1324} 1325if (newId) { 1326ele.setAttribute("id", newId); 1327} 1328else { 1329ele.removeAttribute("id"); 1330} 1331} 1332var children = ele.childNodes; 1333for (var i = 0; i < children.length; i++) { 1334var child = children.item(i); 1335if (child.nodeType == 1 ) { 1336dwr.util._replaceIds(child, oldidpath, newidpath); 1337} 1338} 1339}; 1340 1341 1342 1343 1344 1345dwr.util._cloneSubArrays = function(data, idpath, options) { 1346for (prop in data) { 1347var value = data[prop]; 1348 1349if (dwr.util._isArray(value)) { 1350 1351if (value.length > 0 && dwr.util._isObject(value[0])) { 1352var subTemplateId = idpath + "." + prop; 1353var subTemplateEle = dwr.util.byId(subTemplateId); 1354if (subTemplateEle != null) { 1355dwr.util._cloneNodeForValuesRecursive(subTemplateEle, value, subTemplateId, options); 1356} 1357} 1358} 1359 1360else if (dwr.util._isObject(value)) { 1361dwr.util._cloneSubArrays(value, idpath + "." + prop, options); 1362} 1363} 1364}; 1365 1366 1367 1368 1369dwr.util._getElementById = function(ele, source) { 1370var orig = ele; 1371ele = dwr.util.byId(ele); 1372if (ele == null) { 1373dwr.util._debug(source + " can't find an element with id: " + orig + "."); 1374} 1375return ele; 1376}; 1377 1378 1379 1380 1381 1382 1383 1384dwr.util._isHTMLElement = function(ele, nodeName) { 1385if (ele == null || typeof ele != "object" || ele.nodeName == null) { 1386return false;
1387} 1388if (nodeName != null) { 1389var test = ele.nodeName.toLowerCase(); 1390if (typeof nodeName == "string") { 1391return test == nodeName.toLowerCase(); 1392} 1393if (dwr.util._isArray(nodeName)) { 1394var match = false; 1395for (var i = 0; i < nodeName.length && !match; i++) { 1396if (test == nodeName[i].toLowerCase()) { 1397match = true; 1398} 1399} 1400return match; 1401} 1402dwr.util._debug("dwr.util._isHTMLElement was passed test node name that is neither a string or array of strings"); 1403return false; 1404} 1405return true; 1406}; 1407 1408 1409 1410 1411dwr.util._detailedTypeOf = function(x) { 1412var reply = typeof x; 1413if (reply == "object") { 1414reply = Object.prototype.toString.apply(x); 1415reply = reply.substring(8, reply.length-1); 1416} 1417return reply; 1418}; 1419 1420 1421 1422 1423dwr.util._isObject = function(data) { 1424return (data && typeof data == "object"); 1425}; 1426 1427 1428 1429 1430dwr.util._isArray = function(data) { 1431return (data && Object.prototype.toString.call(data)=="[object Array]"); 1432}; 1433 1434 1435 1436 1437dwr.util._isArrayLike = function(data) { 1438return data 1439&& (typeof data.length == "number") 1440&& ((data.propertyIsEnumerable && data.propertyIsEnumerable("length")==false) || !data.constructor || data!="[object Object]") 1441&& !dwr.util._isString(data) 1442&& !dwr.util._isFunction(data) 1443&& !data.tagName; 1444}; 1445 1446 1447 1448 1449dwr.util._isString = function(data) { 1450return (data && (typeof data == "string" || Object.prototype.toString.call(data) == "[object String]")); 1451}; 1452 1453 1454 1455 1456dwr.util._isFunction = function(data) { 1457return (data && (typeof data == "function" || Object.prototype.toString.call(data) == "[object Function]") 1458&& data != "[object NodeList]"); 1459}; 1460 1461 1462 1463 1464dwr.util._isDate = function(data) { 1465return (data && Object.prototype.toString.call(data)=="[object Date]"); 1466}; 1467 1468 1469 1470 1471dwr.util._importNode = function(doc, importedNode, deep) { 1472var newNode; 1473 1474if (importedNode.nodeType == 1 ) { 1475newNode = doc.createElement(importedNode.nodeName); 1476 1477for (var i = 0; i < importedNode.attributes.length; i++) { 1478var attr = importedNode.attributes[i]; 1479if (attr.nodeValue != null && attr.nodeValue != '') { 1480newNode.setAttribute(attr.name, attr.nodeValue); 1481} 1482} 1483 1484if (importedNode.style != null) { 1485newNode.style.cssText = importedNode.style.cssText; 1486} 1487} 1488else if (importedNode.nodeType == 3 ) { 1489newNode = doc.createTextNode(importedNode.nodeValue); 1490} 1491 1492if (deep && importedNode.hasChildNodes()) { 1493for (i = 0; i < importedNode.childNodes.length; i++) { 1494newNode.appendChild(dwr.util._importNode(doc, importedNode.childNodes[i], true)); 1495} 1496} 1497 1498return newNode; 1499}; 1500 1501 1502dwr.util._debug = function(message, stacktrace) { 1503var written = false; 1504try { 1505if (window.console) { 1506if (stacktrace && window.console.trace) window.console.trace(); 1507window.console.log(message); 1508written = true; 1509} 1510else if (window.opera && window.opera.postError) { 1511window.opera.postError(message); 1512written = true; 1513} 1514} 1515catch (ex) { } 1516 1517if (!written) { 1518var debug = document.getElementById("dwr-debug"); 1519if (debug) { 1520var contents = message + "<br/>" + debug.innerHTML; 1521if (contents.length > 2048) contents = contents.substring(0, 2048); 1522debug.innerHTML = contents; 1523} 1524} 1525}; 1526
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.