Team:Imperial/Resources/JS:subNav

From 2014.igem.org

Revision as of 10:59, 9 September 2014 by HChughtai (Talk | contribs)

/**

************************************************************
*************** THIS IS THE NAVIGATION CODE ****************
************************************************************
**/

$(document).ready(function () {

   $(window).bind('scroll', function () {
       var navHeight = 200;
       if ($(window).scrollTop() > navHeight) {
           $('#navWrap').addClass('fixed');
       } else {
           $('#navWrap').removeClass('fixed');
       }
   });

});


/**

************************************************************
*** THIS IS THE ADD-IN SMOOTH SCROLLING CODE ***************
*** (see: http://www.dwuser.com/education/content/quick-guide-adding-smooth-scrolling-to-your-webpages/ )
************************************************************
**/


/**

* SmoothScroll
* This helper script created by DWUser.com.  Copyright 2012 DWUser.com.
* Dual-licensed under the GPL and MIT licenses.
* All individual scripts remain property of their copyrighters.
* Date: 10-Sep-2012
* Version: 1.0.1
*/

if (!window['jQuery']) alert('The jQuery library must be included before the smoothscroll.js file. The plugin will not work propery.');

/**

* jQuery.ScrollTo - Easy element scrolling using jQuery.
* Copyright (c) 2007-2012 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* @author Ariel Flesler
* @version 1.4.3.1
*/

(function ($) {

   var h = $.scrollTo = function (a, b, c) {
       $(window).scrollTo(a, b, c)
   };
   h.defaults = {
       axis: 'xy',
       duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1,
       limit: true
   };
   h.window = function (a) {
       return $(window)._scrollable()
   };
   $.fn._scrollable = function () {
       return this.map(function () {
           var a = this,
               isWin = !a.nodeName || $.inArray(a.nodeName.toLowerCase(), ['iframe', '#document', 'html', 'body']) != -1;
           if (!isWin) return a;
           var b = (a.contentWindow || a).document || a.ownerDocument || a;
           return /webkit/i.test(navigator.userAgent) || b.compatMode == 'BackCompat' ? b.body : b.documentElement
       })
   };
   $.fn.scrollTo = function (e, f, g) {
       if (typeof f == 'object') {
           g = f;
           f = 0
       }
       if (typeof g == 'function') g = {
           onAfter: g
       };
       if (e == 'max') e = 9e9;
       g = $.extend({}, h.defaults, g);
       f = f || g.duration;
       g.queue = g.queue && g.axis.length > 1;
       if (g.queue) f /= 2;
       g.offset = both(g.offset);
       g.over = both(g.over);
       return this._scrollable().each(function () {
           if (e == null) return;
           var d = this,
               $elem = $(d),
               targ = e,
               toff, attr = {},
               win = $elem.is('html,body');
           switch (typeof targ) {
           case 'number':
           case 'string':
               if (/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(targ)) {
                   targ = both(targ);
                   break
               }
               targ = $(targ, this);
               if (!targ.length) return;
           case 'object':
               if (targ.is || targ.style) toff = (targ = $(targ)).offset()
           }
           $.each(g.axis.split(), function (i, a) {
               var b = a == 'x' ? 'Left' : 'Top',
                   pos = b.toLowerCase(),
                   key = 'scroll' + b,
                   old = d[key],
                   max = h.max(d, a);
               if (toff) {
                   attr[key] = toff[pos] + (win ? 0 : old - $elem.offset()[pos]);
                   if (g.margin) {
                       attr[key] -= parseInt(targ.css('margin' + b)) || 0;
                       attr[key] -= parseInt(targ.css('border' + b + 'Width')) || 0
                   }
                   attr[key] += g.offset[pos] || 0;
                   if (g.over[pos]) attr[key] += targ[a == 'x' ? 'width' : 'height']() * g.over[pos]
               } else {
                   var c = targ[pos];
                   attr[key] = c.slice && c.slice(-1) == '%' ? parseFloat(c) / 100 * max : c
               } if (g.limit && /^\d+$/.test(attr[key])) attr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max);
               if (!i && g.queue) {
                   if (old != attr[key]) animate(g.onAfterFirst);
                   delete attr[key]
               }
           });
           animate(g.onAfter);
           function animate(a) {
               $elem.animate(attr, f, g.easing, a && function () {
                   a.call(this, e, g)
               })
           }
       }).end()
   };
   h.max = function (a, b) {
       var c = b == 'x' ? 'Width' : 'Height',
           scroll = 'scroll' + c;
       if (!$(a).is('html,body')) return a[scroll] - $(a)[c.toLowerCase()]();
       var d = 'client' + c,
           html = a.ownerDocument.documentElement,
           body = a.ownerDocument.body;
       return Math.max(html[scroll], body[scroll]) - Math.min(html[d], body[d])
   };
   function both(a) {
       return typeof a == 'object' ? a : {
           top: a,
           left: a
       }
   }

})(jQuery);

/**

* jQuery.LocalScroll
* Copyright (c) 2007-2010 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
* Dual licensed under MIT and GPL.
* Date: 05/31/2010
* @author Ariel Flesler
* @version 1.2.8b
**/

(function (b) {

   function g(a, e, d) {
       var h = e.hash.slice(1),
           f = document.getElementById(h) || document.getElementsByName(h)[0];
       if (f) {
           a && a.preventDefault();
           var c = b(d.target);
           if (!(d.lock && c.is(":animated") || d.onBefore && !1 === d.onBefore(a, f, c))) {
               d.stop && c._scrollable().stop(!0);
               if (d.hash) {
                   var a = f.id == h ? "id" : "name",
                       g = b("<a> </a>").attr(a, h).css({
                           position: "absolute",
                           top: b(window).scrollTop(),
                           left: b(window).scrollLeft()
                       });
                   f[a] = "";
                   b("body").prepend(g);
                   location = e.hash;
                   g.remove();
                   f[a] = h
               }
               c.scrollTo(f, d).trigger("notify.serialScroll", [f])
           }
       }
   }
   var i = location.href.replace(/#.*/, ""),
       c = b.localScroll = function (a) {
           b("body").localScroll(a)
       };
   c.defaults = {
       duration: 1E3,
       axis: "y",
       event: "click",
       stop: !0,
       target: window,
       reset: !0
   };
   c.hash = function (a) {
       if (location.hash) {
           a = b.extend({}, c.defaults, a);
           a.hash = !1;
           if (a.reset) {
               var e = a.duration;
               delete a.duration;
               b(a.target).scrollTo(0, a);
               a.duration = e
           }
           g(0, location, a)
       }
   };
   b.fn.localScroll = function (a) {
       function e() {
           return !!this.href && !!this.hash && this.href.replace(this.hash, "") == i && (!a.filter || b(this).is(a.filter))
       }
       a = b.extend({}, c.defaults, a);
       return a.lazy ? this.bind(a.event, function (d) {
           var c = b([d.target, d.target.parentNode]).filter(e)[0];
           c && g(d, c, a)
       }) : this.find("a,area").filter(e).bind(a.event, function (b) {
           g(b, this, a)
       }).end().end()
   }

})(jQuery);

// Initialize all .smoothScroll links jQuery(function ($) {

   $.localScroll({
       filter: '.smoothScroll'
   });

});