You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2009/09/22 21:37:17 UTC
svn commit: r817793 - in /couchdb/trunk: THANKS
share/www/script/futon.browse.js share/www/style/layout.css
Author: davisp
Date: Tue Sep 22 19:37:04 2009
New Revision: 817793
URL: http://svn.apache.org/viewvc?rev=817793&view=rev
Log:
Make Futon's Source tab editable.
Thanks Sven Helmberger and Dan Walters
Modified:
couchdb/trunk/THANKS
couchdb/trunk/share/www/script/futon.browse.js
couchdb/trunk/share/www/style/layout.css
Modified: couchdb/trunk/THANKS
URL: http://svn.apache.org/viewvc/couchdb/trunk/THANKS?rev=817793&r1=817792&r2=817793&view=diff
==============================================================================
--- couchdb/trunk/THANKS (original)
+++ couchdb/trunk/THANKS Tue Sep 22 19:37:04 2009
@@ -34,5 +34,7 @@
* Kevin Ilchmann Jørgensen <ki...@gmail.com>
* Dirkjan Ochtman <di...@ochtman.nl>
* Sebastian Cohnen <se...@gmx.net>
+ * Sven Helmberger <sv...@gmx.de>
+ * Dan Walters <da...@danwalters.net>
For a list of authors see the `AUTHORS` file.
Modified: couchdb/trunk/share/www/script/futon.browse.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/futon.browse.js?rev=817793&r1=817792&r2=817793&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/futon.browse.js [utf-8] (original)
+++ couchdb/trunk/share/www/script/futon.browse.js [utf-8] Tue Sep 22 19:37:04 2009
@@ -688,6 +688,9 @@
page = this;
this.activateTabularView = function() {
+ if ($("#fields tbody.source textarea").length > 0)
+ return;
+
$("#tabs li").removeClass("active").filter(".tabular").addClass("active");
$("#fields thead th:first").text("Field").attr("colspan", 1).next().show();
$("#fields tbody.content").show();
@@ -699,7 +702,41 @@
$("#fields thead th:first").text("Source").attr("colspan", 2).next().hide();
$("#fields tbody.content").hide();
$("#fields tbody.source").find("td").each(function() {
- $(this).html($("<pre></pre>").html($.futon.formatJSON(page.doc, {html: true})));
+ $(this).html($("<pre></pre>").html($.futon.formatJSON(page.doc, {html: true})))
+ .makeEditable({allowEmpty: false,
+ createInput: function(value) {
+ return $("<textarea rows='8' cols='80' spellcheck='false'></textarea>");
+ },
+ prepareInput: function(input) {
+ $(input).makeResizable({vertical: true});
+ },
+ end: function() {
+ $(this).html($("<pre></pre>").html($.futon.formatJSON(page.doc, {html: true})));
+ },
+ accept: function(newValue) {
+ page.doc = JSON.parse(newValue);
+ page.isDirty = true;
+ page.updateFieldListing(true);
+ },
+ populate: function(value) {
+ return $.futon.formatJSON(page.doc);
+ },
+ validate: function(value) {
+ try {
+ var doc = JSON.parse(value);
+ if (typeof doc != "object")
+ throw new SyntaxError("Please enter a valid JSON document (for example, {}).");
+ return true;
+ } catch (err) {
+ var msg = err.message;
+ if (msg == "parseJSON" || msg == "JSON.parse") {
+ msg = "There is a syntax error in the document.";
+ }
+ $("<div class='error'></div>").text(msg).appendTo(this);
+ return false;
+ }
+ }
+ });
}).end().show();
}
@@ -732,7 +769,7 @@
}
}
- this.updateFieldListing = function() {
+ this.updateFieldListing = function(noReload) {
$("#fields tbody.content").empty();
function handleResult(doc, revs) {
@@ -767,11 +804,16 @@
$("#fields tbody.footer td span").text("Showing revision " +
(revs.length - currentIndex) + " of " + revs.length);
}
- if (location.hash == "#source") {
+ if (location.hash == "#source" && !noReload) {
page.activateSourceView();
}
}
+ if (noReload) {
+ handleResult(page.doc, []);
+ return;
+ }
+
if (!page.isNew) {
db.openDoc(docId, {revs_info: true,
success: function(doc) {
Modified: couchdb/trunk/share/www/style/layout.css
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/style/layout.css?rev=817793&r1=817792&r2=817793&view=diff
==============================================================================
--- couchdb/trunk/share/www/style/layout.css (original)
+++ couchdb/trunk/share/www/style/layout.css Tue Sep 22 19:37:04 2009
@@ -428,22 +428,23 @@
float: left; margin-left: 0; padding-left: 2px; padding-right: .5em;
padding-top: 2px;
}
-#fields tbody.content input, #fields tbody.content textarea {
+#fields tbody.content input, #fields tbody.content textarea, #fields tbody.source textarea {
background: #fff; border: 1px solid; border-color: #999 #ddd #ddd #999;
margin: 0; padding: 1px; width: 100%;
}
#fields tbody.content th input { font-family: inherit; font-size: inherit;
font-weight: bold;
}
-#fields tbody.content td input, #fields tbody.content td textarea {
+#fields tbody.content td input, #fields tbody.content td textarea, #fields tbody.source textarea {
font: 11px normal "DejaVu Sans Mono",Monaco,monospace;
}
#fields tbody.content input.invalid,
-#fields tbody.content textarea.invalid {
+#fields tbody.content textarea.invalid,
+#fields tbody.source textarea.invalid {
background: #f9f4f4; border-color: #b66 #ebb #ebb #b66;
}
-#fields tbody.content div.grippie { padding: 0 1px; width: 100%; }
-#fields tbody.content div.error { color: #d33; }
+#fields tbody.content div.grippie, #fields tbody.source div.gripple { padding: 0 1px; width: 100%; }
+#fields tbody.content div.error, #fields tbody.source div.error { color: #d33; }
#fields tbody.content td ul.attachments { list-style: none; margin: 0;
padding: 0;
@@ -469,6 +470,7 @@
#fields tbody.source td pre { color: #999; font-size: 11px; line-height: 1.6em;
margin: 0; overflow: auto; white-space: pre-wrap; width: 100%;
}
+#fields tbody.source td.editinline-container { padding-left: 14px; padding-right: 48px; }
/* Test suite */