summaryrefslogtreecommitdiff
path: root/share/www/script
diff options
context:
space:
mode:
authorChristopher Lenz <cmlenz@apache.org>2009-01-09 18:20:37 +0000
committerChristopher Lenz <cmlenz@apache.org>2009-01-09 18:20:37 +0000
commite19b5124101f2ff5aa755df99b0fcbd0923aa01f (patch)
treef94bbddb7bdd113b5ee8e2fd00e53375b313daa7 /share/www/script
parent3e0e530cae34bd8d5c9bb45a78923a9bfbc256ca (diff)
Refactoring in Futon to clean up interactions between specific pages and the navigation. Also, switched some graphics over to PNGs with alpha-transparency (screw you IE6), and added a button for removing databases from the recent databases list.
git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@733104 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'share/www/script')
-rw-r--r--share/www/script/browse.js41
-rw-r--r--share/www/script/futon.js127
2 files changed, 151 insertions, 17 deletions
diff --git a/share/www/script/browse.js b/share/www/script/browse.js
index 66acd679..f6aad59f 100644
--- a/share/www/script/browse.js
+++ b/share/www/script/browse.js
@@ -107,7 +107,10 @@ function CouchDatabasePage() {
viewName = decodeURIComponent(viewName);
$.cookies.set(dbName + ".view", viewName);
} else {
- viewName = $.cookies.get(dbName + ".view") || "";
+ viewName = $.cookies.get(dbName + ".view", "");
+ if (viewName) {
+ location.href = "database.html?" + dbName + "/" + viewName;
+ }
}
var db = $.couch.db(dbName);
@@ -157,15 +160,7 @@ function CouchDatabasePage() {
$("#dbs li").filter(function(index) {
return $("a", this).text() == dbName;
}).remove();
-
- // remove database from recent databases list
- var recentDbs = $.cookies.get("recent", "").split(",");
- var recentIdx = $.inArray(db.name, recentDbs)
- if (recentIdx >= 0) {
- recentDbs.splice(recentIdx, 1);
- $.cookies.set("recent", recentDbs.join(","));
- updateRecentDatabasesList();
- }
+ $.futon.navigation.removeDatabase(dbName);
}
}
});
@@ -200,6 +195,11 @@ function CouchDatabasePage() {
.bind("textInput", updateDirtyState);
}
});
+ } else if (viewName == "_slow_view") {
+ page.updateViewEditor(
+ $.cookies.get(db.name + ".map"),
+ $.cookies.get(db.name + ".reduce", "")
+ );
}
}
@@ -252,11 +252,7 @@ function CouchDatabasePage() {
},
success: function(resp) {
var viewCode = resp.views[localViewName];
- $("#viewcode_map").val(viewCode.map);
- $("#viewcode_reduce").val(viewCode.reduce || "");
- var lines = Math.max(viewCode.map.split("\n").length,
- (viewCode.reduce ? viewCode.reduce.split("\n").length : 1));
- $("#viewcode textarea").attr("rows", Math.min(15, Math.max(3, lines)));
+ page.updateViewEditor(viewCode.map, viewCode.reduce || "");
$("#viewcode button.revert, #viewcode button.save").attr("disabled", "disabled");
page.storedViewCode = viewCode;
if (callback) callback();
@@ -271,13 +267,24 @@ function CouchDatabasePage() {
}
}
+ this.updateViewEditor = function(mapFun, reduceFun) {
+ if (!mapFun) return;
+ $("#viewcode_map").val(mapFun);
+ $("#viewcode_reduce").val(reduceFun);
+ var lines = Math.max(
+ mapFun.split("\n").length,
+ reduceFun.split("\n").length
+ );
+ $("#viewcode textarea").attr("rows", Math.min(15, Math.max(3, lines)));
+ }
+
this.saveViewAs = function() {
if (viewName && /^_design/.test(viewName)) {
var viewNameParts = viewName.split("/");
var designDocId = viewNameParts[1];
var localViewName = viewNameParts[2];
} else {
- var designDocId = "", localViewName = ""
+ var designDocId = "", localViewName = "";
}
$.showDialog("dialog/_save_view_as.html", {
load: function(elem) {
@@ -496,7 +503,7 @@ function CouchDatabasePage() {
$(document.body).removeClass("loading");
}
- if (!viewName) {
+ if (!viewName || viewName == "_all_docs") {
$("#switch select")[0].selectedIndex = 0;
db.allDocs(options);
} else {
diff --git a/share/www/script/futon.js b/share/www/script/futon.js
new file mode 100644
index 00000000..bf148189
--- /dev/null
+++ b/share/www/script/futon.js
@@ -0,0 +1,127 @@
+// Licensed under the Apache License, Version 2.0 (the "License"); you may not
+// use this file except in compliance with the License. You may obtain a copy
+// of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+// License for the specific language governing permissions and limitations under
+// the License.
+
+(function($) {
+
+ function Navigation() {
+ var nav = this;
+ this.loaded = false;
+ this.eventHandlers = {
+ load: []
+ };
+
+ this.ready = function(callback) {
+ if (callback) {
+ if (this.loaded) {
+ callback.apply(this);
+ }
+ this.eventHandlers["load"].push(callback);
+ } else {
+ this.loaded = true;
+ callbacks = this.eventHandlers["load"];
+ for (var i = 0; i < callbacks.length; i++) {
+ callbacks[i].apply(this);
+ }
+ }
+ }
+
+ this.addDatabase = function(name) {
+ var recentDbs = $.cookies.get("recent", "").split(",");
+ if ($.inArray(name, recentDbs) == -1) {
+ recentDbs.unshift(name);
+ if (recentDbs.length > 10) recentDbs.length = 10;
+ $.cookies.set("recent", recentDbs.join(","));
+ this.updateDatabases();
+ }
+ }
+
+ this.removeDatabase = function(name) {
+ // remove database from recent databases list
+ var recentDbs = $.cookies.get("recent", "").split(",");
+ var recentIdx = $.inArray(name, recentDbs);
+ if (recentIdx >= 0) {
+ recentDbs.splice(recentIdx, 1);
+ $.cookies.set("recent", recentDbs.join(","));
+ this.updateDatabases();
+ }
+ }
+
+ this.updateDatabases = function() {
+ var selection = null;
+ $("#dbs .selected a").each(function() {
+ selection = [this.pathname, this.search];
+ });
+ $("#dbs").empty();
+ var recentDbs = $.cookies.get("recent", "").split(",");
+ recentDbs.sort();
+ $.each(recentDbs, function(idx, name) {
+ if (name) {
+ $("#dbs").append("<li><a href='database.html?" +
+ encodeURIComponent(name) + "'>" + name +
+ "<button class='remove' title='Remove from list' value='" + name + "'></button>" +
+ "</a></li>");
+ }
+ });
+ if (selection) {
+ this.updateSelection(selection[0], selection[1]);
+ }
+ $("#dbs button.remove").click(function() {
+ nav.removeDatabase(this.value);
+ return false;
+ });
+ }
+
+ this.updateSelection = function(path, queryString) {
+ function fixupPath(path) { // hack for IE/Win
+ return (path.charAt(0) != "/") ? ("/" + path) : path;
+ }
+ if (!path) {
+ path = location.pathname;
+ if (!queryString) {
+ queryString = location.search;
+ }
+ } else if (!queryString) {
+ queryString = "";
+ }
+ var href = fixupPath(path + queryString);
+ $("#nav li").removeClass("selected");
+ $("#nav li a").each(function() {
+ if (fixupPath(this.pathname) + this.search != href) return;
+ $(this).parent("li").addClass("selected").parents("li").addClass("selected");
+ });
+ }
+
+ }
+
+ $.futon = $.futon || {};
+ $.fn.extend($.futon, {
+ navigation: new Navigation()
+ });
+
+ $(function() {
+ document.title = "Apache CouchDB - Futon: " + document.title;
+ $.get("_sidebar.html", function(resp) {
+ $(resp).insertAfter("#wrap");
+
+ $.futon.navigation.updateDatabases();
+ $.futon.navigation.updateSelection();
+ $.futon.navigation.ready();
+
+ $.couch.info({
+ success: function(info, status) {
+ $("#version").text(info.version);
+ }
+ });
+ });
+ });
+
+})(jQuery);