blob: f6b1d9f6d3014290c7c3d313ce507d654f7134d5 [file] [log] [blame]
// 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>" +
"<button class='remove' title='Remove from list' value='" + name + "'></button>" +
"<a href='database.html?" + encodeURIComponent(name) + "' title='" + name + "'>" + name +
"</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");
});
}
this.toggle = function(speed) {
if (speed === undefined) {
speed = 500;
}
var sidebar = $("#sidebar").stop(true, true);
var hidden = !$(sidebar).is(".hidden");
$("#wrap").animate({
marginRight: hidden ? 0 : 210
}, speed, function() {
$(document.body).toggleClass("fullwidth", hidden);
});
sidebar.toggleClass("hidden").animate({
width: hidden ? 26 : 210,
height: hidden ? $("h1").outerHeight() - 1 : "100%",
right: hidden ? 0 : -210
}, speed).children(":not(#sidebar-toggle)").animate({
opacity: "toggle"
}, speed);
$("h1").animate({marginRight: hidden ? 26 : 0}, speed);
$("#sidebar-toggle")
.attr("title", hidden ? "Show Sidebar" : "Hide Sidebar");
$.cookies.set("sidebar", hidden ? "hidden" : "show");
};
}
$.futon = $.futon || {};
$.extend($.futon, {
navigation: new Navigation()
});
$.fn.addPlaceholder = function(text) {
return this.each(function() {
var input = $(this);
if ($.browser.safari) {
input.attr("placeholder", text);
return;
}
input.blur(function() {
if ($.trim(input.val()) == "") {
input.addClass("placeholder").val(text);
} else {
input.removeClass("placeholder");
}
}).triggerHandler("blur")
input.focus(function() {
if (input.is(".placeholder")) {
input.val("").removeClass("placeholder");
}
});
$(this.form).submit(function() {
if (input.is(".placeholder")) {
input.val("");
}
});
});
}
$(document)
.ajaxStart(function() { $(this.body).addClass("loading"); })
.ajaxStop(function() { $(this.body).removeClass("loading"); });
$(function() {
document.title = "Apache CouchDB - Futon: " + document.title;
if ($.cookies.get("sidebar") == "hidden") {
// doing this as early as possible prevents flickering
$(document.body).addClass("fullwidth");
}
$.get("_sidebar.html", function(resp) {
$("#wrap").append(resp)
.find("#sidebar-toggle").click(function(e) {
$.futon.navigation.toggle(e.shiftKey ? 2500 : 500);
return false;
});
if ($.cookies.get("sidebar") == "hidden") {
$.futon.navigation.toggle(0);
}
$.futon.navigation.updateDatabases();
$.futon.navigation.updateSelection();
$.futon.navigation.ready();
$.couch.info({
success: function(info, status) {
$("#version").text(info.version);
}
});
});
});
})(jQuery);