1/* global NexT, CONFIG */ 2 3$(document).ready(function() { 4 5 function initScrollSpy() { 6 var tocSelector = '.post-toc'; 7 var $tocElement = $(tocSelector); 8 var activeCurrentSelector = '.active-current'; 9 10 function removeCurrentActiveClass() { 11 $(tocSelector + ' ' + activeCurrentSelector) 12 .removeClass(activeCurrentSelector.substring(1)); 13 } 14 15 $tocElement 16 .on('activate.bs.scrollspy', function() { 17 var $currentActiveElement = $(tocSelector + ' .active').last(); 18 19 removeCurrentActiveClass(); 20 $currentActiveElement.addClass('active-current'); 21 22 // Scrolling to center active TOC element if TOC content is taller then viewport. 23 $tocElement.scrollTop($currentActiveElement.offset().top - $tocElement.offset().top + $tocElement.scrollTop() - ($tocElement.height() / 2)); 24 }) 25 .on('clear.bs.scrollspy', removeCurrentActiveClass); 26 27 $('body').scrollspy({ target: tocSelector }); 28 } 29 30 initScrollSpy(); 31}); 32 33$(document).ready(function() { 34 var html = $('html'); 35 var TAB_ANIMATE_DURATION = 200; 36 var hasVelocity = $.isFunction(html.velocity); 37 38 $('.sidebar-nav li').on('click', function() { 39 var item = $(this); 40 var activeTabClassName = 'sidebar-nav-active'; 41 var activePanelClassName = 'sidebar-panel-active'; 42 if (item.hasClass(activeTabClassName)) { 43 return; 44 } 45 46 var currentTarget = $('.' + activePanelClassName); 47 var target = $('.' + item.data('target')); 48 49 hasVelocity 50 ? currentTarget.velocity('transition.slideUpOut', TAB_ANIMATE_DURATION, function() { 51 target 52 .velocity('stop') 53 .velocity('transition.slideDownIn', TAB_ANIMATE_DURATION) 54 .addClass(activePanelClassName); 55 }) 56 : currentTarget.animate({ opacity: 0 }, TAB_ANIMATE_DURATION, function() { 57 currentTarget.hide(); 58 target 59 .stop() 60 .css({'opacity': 0, 'display': 'block'}) 61 .animate({ opacity: 1 }, TAB_ANIMATE_DURATION, function() { 62 currentTarget.removeClass(activePanelClassName); 63 target.addClass(activePanelClassName); 64 }); 65 }); 66 67 item.siblings().removeClass(activeTabClassName); 68 item.addClass(activeTabClassName); 69 }); 70 71 // TOC item animation navigate & prevent #item selector in adress bar. 72 $('.post-toc a').on('click', function(e) { 73 e.preventDefault(); 74 var targetSelector = NexT.utils.escapeSelector(this.getAttribute('href')); 75 var offset = $(targetSelector).offset().top; 76 77 hasVelocity 78 ? html.velocity('stop').velocity('scroll', { 79 offset : offset + 'px', 80 mobileHA: false 81 }) 82 : $('html, body').stop().animate({ 83 scrollTop: offset 84 }, 500); 85 }); 86 87 // Expand sidebar on post detail page by default, when post has a toc. 88 var $tocContent = $('.post-toc-content'); 89 var display = CONFIG.page.sidebar; 90 if (typeof display !== 'boolean') { 91 // There's no definition sidebar in the page front-matter 92 var isSidebarCouldDisplay = CONFIG.sidebar.display === 'post' 93 || CONFIG.sidebar.display === 'always'; 94 var hasTOC = $tocContent.length > 0 && $tocContent.html().trim().length > 0; 95 display = isSidebarCouldDisplay && hasTOC; 96 } 97 if (display) { 98 CONFIG.motion.enable 99 ? NexT.motion.middleWares.sidebar = function() { 100 NexT.utils.displaySidebar(); 101 } 102 : NexT.utils.displaySidebar(); 103 } 104});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.