Commit:    6961058e02a54f5ac27b60389bd604b3d200f1f1
Author:    Dejan Marjanovic <[email protected]>         Sat, 23 Nov 
2013 20:11:42 +0100
Parents:   4b24c64d665bdcdb900ff11d38cf276fdf592986
Branches:  master

Link:       
http://git.php.net/?p=web/php.git;a=commitdiff;h=6961058e02a54f5ac27b60389bd604b3d200f1f1

Log:
Fix # scroll (this time for real)

Changed paths:
  M  js/common.js


Diff:
diff --git a/js/common.js b/js/common.js
index 9195570..44f6896 100755
--- a/js/common.js
+++ b/js/common.js
@@ -5,6 +5,44 @@ String.prototype.escapeSelector = function()
   return this.replace(/(.|#)([ #;&,.+*~\':"!^$\[\]\(\)=>|\/])/g, '$1' + 
'\\\\$2');
 }
 
+String.prototype.toInt = function()
+{
+  return parseInt(this);
+}
+
+/* {{{ Hash Scroll */
+var jHtmlBody = $('html, body');
+function scroll(target, interval)
+{
+  if (typeof interval == 'undefined')
+    interval = 400;
+
+  var hash = target;
+  target = $('[id="' + target.substring(1) + '"]');
+  
+  var offsetTop = 
+    target.offset().top 
+    - 52
+    - target.css('margin-top').toInt()
+  ;
+
+  jHtmlBody.animate(
+    {scrollTop: offsetTop}, 
+    interval,
+    function()
+    {
+      if (window.location.hash != hash)
+      {
+        window.location.hash = hash;
+        window.scrollTo(0, offsetTop);
+      }
+    }
+  );
+
+  return false;
+}
+/* }}} */
+
 /** {{{
  * jQuery.ScrollTo - Easy element scrolling using jQuery.
  * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | 
http://flesler.blogspot.com
@@ -17,6 +55,16 @@ String.prototype.escapeSelector = function()
  */
 ;(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.style)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);
 /*}}}*/
+
+$(window).load(function()
+{
+  // Fire our scroll, webkit needs onload
+  if (window.location.hash)
+  {
+    scroll(window.location.hash, 0);
+  }
+});
+
 $(document).ready(function() {
 
     // Ugh, cookie handling.
@@ -58,6 +106,18 @@ $(document).ready(function() {
         $this.append("<a class='genanchor' href='#" + $this.attr('id') + "'> 
ΒΆ</a>");
     });
 
+    // Bind events for #[id]
+    $(window).on('hashchange', function(e) {
+      e.preventDefault();
+      return false;
+    });
+
+    $('a[href^=#]').click(function(e) {
+      e.preventDefault();
+      scroll($.attr(this, 'href'), 400);      
+      return false;
+    });
+
     var $elephpants = $(".elephpants");
     var $elephpantsImages = $elephpants.find('.images');
     // load the elephpant images if elephpants div is in the dom.
@@ -221,34 +281,6 @@ $(document).ready(function() {
         limit: 3
     });
     
-    // Hash scroll    
-    var jHtmlBody = $('html, body');
-    function scroll(target, interval)
-    {
-      if ( ! interval)
-        interval = 400;
-
-      target = $('[id="' + target.substring(1) + '"]');
-      
-      var top = 52;
-
-      jHtmlBody.animate({
-        scrollTop: target.offset().top - top
-      }, interval);
-      
-      return true;
-    }
-    
-    if (window.location.hash)
-      scroll(window.location.hash, 1)
-    
-    $('a[href^=#]').click(function(e){
-      e.preventDefault();
-      var hash = $.attr(this, 'href');
-      scroll(hash);
-      window.location.hash = hash;
-    });      
-  
 });
 
 /**


--
PHP Webmaster List Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to