You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by cm...@apache.org on 2009/07/22 11:03:41 UTC

svn commit: r796635 - in /couchdb/trunk/share: Makefile.am www/database.html www/dialog/_create_document.html www/document.html www/script/futon.browse.js www/script/jquery.couch.js www/script/jquery.editinline.js www/style/layout.css

Author: cmlenz
Date: Wed Jul 22 09:03:40 2009
New Revision: 796635

URL: http://svn.apache.org/viewvc?rev=796635&view=rev
Log:
Change document creation in Futon so that it no longer prompts for a document ID, but simply opens the document page for an empty (and unsaved) document, and allows you to modify the ID.

Removed:
    couchdb/trunk/share/www/dialog/_create_document.html
Modified:
    couchdb/trunk/share/Makefile.am
    couchdb/trunk/share/www/database.html
    couchdb/trunk/share/www/document.html
    couchdb/trunk/share/www/script/futon.browse.js
    couchdb/trunk/share/www/script/jquery.couch.js
    couchdb/trunk/share/www/script/jquery.editinline.js
    couchdb/trunk/share/www/style/layout.css

Modified: couchdb/trunk/share/Makefile.am
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/Makefile.am?rev=796635&r1=796634&r2=796635&view=diff
==============================================================================
--- couchdb/trunk/share/Makefile.am (original)
+++ couchdb/trunk/share/Makefile.am Wed Jul 22 09:03:40 2009
@@ -34,7 +34,6 @@
 nobase_dist_localdata_DATA = \
     $(JS_FILE) \
     www/dialog/_compact_database.html \
-    www/dialog/_create_document.html \
     www/dialog/_create_database.html \
     www/dialog/_delete_database.html \
     www/dialog/_delete_document.html \

Modified: couchdb/trunk/share/www/database.html
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/database.html?rev=796635&r1=796634&r2=796635&view=diff
==============================================================================
--- couchdb/trunk/share/www/database.html [utf-8] (original)
+++ couchdb/trunk/share/www/database.html [utf-8] Wed Jul 22 09:03:40 2009
@@ -99,7 +99,7 @@
           page.updateDocumentListing();
           $.cookies.set(page.db.name + ".perpage", this.value);
         });
-        $("#toolbar button.add").click(page.addDocument);
+        $("#toolbar button.add").click(page.newDocument);
         $("#toolbar button.compact").click(page.compactDatabase);
         $("#toolbar button.delete").click(page.deleteDatabase);
 
@@ -145,9 +145,9 @@
         </label>
       </div>
       <ul id="toolbar">
-        <li><button class="add">Create Document …</button></li>
-        <li><button class="compact">Compact Database</button></li>
-        <li><button class="delete">Delete Database</button></li>
+        <li><button class="add">New Document</button></li>
+        <li><button class="compact">Compact Database…</button></li>
+        <li><button class="delete">Delete Database…</button></li>
       </ul>
 
       <div id="viewcode" class="collapsed" style="display: none">

Modified: couchdb/trunk/share/www/document.html
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/document.html?rev=796635&r1=796634&r2=796635&view=diff
==============================================================================
--- couchdb/trunk/share/www/document.html [utf-8] (original)
+++ couchdb/trunk/share/www/document.html [utf-8] Wed Jul 22 09:03:40 2009
@@ -54,7 +54,11 @@
         $("#toolbar button.save").click(page.saveDocument);
         $("#toolbar button.add").click(page.addField);
         $("#toolbar button.load").click(page.uploadAttachment);
-        $("#toolbar button.delete").click(page.deleteDocument);
+        if (page.isNew) {
+          $("#toolbar button.delete").hide();
+        } else {
+          $("#toolbar button.delete").click(page.deleteDocument);
+        }
       });
     </script>
   </head>
@@ -70,8 +74,8 @@
       <ul id="toolbar">
         <li><button class="save">Save Document</button></li>
         <li><button class="add">Add Field</button></li>
-        <li><button class="load">Upload Attachment</button></li>
-        <li><button class="delete">Delete Document</button></li>
+        <li><button class="load">Upload Attachment…</button></li>
+        <li><button class="delete">Delete Document…</button></li>
       </ul>
 
       <ul id="tabs">

