evaluator.html

来源:互联网 发布:java好书推荐 编辑:程序博客网 时间:2024/06/05 07:15
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!-- evaluator.html"
     From "JavaScript Bible" 6th Edition by Danny Goodman
     http://www.dannyg.com
     Copyright 2007 Danny Goodman. All Rights Reserved.
-->

<html id="myHTML">
<head id="myHead">
<title id="myTitle">The Evaluator</title>
<style id="myStyle" disabled="disabled" type="text/css">
#myP {font-weight:bold}
em {color:green}
</style>
<script id="myScript" type="text/javascript">
// global variables to play with
var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
var hasNNSecurity = (typeof netscape != "undefined");
var rng; // W3C DOM Range

function init() {
   if (document.createRange) {
      rng = document.createRange();
      rng.setStartBefore(document.body);
      rng.setEndAfter(document.body);
   }
}

function doIt(form){
    if (form.security.checked && hasNNSecurity) {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect")
        netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite")
    }

    form.output.value = eval(form.input.value)
    
    if (form.security.checked && hasNNSecurity) {
        netscape.security.PrivilegeManager.revertPrivilege("UniversalBrowserRead")
        netscape.security.PrivilegeManager.revertPrivilege("UniversalBrowserWrite")
        netscape.security.PrivilegeManager.revertPrivilege("UniversalXPConnect");
    }
    if (document.compatMode) {
        status = "Mode:" + document.compatMode;
    }
}

function sortText(a, b) {
    return ((a.name < b.name) ? -1 : 1)
}

function showProps(form) {
    var objName = form.inspector.value
    var obj = eval(objName)
    var msg1 = "PROPERTIES\n", msg2 = "\nMETHODS\n"
    var delim = (form.tabbed.checked) ? String.fromCharCode(9) : "="
    var data = new Array()
    if (form.security.checked && hasNNSecurity) {
        netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")
        netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite")
        netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    }

    for (var i in obj) {
        status = i
        // work around bug in IE
        switch (i) {
            case "domain" :
                data[data.length] = {name:(objName + "." + i), value:"unknown", type:"unknown"}
                break
            case "parentRule" :
                data[data.length] = {name:(objName + "." + i), value:"unknown", type:"unknown"}
                break
            default :
                data[data.length] = {name:(objName + "." + i), value:obj[i], type:typeof obj[i]}
        }
    }
    data.sort(sortText)
    for (var j=0; j < data.length; j++) {
        if (data[j].type == "function") {
            if (form.tabbed.checked) {
                msg2 += data[j].name + delim + data[j].name + "()\n"
            } else {
                msg2 += data[j].name + "=function " + data[j].name + "()\n"
            }
        } else {
            if (form.tabbed.checked) {
                msg1 += data[j].name + delim + data[j].value + delim + " |" + data[j].type +"|\n"
            } else {
                msg1 += data[j].name + "=" + data[j].value + " |" + data[j].type +"|\n"
            }
        }
    }
    if (form.security.checked && hasNNSecurity) {
        netscape.security.PrivilegeManager.revertPrivilege("UniversalBrowserRead")
        netscape.security.PrivilegeManager.revertPrivilege("UniversalBrowserWrite")
        netscape.security.PrivilegeManager.revertPrivilege("UniversalXPConnect");
    }
    form.output.value = msg1 + msg2
    if (typeof form.output.scrollTop != "undefined") {
        form.output.scrollTop = 0;
    }
}

function evalIfReady(form, evt) {
   evt = (evt) ? evt : (window.event) ? window.event : "";
   if (evt) {
      var theKey = (evt.which) ? evt.which : evt.keyCode;
      if (theKey == 13) {
         doIt(form);
         return false;
      }
   }
   return true;
}

function showPropsIfReady(form, evt) {
   evt = (evt) ? evt : (window.event) ? window.event : "";
   if (evt) {
      var theKey = (evt.which) ? evt.which : evt.keyCode;
      if (theKey == 13) {
         showProps(form);
         return false;
      }
   }
   return true;
}

