| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244 |
- (function($) {
- var $window = $(window);
- var $document = $(document);
-
- /*
- * Scrollspy.
- */
-
- $document.on('flatdoc:ready', function() {
- $("h2, h3").scrollagent(function(cid, pid, currentElement, previousElement) {
- if (pid) {
- $("[href='#"+pid+"']").removeClass('active');
- }
- if (cid) {
- $("[href='#"+cid+"']").addClass('active');
- }
- });
- });
-
- /*
- * Anchor jump links.
- */
-
- $document.on('flatdoc:ready', function() {
- $('.menu a').anchorjump();
- });
-
- /*
- * Title card.
- */
-
- $(function() {
- var $card = $('.title-card');
- if (!$card.length) return;
-
- var $header = $('.header');
- var headerHeight = $header.length ? $header.outerHeight() : 0;
-
- $window
- .on('resize.title-card', function() {
- var windowWidth = $window.width();
-
- if (windowWidth < 480) {
- $card.css('height', '');
- } else {
- var height = $window.height();
- $card.css('height', height - headerHeight);
- }
- })
- .trigger('resize.title-card');
- });
-
- /*
- * Sidebar stick.
- */
-
- $(function() {
- var $sidebar = $('.menubar');
- var elTop;
-
- $window
- .on('resize.sidestick', function() {
- $sidebar.removeClass('fixed');
- elTop = $sidebar.offset().top;
- $window.trigger('scroll.sidestick');
- })
- .on('scroll.sidestick', function() {
- var scrollY = $window.scrollTop();
- $sidebar.toggleClass('fixed', (scrollY >= elTop));
- })
- .trigger('resize.sidestick');
- });
-
- })(jQuery);
- /*! jQuery.scrollagent (c) 2012, Rico Sta. Cruz. MIT License.
- * https://github.com/rstacruz/jquery-stuff/tree/master/scrollagent */
-
- // Call $(...).scrollagent() with a callback function.
- //
- // The callback will be called everytime the focus changes.
- //
- // Example:
- //
- // $("h2").scrollagent(function(cid, pid, currentElement, previousElement) {
- // if (pid) {
- // $("[href='#"+pid+"']").removeClass('active');
- // }
- // if (cid) {
- // $("[href='#"+cid+"']").addClass('active');
- // }
- // });
-
- (function($) {
-
- $.fn.scrollagent = function(options, callback) {
- // Account for $.scrollspy(function)
- if (typeof callback === 'undefined') {
- callback = options;
- options = {};
- }
-
- var $sections = $(this);
- var $parent = options.parent || $(window);
-
- // Find the top offsets of each section
- var offsets = [];
- $sections.each(function(i) {
- var offset = $(this).attr('data-anchor-offset') ?
- parseInt($(this).attr('data-anchor-offset'), 10) :
- (options.offset || 0);
-
- offsets.push({
- id: $(this).attr('id'),
- index: i,
- el: this,
- offset: offset
- });
- });
-
- // State
- var current = null;
- var height = null;
- var range = null;
-
- // Save the height. Do this only whenever the window is resized so we don't
- // recalculate often.
- $(window).on('resize', function() {
- height = $parent.height();
- range = $(document).height();
- });
-
- // Find the current active section every scroll tick.
- $parent.on('scroll', function() {
- var y = $parent.scrollTop();
- y += height * (0.3 + 0.7 * Math.pow(y/range, 2));
-
- var latest = null;
-
- for (var i in offsets) {
- if (offsets.hasOwnProperty(i)) {
- var offset = offsets[i];
- if ($(offset.el).offset().top + offset.offset < y) latest = offset;
- }
- }
-
- if (latest && (!current || (latest.index !== current.index))) {
- callback.call($sections,
- latest ? latest.id : null,
- current ? current.id : null,
- latest ? latest.el : null,
- current ? current.el : null);
- current = latest;
- }
- });
-
- $(window).trigger('resize');
- $parent.trigger('scroll');
-
- return this;
- };
-
- })(jQuery);
- /*! Anchorjump (c) 2012, Rico Sta. Cruz. MIT License.
- * http://github.com/rstacruz/jquery-stuff/tree/master/anchorjump */
-
- // Makes anchor jumps happen with smooth scrolling.
- //
- // $("#menu a").anchorjump();
- // $("#menu a").anchorjump({ offset: -30 });
- //
- // // Via delegate:
- // $("#menu").anchorjump({ for: 'a', offset: -30 });
- //
- // You may specify a parent. This makes it scroll down to the parent.
- // Great for tabbed views.
- //
- // $('#menu a').anchorjump({ parent: '.anchor' });
- //
- // You can jump to a given area.
- //
- // $.anchorjump('#bank-deposit', options);
-
- (function($) {
- var defaults = {
- 'speed': 500,
- 'offset': 0,
- 'for': null,
- 'parent': null
- };
-
- $.fn.anchorjump = function(options) {
- options = $.extend({}, defaults, options);
-
- if (options['for']) {
- this.on('click', options['for'], onClick);
- } else {
- this.on('click', onClick);
- }
-
- function onClick(e) {
- var $a = $(e.target).closest('a');
- if (e.ctrlKey || e.metaKey || e.altKey || $a.attr('target')) return;
-
- e.preventDefault();
- var href = $a.attr('href');
-
- $.anchorjump(href, options);
- }
- };
-
- // Jump to a given area.
- $.anchorjump = function(href, options) {
- options = $.extend({}, defaults, options);
-
- var top = 0;
-
- if (href != '#') {
- var $area = $(href);
- // Find the parent
- if (options.parent) {
- var $parent = $area.closest(options.parent);
- if ($parent.length) { $area = $parent; }
- }
- if (!$area.length) { return; }
-
- // Determine the pixel offset; use the default if not available
- var offset =
- $area.attr('data-anchor-offset') ?
- parseInt($area.attr('data-anchor-offset'), 10) :
- options.offset;
-
- top = Math.max(0, $area.offset().top + offset);
- }
-
- $('html, body').animate({ scrollTop: top }, options.speed);
- $('body').trigger('anchor', href);
-
- // Add the location hash via pushState.
- if (window.history.pushState) {
- window.history.pushState({ href: href }, "", href);
- }
- };
- })(jQuery);
|