// 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("
  • " + "" + "" + name + "
  • "); } }); 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);