function walkChildNodes(objRef, n) {
    var obj
    if (objRef) {
        if (typeof objRef == "string") {
            obj = document.getElementById(objRef)
        } else {
            obj = objRef
        }
    } else {
        obj = (document.body.parentElement) ?
            document.body.parentElement : document.body.parentNode
    }
    var output = ""
    var indent = ""
    var i, group, txt
    if (n) {
        for (i = 0; i < n; i++) {
            indent += "+---"
        }
    } else {
        n = 0
        output += "Child Nodes of <" + obj.tagName
        output += ">\n=====================\n"
    }
    group = obj.childNodes
    for (i = 0; i < group.length; i++) {
        output += indent
        switch (group[i].nodeType) {
            case 1:
                output += "<" + group[i].tagName
                output += (group[i].id) ? " ID=" + group[i].id : ""
                output += (group[i].name) ? " NAME=" + group[i].name : ""
                output += ">\n"
                break
            case 3:
                txt = group[i].nodeValue.substr(0,15)
                output += "[Text:\"" + txt.replace(/[\r\n]/g,"<cr>")
                if (group[i].nodeValue.length > 15) {
                    output += "..."
                }
                output += "\"]\n"
                break
            case 8:
                output += "[!COMMENT!]\n"
                break
            default:
                output += "[Node Type = " + group[i].nodeType + "]\n"
        }
        if (group[i].childNodes.length > 0) {
            output += walkChildNodes(group[i], n+1)
        }
    }
    return output
}

function walkChildren(objRef, n) {
    var obj
    if (objRef) {
        if (typeof objRef == "string") {
            obj = document.getElementById(objRef)
        } else {
            obj = objRef
        }
    } else {
        obj = document.body.parentElement
    }
    var output = ""
    var indent = ""
    var i, group
    if (n) {
        for (i = 0; i < n; i++) {
            indent += "+---"
        }
    } else {
        n = 0
        output += "Children of <" + obj.tagName
        output += ">\n=====================\n"
    }
    group = obj.children
    for (i = 0; i < group.length; i++) {
        output += indent + "<" + group[i].tagName
        output += (group[i].id) ? " ID=" + group[i].id : ""
        output += (group[i].name) ? " NAME=" + group[i].name : ""
        output += ">\n"
        if (group[i].children.length > 0) {
            output += walkChildren(group[i], n+1)
        }
    }
    return output
}

</script>
</head>

<body bgcolor="white" onload="init()">
  <form onsubmit="return false">
    <fieldset id="myFIELDSET">
      <legend id="myLEGEND">The Evaluator</legend>

      <p>Enter an expression to evaluate (<input type="checkbox"
      name="security" />Use NN Code Base Security):<br />
      <input type="text" name="input" size="80" onkeypress=
      "return evalIfReady(this.form, event)" /> <input type=
      "button" value="Evaluate" onclick="doIt(this.form)" /></p>

      <p>Results: (<input type="checkbox" name="tabbed" checked>Use tab delimiters)<br />
      <textarea name="output" cols="80" rows="6" wrap="virtual"></textarea>
      </p>

      <p>Enter a reference to an object:<br />
      <input type="text" name="inspector" size="80" hidefocus="hidefocus"
      onkeypress="return showPropsIfReady(this.form, event)" />
      <input type="button" value="List Properties" onclick=
      "showProps(this.form)" /></p>
    </fieldset>
  </form><!--
     BEGIN SAMPLE HTML ELEMENTS
  -->

  <p id="myP">Now is the time for <em id="myEM">all</em> good men
  to come to the aid of their country.</p>

  <table id="myTable" cellpadding="10" border="2">
    <caption id="myCap">
      This is a table caption.
    </caption>

    <colgroup id="myCol" span="3"></colgroup>

    <thead id="myTHEAD">
      <tr>
        <th><font id="myFont" size="4">Quantity</font></th>

        <th id="myTH">Description</th>

        <th>Price</th>
      </tr>
    </thead>

    <tbody bgcolor="salmon" id="myTBODY">
      <tr align="center">
        <td width="200">4</td>

        <td id="myTD" style="filter:blur(add=true, direction=225)">
        Primary Widget</td>

        <td>$14.96</td>
      </tr>

      <tr id="myTR">
        <td>10</td>

        <td style="filter:blur(add=true, direction=225)">Secondary
        Widget</td>

        <td id="myTD2">$114.96</td>
      </tr>
    </tbody>
  </table>

  <form name="myForm2" id="myForm2">
    <select id="mySelect" name="aSelect" multiple="multiple" size="4">
      <option value="Larry Fine">
        Larry
      </option>

      <option>
        Moe
      </option>

      <option>
        Curly
      </option>
    </select>

    <p><input type="checkbox" id="myCheckbox" />Sample Checkbox</p>

    <fieldset id="form2set1">
      <legend id="form1set1legend">Choose the Desired
      Performance</legend> <input type="radio" name="speed" id=
      "speed1" /><label for="speed1">Fastest (lower
      quality)</label><br />
      <input type="radio" name="speed" id="speed2" /><label for=
      "speed2">Slower (best quality)</label>
    </fieldset>
  </form><br />

  <div id="myDIV" style=
  "position:absolute; top:350; left:550; width:60px; border:5px ridge green; padding:5px; margin:5px">
  This is a positioned element with a whole bunch of text in it.
  </div>

  <p><img name="myIMG" src="desk1.gif" id="myIMG" alt="" /></p>
</body>
</html>

原创粉丝点击