Modified: couchdb/trunk/share/www/script/futon.browse.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/futon.browse.js?rev=796635&r1=796634&r2=796635&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/futon.browse.js [utf-8] (original)
+++ couchdb/trunk/share/www/script/futon.browse.js [utf-8] Wed Jul 22 09:03:40 2009
@@ -122,20 +122,8 @@
         ruby: "{|doc|\n  emit(nil, doc);\n}"
       }
 
-      this.addDocument = function() {
-        $.showDialog("dialog/_create_document.html", {
-          submit: function(data, callback) {
-            db.saveDoc(data.docid ? {_id: data.docid} : {}, {
-              error: function(status, error, reason) {
-                callback({docid: reason});
-              },
-              success: function(resp) {
-                location.href = "document.html?" + encodeURIComponent(dbName) +
-                                "/" + $.couch.encodeDocId(resp.id);
-              }
-            });
-          }
-        });
+      this.newDocument = function() {
+        location.href = "document.html?" + encodeURIComponent(db.name);
       }
 
       this.compactDatabase = function() {
@@ -655,16 +643,23 @@
     CouchDocumentPage: function() {
       var urlParts = location.search.substr(1).split("/");
       var dbName = decodeURIComponent(urlParts.shift());
-      var idParts = urlParts.join("/").split("@", 2);
-      var docId = decodeURIComponent(idParts[0]);
-      var docRev = (idParts.length > 1) ? idParts[1] : null;
+      if (urlParts.length) {
+        var idParts = urlParts.join("/").split("@", 2);
+        var docId = decodeURIComponent(idParts[0]);
+        var docRev = (idParts.length > 1) ? idParts[1] : null;
+        this.isNew = false;
+      } else {
+        var docId = $.couch.newUUID();
+        var docRev = null;
+        this.isNew = true;
+      }
       var db = $.couch.db(dbName);
 
       this.dbName = dbName;
       this.db = db;
       this.docId = docId;
       this.doc = null;
-      this.isDirty = false;
+      this.isDirty = this.isNew;
       page = this;
 
       this.activateTabularView = function() {
@@ -752,27 +747,32 @@
           }
         }
 
-        db.openDoc(docId, {revs_info: true,
-          success: function(doc) {
-            var revs = doc._revs_info || [];
-            delete doc._revs_info;
-            if (docRev != null) {
-              db.openDoc(docId, {rev: docRev,
-                error: function(status, error, reason) {
-                  alert("The requested revision was not found. " +
-                        "You will be redirected back to the latest revision.");
-                  location.href = "?" + encodeURIComponent(dbName) +
-                    "/" + $.couch.encodeDocId(docId);
-                },
-                success: function(doc) {
-                  handleResult(doc, revs);
-                }
-              });
-            } else {
-              handleResult(doc, revs);
+        if (!page.isNew) {
+          db.openDoc(docId, {revs_info: true,
+            success: function(doc) {
+              var revs = doc._revs_info || [];
+              delete doc._revs_info;
+              if (docRev != null) {
+                db.openDoc(docId, {rev: docRev,
+                  error: function(status, error, reason) {
+                    alert("The requested revision was not found. You will " +
+                          "be redirected back to the latest revision.");
+                    location.href = "?" + encodeURIComponent(dbName) +
+                      "/" + $.couch.encodeDocId(docId);
+                  },
+                  success: function(doc) {
+                    handleResult(doc, revs);
+                  }
+                });
+              } else {
+                handleResult(doc, revs);
+              }
             }
-          }
-        });
+          });
+        } else {
+          handleResult({_id: docId}, []);
+          $("#fields tbody td").dblclick();
+        }
       }
 
       this.deleteDocument = function() {
@@ -796,7 +796,7 @@
           success: function(resp) {
             page.isDirty = false;
             location.href = "?" + encodeURIComponent(dbName) +
-              "/" + $.couch.encodeDocId(docId);
+              "/" + $.couch.encodeDocId(page.docId);
           }
         });
       }
@@ -824,7 +824,7 @@
                 form.find("#progress").css("visibility", "hidden");
                 page.isDirty = false;
                 location.href = "?" + encodeURIComponent(dbName) +
-                  "/" + $.couch.encodeDocId(docId);
+                  "/" + $.couch.encodeDocId(page.docId);
               }
             });
           }
