svn: /web/php/trunk/js/ common.js jquery.scrollto.min.js

[email protected] (Paul Dragoonis)
Newsgroups php.webmaster
Message-ID <[email protected]>
dragoonis                                Thu, 30 Dec 2010 19:49:02 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=306878

Log:
Created the TOC and have an animated jQuery scrollTo() to each TOC section.

Changed paths:
    U   web/php/trunk/js/common.js
    A   web/php/trunk/js/jquery.scrollto.min.js

Modified: web/php/trunk/js/common.js
===================================================================
--- web/php/trunk/js/common.js	2010-12-30 19:00:19 UTC (rev 306877)
+++ web/php/trunk/js/common.js	2010-12-30 19:49:02 UTC (rev 306878)
@@ -74,6 +74,8 @@
             }
         });
     });
+
+    var foundToc = false;
     if ($("#quicktoc").length) {
         var pageid = $("section.docs > div").attr("id");
         var editurl = "https://edit.php.net/?perm=/" + getLanguage() + "/" + pageid + ".php&project=PHP";
@@ -83,16 +85,32 @@
         $($(".footmenu")[1]).append("<li><a href='" + editurl + "'>Edit this page</a></li>");
         $($(".footmenu")[1]).append("<li><a href='" + bugurl + "'>Report bug on this page</a></li>");

-        var l = "";
+        // Make a list, start making <li>'s dynamically.
+        // we use .data() to store which element the TOC item should scrollTo()
+        var l = $('<ul id="toc_list">');
         $(".refsect1 h3, .sect1 h2, .sect2 h3, .sect3 h4").each(function() {
-            var id = $(this).parent().attr("id");
-            l += "<li><a href='#" + id + "'>" + $(this).text() + "</a></li>";
+            if(foundToc === false) {
+                foundToc = true;
+            }
+            var currItem = $(this);
+            $('<a class="toc_item" href="#">' + currItem.text() + '</a>')
+                .data('scrollObject', currItem.parent())
+                .appendTo( $('<li>') ).parent().appendTo(l);
+
         });
-        if (l) {
-            $("#quicktoc").append("<h5>Quick TOC</h5><ul>" + l + "<li><a href='#usernotes'>User notes</a></li></ul>");
+
+        if (foundToc) {
+            jQuery.getScript("/js/jquery.scrollto.min.js", function(){
+                l.delegate("a.toc_item","click keypress", function(e) {
+                        $.scrollTo($(this).data('scrollObject'), 800);
+                        return false;
+                });
+            });
+            $("#quicktoc").append("<h5>Quick TOC</h5>").append(l);
         } else {
             $("#quicktoc").remove();
         }
+
     }
     $(".docs div[id] > h1, .docs div[id] > h2, .docs div[id] > h3, .docs div[id] > h4").each(function(){
         $(this).append("<a class='genanchor' href='#" + $(this).parent().attr("id") + "'> ¶</a>");

Added: web/php/trunk/js/jquery.scrollto.min.js
===================================================================
--- web/php/trunk/js/jquery.scrollto.min.js	                        (rev 0)
+++ web/php/trunk/js/jquery.scrollto.min.js	2010-12-30 19:49:02 UTC (rev 306878)
@@ -0,0 +1,11 @@
+/**
+ * jQuery.ScrollTo - Easy element scrolling using jQuery.
+ * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
+ * Dual licensed under MIT and GPL.
+ * Date: 5/25/2009
+ * @author Ariel Flesler
+ * @version 1.4.2
+ *
+ * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
+ */
+;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.styl!
 e)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.