blob: 6c7fb77d2fa60ae621af9742ac47b9a24c22d227 [file] [log] [blame]
/*
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:""};
};