Subversion Repositories Applications.papyrus

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
        Copyright (c) 2004-2006, The Dojo Foundation
        All Rights Reserved.

        Licensed under the Academic Free License version 2.1 or above OR the
        modified BSD license. For more information on Dojo licensing, see:

                http://dojotoolkit.org/community/licensing.shtml
*/

dojo.provide("dojo.widget.html.stabile");
dojo.widget.html.stabile = {_sqQuotables:new RegExp("([\\\\'])", "g"), _depth:0, _recur:false, depthLimit:2};
dojo.widget.html.stabile.getState = function (id) {
        dojo.widget.html.stabile.setup();
        return dojo.widget.html.stabile.widgetState[id];
};
dojo.widget.html.stabile.setState = function (id, state, isCommit) {
        dojo.widget.html.stabile.setup();
        dojo.widget.html.stabile.widgetState[id] = state;
        if (isCommit) {
                dojo.widget.html.stabile.commit(dojo.widget.html.stabile.widgetState);
        }
};
dojo.widget.html.stabile.setup = function () {
        if (!dojo.widget.html.stabile.widgetState) {
                var text = dojo.widget.html.stabile._getStorage().value;
                dojo.widget.html.stabile.widgetState = text ? dj_eval("(" + text + ")") : {};
        }
};
dojo.widget.html.stabile.commit = function (state) {
        dojo.widget.html.stabile._getStorage().value = dojo.widget.html.stabile.description(state);
};
dojo.widget.html.stabile.description = function (v, showAll) {
        var depth = dojo.widget.html.stabile._depth;
        var describeThis = function () {
                return this.description(this, true);
        };
        try {
                if (v === void (0)) {
                        return "undefined";
                }
                if (v === null) {
                        return "null";
                }
                if (typeof (v) == "boolean" || typeof (v) == "number" || v instanceof Boolean || v instanceof Number) {
                        return v.toString();
                }
                if (typeof (v) == "string" || v instanceof String) {
                        var v1 = v.replace(dojo.widget.html.stabile._sqQuotables, "\\$1");
                        v1 = v1.replace(/\n/g, "\\n");
                        v1 = v1.replace(/\r/g, "\\r");
                        return "'" + v1 + "'";
                }
                if (v instanceof Date) {
                        return "new Date(" + d.getFullYear + "," + d.getMonth() + "," + d.getDate() + ")";
                }
                var d;
                if (v instanceof Array || v.push) {
                        if (depth >= dojo.widget.html.stabile.depthLimit) {
                                return "[ ... ]";
                        }
                        d = "[";
                        var first = true;
                        dojo.widget.html.stabile._depth++;
                        for (var i = 0; i < v.length; i++) {
                                if (first) {
                                        first = false;
                                } else {
                                        d += ",";
                                }
                                d += arguments.callee(v[i], showAll);
                        }
                        return d + "]";
                }
                if (v.constructor == Object || v.toString == describeThis) {
                        if (depth >= dojo.widget.html.stabile.depthLimit) {
                                return "{ ... }";
                        }
                        if (typeof (v.hasOwnProperty) != "function" && v.prototype) {
                                throw new Error("description: " + v + " not supported by script engine");
                        }
                        var first = true;
                        d = "{";
                        dojo.widget.html.stabile._depth++;
                        for (var key in v) {
                                if (v[key] == void (0) || typeof (v[key]) == "function") {
                                        continue;
                                }
                                if (first) {
                                        first = false;
                                } else {
                                        d += ", ";
                                }
                                var kd = key;
                                if (!kd.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/)) {
                                        kd = arguments.callee(key, showAll);
                                }
                                d += kd + ": " + arguments.callee(v[key], showAll);
                        }
                        return d + "}";
                }
                if (showAll) {
                        if (dojo.widget.html.stabile._recur) {
                                var objectToString = Object.prototype.toString;
                                return objectToString.apply(v, []);
                        } else {
                                dojo.widget.html.stabile._recur = true;
                                return v.toString();
                        }
                } else {
                        throw new Error("Unknown type: " + v);
                        return "'unknown'";
                }
        }
        finally {
                dojo.widget.html.stabile._depth = depth;
        }
};
dojo.widget.html.stabile._getStorage = function () {
        if (dojo.widget.html.stabile.dataField) {
                return dojo.widget.html.stabile.dataField;
        }
        var form = document.forms._dojo_form;
        return dojo.widget.html.stabile.dataField = form ? form.stabile : {value:""};
};