<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FMochkit%2FInterpreterManager</id>
		<title>JavaScript DHTML/Mochkit/InterpreterManager - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wbex.ru/index.php?action=history&amp;feed=atom&amp;title=JavaScript_DHTML%2FMochkit%2FInterpreterManager"/>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Mochkit/InterpreterManager&amp;action=history"/>
		<updated>2026-04-04T19:47:27Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Mochkit/InterpreterManager&amp;diff=3194&amp;oldid=prev</id>
		<title> в 10:00, 26 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Mochkit/InterpreterManager&amp;diff=3194&amp;oldid=prev"/>
				<updated>2010-05-26T10:00:07Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 10:00, 26 мая 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
			</entry>

	<entry>
		<id>http://wbex.ru/index.php?title=JavaScript_DHTML/Mochkit/InterpreterManager&amp;diff=3195&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://wbex.ru/index.php?title=JavaScript_DHTML/Mochkit/InterpreterManager&amp;diff=3195&amp;oldid=prev"/>
				<updated>2010-05-26T07:25:20Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Interpreter - JavaScript Interactive Interpreter==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
MochiKit is dual-licensed software.  It is available under the terms of the&lt;br /&gt;
MIT License, or the Academic Free License version 2.1.  The full text of&lt;br /&gt;
each license is included below.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&amp;lt;!-- Code revised from MochiKit demo code --&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01//EN&amp;quot; &amp;quot;http://www.w3.org/TR/html4/strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;Interpreter - JavaScript Interactive Interpreter&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
h1 {&lt;br /&gt;
    font-size: 2em;&lt;br /&gt;
    color: #4B4545;&lt;br /&gt;
    text-align: center;&lt;br /&gt;
}&lt;br /&gt;
textarea.textbox {&lt;br /&gt;
    font-family: Monaco, &amp;quot;lucida console&amp;quot;, Courier;&lt;br /&gt;
    border: 1px solid #CCCCCC;&lt;br /&gt;
    font-size: .60em; &lt;br /&gt;
    padding: 2px 4px;&lt;br /&gt;
    margin-top: .3em;&lt;br /&gt;
}&lt;br /&gt;
input.textbox {&lt;br /&gt;
    font-family: Monaco, &amp;quot;lucida console&amp;quot;, Courier;&lt;br /&gt;
    border: 1px solid #CCCCCC;&lt;br /&gt;
    font-size: .60em; &lt;br /&gt;
    padding: 2px 4px;&lt;br /&gt;
    margin-top: .3em;&lt;br /&gt;
}&lt;br /&gt;
#interpreter_area {&lt;br /&gt;
    display: block;&lt;br /&gt;
    border: 1px solid #CCCCCC;&lt;br /&gt;
    padding: 2px 4px;&lt;br /&gt;
    margin-top: .3em;&lt;br /&gt;
    width: 600px;&lt;br /&gt;
    height: 300px;&lt;br /&gt;
    overflow: auto;&lt;br /&gt;
}&lt;br /&gt;
#interpreter_output {&lt;br /&gt;
    display: inline;&lt;br /&gt;
    font-family: Monaco, &amp;quot;lucida console&amp;quot;, Courier;&lt;br /&gt;
    font-size: .60em;&lt;br /&gt;
}&lt;br /&gt;
#interpreter_output span {&lt;br /&gt;
    white-space: -moz-pre-wrap; /* Mozilla */&lt;br /&gt;
    white-space: -o-pre-wrap; /* Opera 7 */&lt;br /&gt;
    white-space: pre-wrap; /* CSS 2.1 */&lt;br /&gt;
    white-space: pre-line; /* CSS 3 (and 2.1 as well, actually) */&lt;br /&gt;
    word-wrap: break-word; /* IE */&lt;br /&gt;
    wrap-option: emergency; /* CSS 3 */&lt;br /&gt;
}&lt;br /&gt;
input.textbox:focus { background-color: #FFFEE3; }&lt;br /&gt;
.code { color: blue; }&lt;br /&gt;
.data { color: black; }&lt;br /&gt;
.error { color: red; }&lt;br /&gt;
.banner { color: green; }&lt;br /&gt;
.invisible { display: none; }&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;/style&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;MochiKit-1.4.2/lib/MochiKit/MochiKit.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
        &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    Interpreter: JavaScript Interactive Interpreter&lt;br /&gt;
*/&lt;br /&gt;
InterpreterManager = function () {&lt;br /&gt;
    bindMethods(this);&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.initialize = function () {&lt;br /&gt;
    connect(&amp;quot;interpreter_text&amp;quot;, &amp;quot;onkeyup&amp;quot;, this.keyUp);&lt;br /&gt;
    connect(&amp;quot;interpreter_textarea&amp;quot;, &amp;quot;onkeydown&amp;quot;, this.areaKeyDown);&lt;br /&gt;
    connect(&amp;quot;interpreter_form&amp;quot;, &amp;quot;onsubmit&amp;quot;, this.submit);&lt;br /&gt;
    getElement(&amp;quot;interpreter_text&amp;quot;).focus();&lt;br /&gt;
    this.banner();&lt;br /&gt;
    this.lines = [];&lt;br /&gt;
    this.history = [];&lt;br /&gt;
    this.currentHistory = &amp;quot;&amp;quot;;&lt;br /&gt;
    this.historyPos = -1;&lt;br /&gt;
    this.blockingOn = null;&lt;br /&gt;
    if (typeof(this.doEval) == &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        // detect broken eval, warn at some point if a namespace ever gets used&lt;br /&gt;
        this.doEval = function () {&lt;br /&gt;
            return eval(arguments[0]);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    window.help = this.help;&lt;br /&gt;
    this.help.NAME = &amp;quot;type help(func) for help on a MochiKit function&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.banner = function () {&lt;br /&gt;
    var _ua = window.navigator.userAgent;&lt;br /&gt;
    var ua = _ua.replace(/^Mozilla\/.*?\(.*?\)\s*/, &amp;quot;&amp;quot;);&lt;br /&gt;
    if (ua == &amp;quot;&amp;quot;) {&lt;br /&gt;
        // MSIE&lt;br /&gt;
        ua = _ua.replace(/^Mozilla\/4\.0 \(compatible; MS(IE .*?);.*$/, &amp;quot;$1&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    appendChildNodes(&amp;quot;interpreter_output&amp;quot;,&lt;br /&gt;
        SPAN({&amp;quot;class&amp;quot;: &amp;quot;banner&amp;quot;},&lt;br /&gt;
            &amp;quot;MochiKit v&amp;quot; + MochiKit.Base.VERSION + &amp;quot; [&amp;quot; + ua + &amp;quot;]&amp;quot;,&lt;br /&gt;
            BR(),&lt;br /&gt;
            &amp;quot;Type your expression in the input box below and press return, or see the notes below for more information.&amp;quot;,&lt;br /&gt;
            BR()&lt;br /&gt;
        ),&lt;br /&gt;
        BR()&lt;br /&gt;
    );&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.submit = function (event) {&lt;br /&gt;
    if (this.blockingOn) {&lt;br /&gt;
        try {&lt;br /&gt;
            this.blockingOn.cancel();&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            this.showError(e);&lt;br /&gt;
        }&lt;br /&gt;
        this.blockingOn = null;&lt;br /&gt;
    }&lt;br /&gt;
    this.doSubmit();&lt;br /&gt;
    this.doScroll();&lt;br /&gt;
    event.stop();&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.help = function (fn) {&lt;br /&gt;
    if (fn &amp;amp;&amp;amp; fn.NAME) {&lt;br /&gt;
        fn = fn.NAME;&lt;br /&gt;
    }&lt;br /&gt;
    if (typeof(fn) != &amp;quot;string&amp;quot; || fn.length == 0) {&lt;br /&gt;
        writeln(&amp;quot;help(func) on any MochiKit function for help&amp;quot;);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    var comps = fn.split(&amp;quot;.&amp;quot;);&lt;br /&gt;
    var base = comps.splice(0, 2);&lt;br /&gt;
    var shortfn = comps.join(&amp;quot;.&amp;quot;);&lt;br /&gt;
    var url = &amp;quot;../../doc/html/&amp;quot; + base.join(&amp;quot;/&amp;quot;) + &amp;quot;.html&amp;quot;;&lt;br /&gt;
    var d = doXHR(url, {mimeType: &amp;quot;text/xml&amp;quot;});&lt;br /&gt;
    d.addCallback(function (req) {&lt;br /&gt;
        var els = getElementsByTagAndClassName(&lt;br /&gt;
            &amp;quot;a&amp;quot;, &amp;quot;mochidef&amp;quot;, req.responseXML);&lt;br /&gt;
        var match = &amp;quot;#fn-&amp;quot; + shortfn.toLowerCase();&lt;br /&gt;
        for (var i = 0; i &amp;lt; els.length; i++) {&lt;br /&gt;
            var elem = els[i];&lt;br /&gt;
            var href = elem.href;&lt;br /&gt;
            var idx = href.indexOf(&amp;quot;#&amp;quot;);&lt;br /&gt;
            if (idx != -1 &amp;amp;&amp;amp; href.substring(idx) == match) {&lt;br /&gt;
                writeln(A({href: url + match, target: &amp;quot;_blank&amp;quot;},&lt;br /&gt;
                    scrapeText(elem)));&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        writeln(&amp;quot;documentation for &amp;quot; + fn + &amp;quot; not found&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
    blockOn(d);&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
InterpreterManager.prototype.doScroll = function () {&lt;br /&gt;
    var p = getElement(&amp;quot;interpreter_output&amp;quot;).lastChild;&lt;br /&gt;
    if (typeof(p) == &amp;quot;undefined&amp;quot; || p == null) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    var area = getElement(&amp;quot;interpreter_area&amp;quot;);&lt;br /&gt;
    if (area.offsetHeight &amp;gt; area.scrollHeight) {&lt;br /&gt;
        area.scrollTop = 0;&lt;br /&gt;
    } else {&lt;br /&gt;
        area.scrollTop = area.scrollHeight;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.moveHistory = function (dir) {&lt;br /&gt;
    // totally bogus value&lt;br /&gt;
    if (dir == 0 || this.history.length == 0) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    var elem = getElement(&amp;quot;interpreter_text&amp;quot;);&lt;br /&gt;
    if (this.historyPos == -1) {&lt;br /&gt;
        this.currentHistory = elem.value;&lt;br /&gt;
        if (dir &amp;gt; 0) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        this.historyPos = this.history.length - 1;&lt;br /&gt;
        elem.value = this.history[this.historyPos];&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if (this.historyPos == 0 &amp;amp;&amp;amp; dir &amp;lt; 0) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    if (this.historyPos == this.history.length - 1 &amp;amp;&amp;amp; dir &amp;gt; 0) {&lt;br /&gt;
        this.historyPos = -1;&lt;br /&gt;
        elem.value = this.currentHistory;&lt;br /&gt;
        return;&lt;br /&gt;
    } &lt;br /&gt;
    this.historyPos += dir;&lt;br /&gt;
    elem.value = this.history[this.historyPos];&lt;br /&gt;
}&lt;br /&gt;
InterpreterManager.prototype.runMultipleLines = function (text) {&lt;br /&gt;
    var lines = rstrip(text).replace(&amp;quot;\r\n&amp;quot;, &amp;quot;\n&amp;quot;).split(/\n/);&lt;br /&gt;
    appendChildNodes(&amp;quot;interpreter_output&amp;quot;,&lt;br /&gt;
        SPAN({&amp;quot;class&amp;quot;: &amp;quot;code&amp;quot;}, &amp;quot;&amp;gt;&amp;gt;&amp;gt; &amp;quot;, izip(lines, imap(BR, cycle([null]))))&lt;br /&gt;
    );&lt;br /&gt;
    this.runCode(text);&lt;br /&gt;
}&lt;br /&gt;
InterpreterManager.prototype.areaKeyDown = function (e) {&lt;br /&gt;
    var mod = e.modifier();&lt;br /&gt;
    var hasMod = mod.alt || mod.ctrl || mod.meta;&lt;br /&gt;
    if (e.key().string == &amp;quot;KEY_ENTER&amp;quot; &amp;amp;&amp;amp; hasMod) {&lt;br /&gt;
        var elem = getElement(&amp;quot;interpreter_textarea&amp;quot;);&lt;br /&gt;
        var text = elem.value;&lt;br /&gt;
        elem.value = &amp;quot;&amp;quot;;&lt;br /&gt;
        this.runMultipleLines(text);&lt;br /&gt;
        e.stop();&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.keyUp = function (e) {&lt;br /&gt;
    var key = e.key();&lt;br /&gt;
    // if any meta key is pressed, don&amp;quot;t handle the signal&lt;br /&gt;
    if (e.modifier().any) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    switch (key.string) {&lt;br /&gt;
        case &amp;quot;KEY_ARROW_UP&amp;quot;: this.moveHistory(-1); break;&lt;br /&gt;
        case &amp;quot;KEY_ARROW_DOWN&amp;quot;: this.moveHistory(1); break;&lt;br /&gt;
        default: return;&lt;br /&gt;
    }&lt;br /&gt;
    e.stop();&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.blockOn = function (d) {&lt;br /&gt;
    var node = SPAN({&amp;quot;class&amp;quot;: &amp;quot;banner&amp;quot;}, &amp;quot;blocking on &amp;quot; + repr(d) + &amp;quot;...&amp;quot;);&lt;br /&gt;
    this.blockingOn = d;&lt;br /&gt;
    appendChildNodes(&amp;quot;interpreter_output&amp;quot;, node);&lt;br /&gt;
    this.doScroll();&lt;br /&gt;
    d.addBoth(function (res) {&lt;br /&gt;
        swapDOM(node);&lt;br /&gt;
        this.blockingOn = null;&lt;br /&gt;
        if (res instanceof CancelledError) {&lt;br /&gt;
            window.writeln(SPAN({&amp;quot;class&amp;quot;: &amp;quot;error&amp;quot;}, repr(d) + &amp;quot; cancelled!&amp;quot;));&lt;br /&gt;
            return undefined;&lt;br /&gt;
        }&lt;br /&gt;
        return res;&lt;br /&gt;
    });&lt;br /&gt;
    d.addCallbacks(this.showResult, this.showError);&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.showError = function (e) {&lt;br /&gt;
    if (typeof(e) != &amp;quot;object&amp;quot;) {&lt;br /&gt;
        e = new Error(e);&lt;br /&gt;
    }&lt;br /&gt;
    appendChildNodes(&amp;quot;interpreter_output&amp;quot;,&lt;br /&gt;
        SPAN({&amp;quot;class&amp;quot;: &amp;quot;error&amp;quot;}, &amp;quot;Error:&amp;quot;),&lt;br /&gt;
        TABLE({&amp;quot;class&amp;quot;: &amp;quot;error&amp;quot;},&lt;br /&gt;
            THEAD({&amp;quot;class&amp;quot;: &amp;quot;invisible&amp;quot;}, TD({&amp;quot;colspan&amp;quot;: 2})),&lt;br /&gt;
            TFOOT({&amp;quot;class&amp;quot;: &amp;quot;invisible&amp;quot;}, TD({&amp;quot;colspan&amp;quot;: 2})),&lt;br /&gt;
            TBODY(null,&lt;br /&gt;
                map(function (kv) {&lt;br /&gt;
                    var v = kv[1];&lt;br /&gt;
                    if (typeof(v) == &amp;quot;function&amp;quot;) {&lt;br /&gt;
                        return;&lt;br /&gt;
                    }&lt;br /&gt;
                    if (typeof(v) == &amp;quot;object&amp;quot;) {&lt;br /&gt;
                        v = repr(v);&lt;br /&gt;
                    }&lt;br /&gt;
                    return TR(null,&lt;br /&gt;
                        TD({&amp;quot;class&amp;quot;: &amp;quot;error&amp;quot;}, kv[0]),&lt;br /&gt;
                        TD({&amp;quot;class&amp;quot;: &amp;quot;data&amp;quot;}, v)&lt;br /&gt;
                    );&lt;br /&gt;
                }, sorted(items(e)))&lt;br /&gt;
            )&lt;br /&gt;
        )&lt;br /&gt;
    );&lt;br /&gt;
    window.last_exc = e;&lt;br /&gt;
    this.doScroll();&lt;br /&gt;
};&lt;br /&gt;
EvalFunctions = {&lt;br /&gt;
    evalWith: function () {&lt;br /&gt;
        with (arguments[1] || window) { return eval(arguments[0]); };&lt;br /&gt;
    },&lt;br /&gt;
    evalCall: function () {&lt;br /&gt;
        return eval.call(arguments[1] || window, arguments[0]);&lt;br /&gt;
    },&lt;br /&gt;
    choose: function () {&lt;br /&gt;
        var ns = {__test__: this};&lt;br /&gt;
        var e;&lt;br /&gt;
        try {&lt;br /&gt;
            if (this.evalWith(&amp;quot;return __test__&amp;quot;, ns) === this) { &lt;br /&gt;
                return this.evalWith;&lt;br /&gt;
            }&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            // pass&lt;br /&gt;
        }&lt;br /&gt;
        try {&lt;br /&gt;
            if (this.evalCall(&amp;quot;return __test__&amp;quot;, ns) === this) { &lt;br /&gt;
                return this.evalCall;&lt;br /&gt;
            }&lt;br /&gt;
        } catch (e) {&lt;br /&gt;
            // pass&lt;br /&gt;
        }&lt;br /&gt;
        return undefined;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
        &lt;br /&gt;
InterpreterManager.prototype.doEval = EvalFunctions.choose();&lt;br /&gt;
InterpreterManager.prototype.doSubmit = function () {&lt;br /&gt;
    var elem = getElement(&amp;quot;interpreter_text&amp;quot;);&lt;br /&gt;
    var code = elem.value;&lt;br /&gt;
    elem.value = &amp;quot;&amp;quot;;&lt;br /&gt;
    var isContinuation = false;&lt;br /&gt;
    if (code.length &amp;gt;= 2 &amp;amp;&amp;amp; code.lastIndexOf(&amp;quot;//&amp;quot;) == code.length - 2) {&lt;br /&gt;
        isContinuation = true;&lt;br /&gt;
        code = code.substr(0, code.length - 2);&lt;br /&gt;
    }&lt;br /&gt;
    appendChildNodes(&amp;quot;interpreter_output&amp;quot;,&lt;br /&gt;
        SPAN({&amp;quot;class&amp;quot;: &amp;quot;code&amp;quot;}, &amp;quot;&amp;gt;&amp;gt;&amp;gt; &amp;quot;, code),&lt;br /&gt;
        BR()&lt;br /&gt;
    );&lt;br /&gt;
    this.lines.push(code);&lt;br /&gt;
    this.history.push(code);&lt;br /&gt;
    this.historyPos = -1;&lt;br /&gt;
    this.currentHistory = &amp;quot;&amp;quot;;&lt;br /&gt;
    if (isContinuation) {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    var allCode = this.lines.join(&amp;quot;\n&amp;quot;);&lt;br /&gt;
    this.lines = [];&lt;br /&gt;
    this.runCode(allCode);&lt;br /&gt;
    return;&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.runCode = function (allCode) {&lt;br /&gt;
    var res;&lt;br /&gt;
    try {&lt;br /&gt;
        res = this.doEval(allCode);&lt;br /&gt;
    } catch (e) {&lt;br /&gt;
        // mozilla shows some keys more than once!&lt;br /&gt;
        this.showError(e);&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    this.showResult(res);&lt;br /&gt;
};&lt;br /&gt;
InterpreterManager.prototype.showResult = function (res) {&lt;br /&gt;
    if (typeof(res) != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        window._ = res;&lt;br /&gt;
    }&lt;br /&gt;
    if (typeof(res) != &amp;quot;undefined&amp;quot;) {&lt;br /&gt;
        appendChildNodes(&amp;quot;interpreter_output&amp;quot;,&lt;br /&gt;
            SPAN({&amp;quot;class&amp;quot;: &amp;quot;data&amp;quot;}, repr(res)),&lt;br /&gt;
            BR()&lt;br /&gt;
        );&lt;br /&gt;
        this.doScroll();&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
window.writeln = function () {&lt;br /&gt;
    appendChildNodes(&amp;quot;interpreter_output&amp;quot;,&lt;br /&gt;
        SPAN({&amp;quot;class&amp;quot;: &amp;quot;data&amp;quot;}, arguments),&lt;br /&gt;
        BR()&lt;br /&gt;
    );&lt;br /&gt;
    interpreterManager.doScroll();&lt;br /&gt;
};&lt;br /&gt;
window.clear = function () {&lt;br /&gt;
    replaceChildNodes(&amp;quot;interpreter_output&amp;quot;);&lt;br /&gt;
    getElement(&amp;quot;interpreter_area&amp;quot;).scrollTop = 0;&lt;br /&gt;
};&lt;br /&gt;
window.blockOn = function (d) {&lt;br /&gt;
    if (!(d instanceof Deferred)) {&lt;br /&gt;
        throw new TypeError(repr(d) + &amp;quot; is not a Deferred!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    interpreterManager.blockOn(d);&lt;br /&gt;
};&lt;br /&gt;
window.dir = function (o) {&lt;br /&gt;
    // Python muscle memory!&lt;br /&gt;
    return sorted(keys(o));&lt;br /&gt;
};&lt;br /&gt;
window.inspect = function (o) {&lt;br /&gt;
    window._ = o;&lt;br /&gt;
    if ((typeof(o) != &amp;quot;function&amp;quot; &amp;amp;&amp;amp; typeof(o) != &amp;quot;object&amp;quot;) || o == null) {&lt;br /&gt;
        window.writeln(repr(o));&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    var pairs = items(o);&lt;br /&gt;
    if (pairs.length == 0) {&lt;br /&gt;
        window.writeln(repr(o));&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    window.writeln(TABLE({&amp;quot;border&amp;quot;: &amp;quot;1&amp;quot;},&lt;br /&gt;
        THEAD({&amp;quot;class&amp;quot;: &amp;quot;invisible&amp;quot;}, TR(null, TD(), TD())),&lt;br /&gt;
        TFOOT({&amp;quot;class&amp;quot;: &amp;quot;invisible&amp;quot;}, TR(null, TD(), TD())),&lt;br /&gt;
        TBODY(null,&lt;br /&gt;
            map(&lt;br /&gt;
                function (kv) {&lt;br /&gt;
                    var click = function () {&lt;br /&gt;
                        try {&lt;br /&gt;
                            window.inspect(kv[1]);&lt;br /&gt;
                        } catch (e) {&lt;br /&gt;
                            interpreterManager.showError(e);&lt;br /&gt;
                        }&lt;br /&gt;
                        return false;&lt;br /&gt;
                    }&lt;br /&gt;
                    return TR(null,&lt;br /&gt;
                        TD(null, A({href: &amp;quot;#&amp;quot;, onclick: click}, kv[0])),&lt;br /&gt;
                        TD(null, repr(kv[1]))&lt;br /&gt;
                    );&lt;br /&gt;
                },&lt;br /&gt;
                pairs&lt;br /&gt;
            )&lt;br /&gt;
        )&lt;br /&gt;
    ));&lt;br /&gt;
};&lt;br /&gt;
    &lt;br /&gt;
interpreterManager = new InterpreterManager();&lt;br /&gt;
addLoadEvent(interpreterManager.initialize);&lt;br /&gt;
// rewrite the view-source links&lt;br /&gt;
addLoadEvent(function () {&lt;br /&gt;
    var elems = getElementsByTagAndClassName(&amp;quot;A&amp;quot;, &amp;quot;view-source&amp;quot;);&lt;br /&gt;
    var page = &amp;quot;interpreter/&amp;quot;;&lt;br /&gt;
    for (var i = 0; i &amp;lt; elems.length; i++) {&lt;br /&gt;
        var elem = elems[i];&lt;br /&gt;
        var href = elem.href.split(/\//).pop();&lt;br /&gt;
        elem.target = &amp;quot;_blank&amp;quot;;&lt;br /&gt;
        elem.href = &amp;quot;../view-source/view-source.html#&amp;quot; + page + href;&lt;br /&gt;
    }&lt;br /&gt;
});&lt;br /&gt;
        &lt;br /&gt;
        &amp;lt;/script&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h1&amp;gt;&lt;br /&gt;
            Interpreter - JavaScript Interactive Interpreter&lt;br /&gt;
        &amp;lt;/h1&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            &amp;lt;p&amp;gt;&lt;br /&gt;
                This demo is a JavaScript interpreter.  Type some code into&lt;br /&gt;
                the text input and press enter to see the results.  It uses&lt;br /&gt;
                &amp;lt;a href=&amp;quot;http://mochikit.ru&amp;quot;&amp;gt;MochiKit&amp;lt;/a&amp;gt;&amp;quot;s&lt;br /&gt;
                &amp;lt;a href=&amp;quot;../../doc/html/lib/MochiKit/DOM.html&amp;quot;&amp;gt;MochiKit.DOM&amp;lt;/a&amp;gt;&lt;br /&gt;
                to manipulate the display.  It also supports waiting for&lt;br /&gt;
                &amp;lt;a href=&amp;quot;../../doc/html/lib/MochiKit/Async.html&amp;quot;&amp;gt;MochiKit.Async&amp;lt;/a&amp;gt;&lt;br /&gt;
                 Deferreds via &amp;lt;tt&amp;gt;blockOn(aDeferred)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
            &amp;lt;/p&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            View Source: [&lt;br /&gt;
            &amp;lt;a href=&amp;quot;index.html&amp;quot; class=&amp;quot;view-source&amp;quot;&amp;gt;index.html&amp;lt;/a&amp;gt; |&lt;br /&gt;
            &amp;lt;a href=&amp;quot;interpreter.js&amp;quot; class=&amp;quot;view-source&amp;quot;&amp;gt;interpreter.js&amp;lt;/a&amp;gt;&lt;br /&gt;
            ]&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;form id=&amp;quot;interpreter_form&amp;quot; autocomplete=&amp;quot;off&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;div id=&amp;quot;interpreter_area&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;div id=&amp;quot;interpreter_output&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div id=&amp;quot;oneline&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;input id=&amp;quot;interpreter_text&amp;quot; name=&amp;quot;input_text&amp;quot; type=&amp;quot;text&amp;quot; class=&amp;quot;textbox&amp;quot; size=&amp;quot;100&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
            &amp;lt;div id=&amp;quot;multiline&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;textarea id=&amp;quot;interpreter_textarea&amp;quot; name=&amp;quot;input_textarea&amp;quot; type=&amp;quot;text&amp;quot; class=&amp;quot;textbox&amp;quot; cols=&amp;quot;97&amp;quot; rows=&amp;quot;10&amp;quot;&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;
                &amp;lt;br /&amp;gt;&lt;br /&gt;
            &amp;lt;/div&amp;gt;&lt;br /&gt;
        &amp;lt;/form&amp;gt;&lt;br /&gt;
        &amp;lt;div&amp;gt;&lt;br /&gt;
            Notes:&lt;br /&gt;
            &amp;lt;ul&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    To show the signature of a MochiKit function and link&lt;br /&gt;
                    to its documentation, type help(fn) on any MochiKit&lt;br /&gt;
                    function.&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    To write multi-line code snippets, use the lower text area&lt;br /&gt;
                    and press ctrl-enter or cmd-enter to submit.&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;tt&amp;gt;function name() {}&amp;lt;/tt&amp;gt; syntax might not end up in&lt;br /&gt;
                    window scope, so use &amp;lt;tt&amp;gt;name = function () {}&amp;lt;/tt&amp;gt;&lt;br /&gt;
                    syntax instead&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    If you want to stuff something into the output window&lt;br /&gt;
                    other than the &amp;lt;tt&amp;gt;repr(...)&amp;lt;/tt&amp;gt; of the expression&lt;br /&gt;
                    result, use the &amp;lt;tt&amp;gt;writeln(...)&amp;lt;/tt&amp;gt; function.&lt;br /&gt;
                    It accepts anything that MochiKit.DOM does, so you can&lt;br /&gt;
                    even put styled stuff in there!&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    Use &amp;lt;tt&amp;gt;clear()&amp;lt;/tt&amp;gt; to clear the interpreter window.&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    You can use &amp;lt;tt&amp;gt;blockOn(aDeferred)&amp;lt;/tt&amp;gt; to wait on a&lt;br /&gt;
                    Deferred.  This expression must be used by itself, so&lt;br /&gt;
                    the value must be obtained from &amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt; or&lt;br /&gt;
                    &amp;lt;tt&amp;gt;last_exc&amp;lt;/tt&amp;gt;.  Typing any expression will&lt;br /&gt;
                    cancel the Deferred.&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    Up and down arrow keys work as a rudimentary history&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
                &amp;lt;li&amp;gt;&lt;br /&gt;
                    &amp;lt;tt&amp;gt;_&amp;lt;/tt&amp;gt; is the value of the last expression&lt;br /&gt;
                    that was not &amp;lt;tt&amp;gt;undefined&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;last_exc&amp;lt;/tt&amp;gt; is&lt;br /&gt;
                    the value of the last unhandled exception.&lt;br /&gt;
                &amp;lt;/li&amp;gt;&lt;br /&gt;
            &amp;lt;/ul&amp;gt;&lt;br /&gt;
        &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &lt;br /&gt;
  &amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>