/* jshint jquery: true */ /* global FingerBlast: true */ $(function () { 'use strict'; var doc; var device; var windowWidth; var windowHeight; var pageHeight; var contentPadding; var footerHeight; var navComponentLinks; var componentsList; var componentLinks; var contentSection; var currentActive; var topCache; var win; var bod; var eventListeners; var toolbarToggle; var initialize = function () { currentActive = 0; topCache = []; win = $(window); doc = $(document); bod = $(document.body); device = device || $('.js-device'); navComponentLinks = $('.js-jump-menu'); componentsList = $('.js-component-group'); componentLinks = $('.component-example a'); contentSection = $('.component'); topCache = contentSection.map(function () { return $(this).offset().top; }); windowHeight = $(window).height() / 3; windowWidth = $(window).width(); pageHeight = $(document).height(); contentPadding = parseInt($('.docs-content').css('padding-bottom'), 10); footerHeight = $('.docs-footer').outerHeight(false); toolbarToggle = $('.js-docs-component-toolbar'); // Device placement if (windowWidth >= 768 && device.offset()) { device.initialLeft = device.offset().left; device.initialTop = device.initialTop || device.offset().top; device.dockingOffset = ($(window).height() - device.height()) / 2; } checkDesktopContent(); calculateScroll(); calculateToggle(); if (!eventListeners) { addEventListeners(); } }; var addEventListeners = function () { eventListeners = true; device.on('click', function (e) { e.preventDefault(); }); // Mobile navigation $('.js-docs-nav-trigger').on('click', function () { var nav = $('.docs-nav-group'); var trigger = $('.js-docs-nav-trigger'); trigger.toggleClass('active'); nav.toggleClass('active'); }); navComponentLinks.click(function (e) { e.stopPropagation(); e.preventDefault(); componentsList.toggleClass('active'); }); doc.on('click', function () { componentsList.removeClass('active'); }); // Platform switcher $('.platform-switch').on('click', function () { var components = $('.docs-components'); var platform = $(this).attr('data-platform'); // Set platform if (components.hasClass('platform-ios')) { components.removeClass('platform-ios'); components.addClass(platform); } else if (components.hasClass('platform-android')) { components.removeClass('platform-android'); components.addClass(platform); } else { components.addClass(platform); } // Deal with active states $(this).siblings('.active').removeClass('active'); $(this).addClass('active'); }); win.on('scroll', calculateScroll); win.on('scroll', calculateToggle); }; var checkDesktopContent = function () { windowWidth = $(window).width(); if (windowWidth <= 768) { var content = $('.content'); if (content.length > 1) { $(content[0]).remove(); } } }; var calculateScroll = function () { // if small screen don't worry about this if (windowWidth <= 768) { return; } // Save scrollTop value var contentSectionItem; var currentTop = win.scrollTop(); // exit if no device if (!device.length) { return; } if ((device.initialTop - currentTop) <= device.dockingOffset) { device[0].className = 'device device-fixed'; device.css({ top: device.dockingOffset }); } else { device[0].className = 'device'; device[0].setAttribute('style', ''); } function updateContent(content) { $('#iwindow').html(content); } // Injection of components into device for (var l = contentSection.length; l--;) { if ((topCache[l] - currentTop) < windowHeight) { if (currentActive === l) { return; } currentActive = l; bod.find('.component.active').removeClass('active'); contentSectionItem = $(contentSection[l]); contentSectionItem.addClass('active'); if (contentSectionItem.attr('id')) { device.attr('id', contentSectionItem.attr('id') + 'InDevice'); } else { device.attr('id', ''); } if (!contentSectionItem.hasClass('informational')) { updateContent(contentSectionItem.find('.highlight .language-html').text()); } break; } } }; // Toolbar toggle var calculateToggle = function () { var currentTop = win.scrollTop(); var headerHeight = $('.docs-sub-header').outerHeight(); if (currentTop >= headerHeight) { toolbarToggle.addClass('visible'); } else if (currentTop <= headerHeight) { toolbarToggle.removeClass('visible'); componentsList.removeClass('active'); } }; $(window).on('load resize', initialize); $(window).on('load', function () { window.FingerBlast && (new FingerBlast('.device-content')); }); });