summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsuelockwood <deathbear@apache.org>2013-12-23 10:14:36 -0500
committersuelockwood <deathbear@apache.org>2013-12-23 12:20:29 -0500
commitd33b7dfc880523e7f3ad45bc47a3c8ae0abd5faf (patch)
tree1e2e14d78abf841053126d4403638f8fa3a25595
parent8c333157b335d40225323d34d54c3f5e31e1c40d (diff)
downloadcouchdb-d33b7dfc880523e7f3ad45bc47a3c8ae0abd5faf.tar.gz
decode ddoc from route.
Fix issue with adding ddoc to collection on save, but not on preview regex fix fixed the regex for sniffing for design docs More encoding for Ddocs
-rw-r--r--src/fauxton/app/modules/databases/resources.js4
-rw-r--r--src/fauxton/app/modules/documents/resources.js11
-rw-r--r--src/fauxton/app/modules/documents/routes.js15
-rw-r--r--src/fauxton/app/modules/documents/views.js12
-rw-r--r--src/fauxton/app/templates/documents/all_docs_item.html2
5 files changed, 30 insertions, 14 deletions
diff --git a/src/fauxton/app/modules/databases/resources.js b/src/fauxton/app/modules/databases/resources.js
index 2e66176d9..a01c9cee9 100644
--- a/src/fauxton/app/modules/databases/resources.js
+++ b/src/fauxton/app/modules/databases/resources.js
@@ -84,7 +84,9 @@ function(app, FauxtonAPI, Documents) {
this.database = options.database;
this.params = options.params;
},
-
+ documentation: function(){
+ return "changes";
+ },
url: function () {
var query = "";
if (this.params) {
diff --git a/src/fauxton/app/modules/documents/resources.js b/src/fauxton/app/modules/documents/resources.js
index a171caed5..f833dede2 100644
--- a/src/fauxton/app/modules/documents/resources.js
+++ b/src/fauxton/app/modules/documents/resources.js
@@ -26,6 +26,8 @@ function(app, FauxtonAPI) {
url: function(context) {
if (context === "app") {
return this.getDatabase().url("app") + "/" + this.safeID();
+ } else if (context === "web-index") {
+ return this.getDatabase().url("app") + "/" + app.mixins.safeURLName(this.id);
} else {
return app.host + "/" + this.getDatabase().safeID() + "/" + this.safeID();
}
@@ -139,7 +141,12 @@ function(app, FauxtonAPI) {
// treated separately. For instance, we could default into the
// json editor for docs, or into a ddoc specific page.
safeID: function() {
- return app.mixins.safeURLName(this.id);
+ if (this.isDdoc()){
+ var ddoc = this.id.replace(/^_design\//,"");
+ return "_design/"+app.mixins.safeURLName(ddoc);
+ }else{
+ return app.mixins.safeURLName(this.id);
+ }
},
destroy: function() {
@@ -209,7 +216,7 @@ function(app, FauxtonAPI) {
// treated separately. For instance, we could default into the
// json editor for docs, or into a ddoc specific page.
safeID: function() {
- var ddoc = this.id.replace(/_design\//,"");
+ var ddoc = this.id.replace(/^_design\//,"");
return "_design/"+app.mixins.safeURLName(ddoc);
}
diff --git a/src/fauxton/app/modules/documents/routes.js b/src/fauxton/app/modules/documents/routes.js
index 4727cdc78..56cdc1b13 100644
--- a/src/fauxton/app/modules/documents/routes.js
+++ b/src/fauxton/app/modules/documents/routes.js
@@ -162,7 +162,7 @@ function(app, FauxtonAPI, Documents, Databases) {
var docOptions = app.getParams();
docOptions.include_docs = true;
- this.databaseName = app.mixins.safeURLName(options[0]);
+ this.databaseName = options[0];
this.data = {
database: new Databases.Model({id:this.databaseName})
@@ -222,19 +222,22 @@ function(app, FauxtonAPI, Documents, Databases) {
},
viewFn: function (databaseName, ddoc, view) {
- var params = app.getParams();
+ var params = app.getParams(),
+ decodeDdoc = decodeURIComponent(ddoc);
view = view.replace(/\?.*$/,'');
this.data.indexedDocs = new Documents.IndexCollection(null, {
database: this.data.database,
- design: ddoc,
+ design: decodeDdoc,
view: view,
params: params
});
+
+
var ddocInfo = {
- id: "_design/" + ddoc,
+ id: "_design/" + decodeDdoc,
currView: view,
designDocs: this.data.designDocs
};
@@ -373,7 +376,7 @@ function(app, FauxtonAPI, Documents, Databases) {
},
initialize: function (route, masterLayout, options) {
- this.databaseName = app.mixins.safeURLName(options[0]);
+ this.databaseName = options[0];
this.database = new Databases.Model({id: this.databaseName});
var docOptions = app.getParams();
@@ -394,7 +397,7 @@ function(app, FauxtonAPI, Documents, Databases) {
},
apiUrl: function() {
- return [this.database.changes.url(), this.database.changes.documentation()];
+ return [this.database.url(), this.database.documentation()];
}
});
diff --git a/src/fauxton/app/modules/documents/views.js b/src/fauxton/app/modules/documents/views.js
index 94fe699be..96314addf 100644
--- a/src/fauxton/app/modules/documents/views.js
+++ b/src/fauxton/app/modules/documents/views.js
@@ -238,10 +238,11 @@ function(app, FauxtonAPI, Components, Documents, Databases, pouchdb, resizeColum
duplicate: function (event) {
event.preventDefault();
- var newId = this.$('#dup-id').val();
+ var newId = this.$('#dup-id').val(),
+ encodedID = app.mixins.safeURLName(newId);
this.hideModal();
- FauxtonAPI.triggerRouteEvent('duplicateDoc', newId);
+ FauxtonAPI.triggerRouteEvent('duplicateDoc', encodedID);
},
_showModal: function () {
@@ -1161,6 +1162,7 @@ function(app, FauxtonAPI, Components, Documents, Databases, pouchdb, resizeColum
},
newDesignDoc: function () {
+
return this.$('#ddoc').val() === 'new-doc';
},
@@ -1175,7 +1177,7 @@ function(app, FauxtonAPI, Components, Documents, Databases, pouchdb, resizeColum
language: "javascript"
};
var ddoc = new this.DocModel(doc, {database: this.database});
- this.collection.add(ddoc);
+ //this.collection.add(ddoc);
return ddoc;
} else if ( !this.newDesignDoc() ) {
var ddocName = this.$('#ddoc').val();
@@ -1303,6 +1305,8 @@ function(app, FauxtonAPI, Components, Documents, Databases, pouchdb, resizeColum
ddoc.setDdocView(viewName, mapVal, reduceVal);
ddoc.save().then(function () {
+ that.ddocs.add(ddoc);
+
that.mapEditor.editSaved();
that.reduceEditor && that.reduceEditor.editSaved();
@@ -1714,7 +1718,7 @@ function(app, FauxtonAPI, Components, Documents, Databases, pouchdb, resizeColum
this.collection.each(function(design) {
if (design.has('doc')){
- var ddoc = design.id.replace(/_design\//,"");
+ var ddoc = design.id.replace(/^_design\//,"");
if (design.get('doc').views){
this.buildIndexList(design.get('doc').views, "views", ddoc);
}
diff --git a/src/fauxton/app/templates/documents/all_docs_item.html b/src/fauxton/app/templates/documents/all_docs_item.html
index c0e61cf76..bfedaaa08 100644
--- a/src/fauxton/app/templates/documents/all_docs_item.html
+++ b/src/fauxton/app/templates/documents/all_docs_item.html
@@ -18,7 +18,7 @@ the License.
<pre class="prettyprint"><%- doc.prettyJSON() %></pre>
<% if (doc.isEditable()) { %>
<div class="btn-group">
- <a href="#<%= doc.url('app') %>" class="btn btn-small edits">Edit <%= doc.docType() %></a>
+ <a href="#<%= doc.url('web-index') %>" class="btn btn-small edits">Edit <%= doc.docType() %></a>
<button href="#" class="btn btn-small btn-danger delete" title="Delete this document."><i class="icon icon-trash"></i></button>
</div>
<% } %>