@@ -899,7 +899,7 @@
       }
 
       function _initValue(doc, row, fieldName) {
-        if (fieldName == "_id" || fieldName == "_rev") {
+        if ((fieldName == "_id" && !page.isNew) || fieldName == "_rev") {
           return;
         }
 
@@ -920,8 +920,13 @@
             }
           },
           accept: function(newValue) {
-            doc[row.data("name")] = JSON.parse(newValue);
+            var fieldName = row.data("name");
+            doc[fieldName] = JSON.parse(newValue);
             page.isDirty = true;
+            if (fieldName == "_id") {
+              page.docId = page.doc._id = doc[fieldName];
+              $("h1 strong").text(page.docId);
+            }
           },
           populate: function(value) {
             return $.futon.formatJSON(doc[row.data("name")]);
@@ -929,7 +934,12 @@
           validate: function(value) {
             $("div.error", this).remove();
             try {
-              JSON.parse(value);
+              var parsed = JSON.parse(value);
+              if (row.data("name") == "_id" && typeof(parsed) != "string") {
+                $("<div class='error'>The document ID must be a string.</div>")
+                  .appendTo(this);
+                return false;
+              }
               return true;
             } catch (err) {
               var msg = err.message;
@@ -977,7 +987,7 @@
       }
 
       function _renderAttachmentItem(name, attachment) {
-        var attachmentHref = db.uri + $.couch.encodeDocId(docId)
+        var attachmentHref = db.uri + $.couch.encodeDocId(page.docId)
           + "/" + encodeAttachment(name);
         var li = $("<li></li>");
         $("<a href='' title='Download file' target='_top'></a>").text(name)

Modified: couchdb/trunk/share/www/script/jquery.couch.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/jquery.couch.js?rev=796635&r1=796634&r2=796635&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/jquery.couch.js [utf-8] (original)
+++ couchdb/trunk/share/www/script/jquery.couch.js [utf-8] Wed Jul 22 09:03:40 2009
@@ -22,6 +22,8 @@
     return encodeURIComponent(docID);
   }
 
+  uuidCache = [];
+
   $.extend($.couch, {
     activeTasks: function(options) {
       ajax(
@@ -242,6 +244,22 @@
         options,
         "Replication failed"
       );
+    },
+
+    newUUID: function(cacheNum) {
+      if (cacheNum === undefined) {
+        cacheNum = 1;
+      }
+      if (!uuidCache.length) {
+        ajax({url: "/_uuids", data: {count: cacheNum}, async: false}, {
+            success: function(resp) {
+              uuidCache = resp.uuids
+            }
+          },
+          "Failed to retrieve UUID batch."
+        );
+      }
+      return uuidCache.shift();
     }
 
   });

Modified: couchdb/trunk/share/www/script/jquery.editinline.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/jquery.editinline.js?rev=796635&r1=796634&r2=796635&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/jquery.editinline.js (original)
+++ couchdb/trunk/share/www/script/jquery.editinline.js Wed Jul 22 09:03:40 2009
@@ -42,6 +42,11 @@
           }
         }
       });
+    if (options.acceptOnBlur) {
+      input.blur(function() {
+        return applyChange();
+      });
+    }
 
     function applyChange(keyCode) {
       var newText = input.val();
@@ -86,6 +91,7 @@
       acceptLabel: "",
       cancelLabel: "",
       toolTip: "Double click to edit",
+      acceptOnBlur: true,
 
       // callbacks
       begin: function() { return true },

Modified: couchdb/trunk/share/www/style/layout.css
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/style/layout.css?rev=796635&r1=796634&r2=796635&view=diff
==============================================================================
--- couchdb/trunk/share/www/style/layout.css (original)
+++ couchdb/trunk/share/www/style/layout.css Wed Jul 22 09:03:40 2009
@@ -211,7 +211,7 @@
 #toolbar li { display: inline; }
 #toolbar button { background: transparent 2px 2px no-repeat; border: none;
   color: #666; margin: 0; padding: 2px 1em 2px 22px; cursor: pointer;
-  font-size: 95%; font-weight: bold; line-height: 16px;
+  font-size: 95%; line-height: 16px;
 }
 #toolbar button:hover { background-position: 2px -30px; color: #000; }
 #toolbar button:active { background-position: 2px -62px; color: #000; }