selectorRow
.append($("<span>").text("Option Set:"))
- .append(optionSelector);
+ .append(optionSelector)
+ .append($("<span>")
+ .append($("<a>")
+ .addClass("link")
+ .text("to hash")
+ .css("float", "right")
+ .css("padding-right", "8px")
+ .click(function() { self.showHash(); })));
var filter = function() {
$.each(self.palettes, function(key, value) {
.append($("<span>").append(this.filterBar))
.append($("<span>")
.append($("<a>")
- .attr("href", "#")
.addClass("link")
.text("Redraw")
.css("float", "right")
this.activePalette.root.style.display = "block";
}
+MultiPalette.prototype.showHash = function() {
+ var hash = this.read();
+ var textarea = new TextArea();
+ textarea.cancel.style.display = "none";
+
+ /*
+ * JSON.stringify isn't built to be nice to functions. The following fixes
+ * this.
+ *
+ * First, val.toString only does part of the work, turning it into
+ * "function () {\n alert(\"p-click!\");\n}",
+ *
+ * {start,end}Marker make the surrounding quotes easy to find, and then
+ * remove them. It also converts the instances of \n and \" so the
+ * result looks like:
+ * function () {
+ * alert("p-click!");
+ * }",
+ */
+ var startMarker = "<~%!<";
+ var endMarker = ">!%~>";
+ var replacer = function(key, val) {
+ if (typeof val === 'function') {
+ return startMarker + val.toString() + endMarker;
+ }
+ return val;
+ }
+ var text = JSON.stringify(hash, replacer, 2);
+ console.log(text);
+ while(true) {
+ var start = text.indexOf(startMarker);
+ var end = text.indexOf(endMarker);
+ if (start == -1) {
+ break;
+ }
+ var substring = text.substring(start + startMarker.length, end);
+ while(substring.indexOf("\\n") >= 0) {
+ substring = substring.replace("\\n", "\n");
+ }
+ while(substring.indexOf("\\\"") >= 0) {
+ substring = substring.replace("\\\"", "\"");
+ }
+ text = text.substring(0, start - 1)
+ + substring
+ + text.substring(end + endMarker.length + 1);
+ }
+ textarea.show("options", text);
+}
+
/**
* Read from palette
*/