You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by jc...@apache.org on 2009/01/07 19:21:24 UTC

svn commit: r732413 - in /couchdb/trunk: THANKS share/www/browse/database.html share/www/browse/document.html share/www/index.html share/www/script/jquery.history.js

Author: jchris
Date: Wed Jan  7 10:21:23 2009
New Revision: 732413

URL: http://svn.apache.org/viewvc?rev=732413&view=rev
Log:
Futon history browsing - applied patch from COUCHDB-186

Added:
    couchdb/trunk/share/www/script/jquery.history.js   (with props)
Modified:
    couchdb/trunk/THANKS
    couchdb/trunk/share/www/browse/database.html
    couchdb/trunk/share/www/browse/document.html
    couchdb/trunk/share/www/index.html

Modified: couchdb/trunk/THANKS
URL: http://svn.apache.org/viewvc/couchdb/trunk/THANKS?rev=732413&r1=732412&r2=732413&view=diff
==============================================================================
--- couchdb/trunk/THANKS (original)
+++ couchdb/trunk/THANKS Wed Jan  7 10:21:23 2009
@@ -12,6 +12,7 @@
  * Yoan Blanc <yo...@gmail.com>
  * Paul Carey <pa...@gmail.com>
  * Benoit Chesneau <bc...@gmail.com>
+ * Jason Davies <ja...@jasondavies.com>
  * Paul Joseph Davis <pa...@gmail.com>
  * Michael Gottesman <go...@reed.edu>
  * Michael Hendricks <mi...@ndrix.org>
@@ -23,5 +24,6 @@
  * Sam Ruby <ru...@intertwingly.net>
  * Dirk Schalge <di...@epd-me.net>
  * Carlos Valiente <su...@gmail.com>
+ * Luke Venediger <lu...@lukev.net>
 
 For a list of authors see the `AUTHORS` file.

Modified: couchdb/trunk/share/www/browse/database.html
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/browse/database.html?rev=732413&r1=732412&r2=732413&view=diff
==============================================================================
--- couchdb/trunk/share/www/browse/database.html [utf-8] (original)
+++ couchdb/trunk/share/www/browse/database.html [utf-8] Wed Jan  7 10:21:23 2009
@@ -103,6 +103,9 @@
         $("#toolbar button.add").click(page.addDocument);
         $("#toolbar button.compact").click(page.compactDatabase);
         $("#toolbar button.delete").click(page.deleteDatabase);
+
+        // Update title
+        document.title = "Browse Database " + page.db.name;
       });
     </script>
   </head>

Modified: couchdb/trunk/share/www/browse/document.html
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/browse/document.html?rev=732413&r1=732412&r2=732413&view=diff
==============================================================================
--- couchdb/trunk/share/www/browse/document.html [utf-8] (original)
+++ couchdb/trunk/share/www/browse/document.html [utf-8] Wed Jan  7 10:21:23 2009
@@ -64,6 +64,9 @@
         $("#toolbar button.add").click(page.addField);
         $("#toolbar button.load").click(page.uploadAttachment);
         $("#toolbar button.delete").click(page.deleteDocument);
+
+        // Update the title
+        document.title = "View Document " + page.docId; 
       });
     </script>
   </head>

Modified: couchdb/trunk/share/www/index.html
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/index.html?rev=732413&r1=732412&r2=732413&view=diff
==============================================================================
--- couchdb/trunk/share/www/index.html [utf-8] (original)
+++ couchdb/trunk/share/www/index.html [utf-8] Wed Jan  7 10:21:23 2009
@@ -30,7 +30,8 @@
     <script src="script/jquery.js?1.2.6"></script>
     <script src="script/jquery.cookies.js?0.8.0"></script>
     <script src="script/jquery.couch.js?0.8.0"></script>
-    <script>
+    <script src="script/jquery.history.js?0.8.0"></script>
+    <script type="text/javascript">
       function updateRecentDatabasesList() {
         $("#dbs").empty();
         var recentDbs = $.cookies.get("recent", "").split(",");
@@ -41,6 +42,17 @@
             "</a></li>");
         });
       }
+      var baseURL = location.pathname.match(/.*\//).toString();
+      function updateIFrame(hash) {
+        var l = frames['content'].location;
+        var title = frames['content'].document.title + " - Apache CouchDB: Futon Utility Client";        
+        document.title = title;	
+        var href = baseURL + hash;
+        // For some reason the onload event fires twice; the 2nd time with URL-decoded l.href
+        if (hash != '' && decodeURIComponent(l.pathname + l.search) != decodeURIComponent(href)) {
+          l.href = href;
+        }
+      }
       function updateNavigation(path, queryString) {
         function fixupPath(path) { // hack for IE/Win
           return (path.charAt(0) != "/") ? ("/" + path) : path;
@@ -69,6 +81,11 @@
         });
       }
       $(function() {
+        $.historyInit(updateIFrame);
+        $('#content').load(function() {
+          var l = frames["content"].location;
+          $.historyLoad(l.pathname.substring(baseURL.length) + l.search);
+        });
         $.couch.info({
           success: function(info, status) {
             $("#version").text(info.version);
@@ -95,7 +112,7 @@
     </ul>
     <div id="footer">Futon on Apache CouchDB <span id="version">?</span></div>
     <div id="view">
-      <iframe name="content" src="browse/index.html" allowtransparency="true">
+      <iframe name="content" src="browse/index.html" allowtransparency="true" id="content">
     </div>
   </body>
 </html>

Added: couchdb/trunk/share/www/script/jquery.history.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/jquery.history.js?rev=732413&view=auto
==============================================================================
--- couchdb/trunk/share/www/script/jquery.history.js (added)
+++ couchdb/trunk/share/www/script/jquery.history.js Wed Jan  7 10:21:23 2009
@@ -0,0 +1,150 @@
+/*
+ * jQuery history plugin
+ *
+ * Copyright (c) 2006 Taku Sano (Mikage Sawatari)
+ * Licensed under the MIT License:
+ *   http://www.opensource.org/licenses/mit-license.php
+ *
+ * Modified by Lincoln Cooper to add Safari support and only call the callback once during initialization
+ * for msie when no initial hash supplied.
+ */
+
+
+jQuery.extend({
+	historyCurrentHash: undefined,
+	
+	historyCallback: undefined,
+	
+	historyInit: function(callback){
+		jQuery.historyCallback = callback;
+		var current_hash = location.hash;
+		
+		jQuery.historyCurrentHash = current_hash;
+		if(jQuery.browser.msie) {
+			// To stop the callback firing twice during initilization if no hash present
+			if (jQuery.historyCurrentHash == '') {
+			jQuery.historyCurrentHash = '#';
+		}
+		
+			// add hidden iframe for IE
+			$("body").prepend('<iframe id="jQuery_history" style="display: none;"></iframe>');
+			var ihistory = $("#jQuery_history")[0];
+			var iframe = ihistory.contentWindow.document;
+			iframe.open();
+			iframe.close();
+			iframe.location.hash = current_hash;
+		}
+		else if ($.browser.safari) {
+			// etablish back/forward stacks
+			jQuery.historyBackStack = [];
+			jQuery.historyBackStack.length = history.length;
+			jQuery.historyForwardStack = [];
+			
+			jQuery.isFirst = true;
+		}
+		jQuery.historyCallback(current_hash.replace(/^#/, ''));
+		setInterval(jQuery.historyCheck, 100);
+	},
+	
+	historyAddHistory: function(hash) {
+		// This makes the looping function do something
+		jQuery.historyBackStack.push(hash);
+		
+		jQuery.historyForwardStack.length = 0; // clear forwardStack (true click occured)
+		this.isFirst = true;
+	},
+	
+	historyCheck: function(){
+		if(jQuery.browser.msie) {
+			// On IE, check for location.hash of iframe
+			var ihistory = $("#jQuery_history")[0];
+			var iframe = ihistory.contentDocument || ihistory.contentWindow.document;
+			var current_hash = iframe.location.hash;
+			if(current_hash != jQuery.historyCurrentHash) {
+			
+				location.hash = current_hash;
+				jQuery.historyCurrentHash = current_hash;
+				jQuery.historyCallback(current_hash.replace(/^#/, ''));
+				
+			}
+		} else if ($.browser.safari) {
+			if (!jQuery.dontCheck) {
+				var historyDelta = history.length - jQuery.historyBackStack.length;
+				
+				if (historyDelta) { // back or forward button has been pushed
+					jQuery.isFirst = false;
+					if (historyDelta < 0) { // back button has been pushed
+						// move items to forward stack
+						for (var i = 0; i < Math.abs(historyDelta); i++) jQuery.historyForwardStack.unshift(jQuery.historyBackStack.pop());
+					} else { // forward button has been pushed
+						// move items to back stack
+						for (var i = 0; i < historyDelta; i++) jQuery.historyBackStack.push(jQuery.historyForwardStack.shift());
+					}
+					var cachedHash = jQuery.historyBackStack[jQuery.historyBackStack.length - 1];
+					if (cachedHash != undefined) {
+						jQuery.historyCurrentHash = location.hash;
+						jQuery.historyCallback(cachedHash);
+					}
+				} else if (jQuery.historyBackStack[jQuery.historyBackStack.length - 1] == undefined && !jQuery.isFirst) {
+					// back button has been pushed to beginning and URL already pointed to hash (e.g. a bookmark)
+					// document.URL doesn't change in Safari
+					if (document.URL.indexOf('#') >= 0) {
+						jQuery.historyCallback(document.URL.split('#')[1]);
+					} else {
+						var current_hash = location.hash;
+						jQuery.historyCallback('');
+					}
+					jQuery.isFirst = true;
+				}
+			}
+		} else {
+			// otherwise, check for location.hash
+			var current_hash = location.hash;
+			if(current_hash != jQuery.historyCurrentHash) {
+				jQuery.historyCurrentHash = current_hash;
+				jQuery.historyCallback(current_hash.replace(/^#/, ''));
+			}
+		}
+	},
+	historyLoad: function(hash){
+		var newhash;
+		
+		if (jQuery.browser.safari) {
+			newhash = hash;
+		}
+		else {
+			newhash = '#' + hash;
+			location.hash = newhash;
+		}
+		jQuery.historyCurrentHash = newhash;
+		
+		if(jQuery.browser.msie) {
+			var ihistory = $("#jQuery_history")[0];
+			var iframe = ihistory.contentWindow.document;
+			iframe.open();
+			iframe.close();
+			iframe.location.hash = newhash;
+			jQuery.historyCallback(hash);
+		}
+		else if (jQuery.browser.safari) {
+			jQuery.dontCheck = true;
+			// Manually keep track of the history values for Safari
+			this.historyAddHistory(hash);
+			
+			// Wait a while before allowing checking so that Safari has time to update the "history" object
+			// correctly (otherwise the check loop would detect a false change in hash).
+			var fn = function() {jQuery.dontCheck = false;};
+			window.setTimeout(fn, 200);
+			jQuery.historyCallback(hash);
+			// N.B. "location.hash=" must be the last line of code for Safari as execution stops afterwards.
+			//      By explicitly using the "location.hash" command (instead of using a variable set to "location.hash") the
+			//      URL in the browser and the "history" object are both updated correctly.
+			location.hash = newhash;
+		}
+		else {
+		  jQuery.historyCallback(hash);
+		}
+	}
+});
+
+

Propchange: couchdb/trunk/share/www/script/jquery.history.js
------------------------------------------------------------------------------
    svn:eol-style = native