{"version":3,"sources":["floating_toc.js"],"names":["$","document","body","on","event","addClass","$toc_block","this","find","prependTo","debounceTimer","fnToCToggle","state","toggleClass","clearTimeout","attr","setTimeout","focus","removeClass","$toc_toggle","text","aria-expanded","fnToCButtonToggle","hasClass","lu_hideModal","lu_showModal","stopPropagation","parents","aria-labelledby","role","breakpoint_bottom_menu_flip","has_ever_scrolled","show_toc","belowBottom","lu_isBP","jQuery"],"mappings":"AAGA,cAEA,SAAUA,GACRA,EAAEC,SAASC,MAAMC,GAAG,eAAgB,sBAAuB,SAASC,GAGlEJ,EAAEC,SAASC,MAAMG,SAAS,UAE1B,IAAIC,GAAaN,EAAEO,MAAMC,KAAK,gBAE9BR,GAAE,oCAAoCS,UAAUH,EAGhD,IAAII,GAAgB,KAChBC,EAAc,SAASC,GACzBN,EAAWO,YAAY,YAAaD,GAEhCF,GACFI,aAAaJ,GAEXE,GACFN,EAAWD,SAAS,iBACjBU,KAAK,WAAY,KACpBC,WAAW,WAAaV,EAAWW,SAAY,OAG/CX,EAAWS,KAAK,WAAY,MAE5BL,EAAgBM,WAAW,WAAaV,EAAWY,YAAY,kBAAqB,MAEtFZ,EAAWO,YAAY,cAAeD,GACtCO,EACGC,KAAKR,EAAQ,aAAe,gBAC5BG,MACCM,kBAAmBT,KAGrBU,EAAoB,SAASlB,GAE1BE,EAAWiB,SAAS,aAIvBC,aAAa,YAHbC,aAAa,WAAYnB,EAAYK,EAAaP,GAKpDA,EAAMsB,mBAKJP,EAAcnB,EAAE,wGACjBG,GAAG,QAASmB,GACZb,UAAUH,EAAWqB,QAAQ,uBACT3B,GAAE,4OACtBG,GAAG,QAAS,WAAaqB,aAAa,cACtCf,UAAUH,EAGbA,GAAWE,KAAK,yBAAyBO,MACvCa,kBAAmB,aACnBC,KAAQ,UAIV,IAAIC,GAA8B,SAC9BC,GAAoB,CACxB/B,GAAE,kCACCG,GAAG,cAAe,SAAUC,GAC3B,GAAI4B,KAAa5B,EAAM6B,cAAgBC,QAAQJ,EAC/C9B,GAAEO,MAAMM,YAAY,WAAYmB,GAC3BA,GAEHhB,WAAW,WACTQ,aAAa,aACZ,GAEDQ,IAAaD,IACf/B,EAAEO,MAAMF,SAAS,qBACjB0B,GAAoB,KAKvB5B,GAAG,QAAS,IAAK,WACX+B,QAAQJ,IACXN,aAAa,cAKnBb,GAAY,MAEbwB","file":"../floating_toc.js","sourcesContent":["/**\n * Floating ToC enhancements.\n */\n\"use strict\";\n\n(function($) {\n $(document.body).on('generatedToC', '.block-floating-toc', function(event) {\n // This script exists, the ToC has been generated, so add a class alerting\n // CSS that we have a ToC present on this page.\n $(document.body).addClass('has-toc');\n\n var $toc_block = $(this).find('.floating_toc');\n\n $('

On This Page

').prependTo($toc_block);\n\n // Add a toggle button.\n var debounceTimer = null;\n var fnToCToggle = function(state) {\n $toc_block.toggleClass('toc-shown', state);\n // Fix animations so slide-out doesn't actually animate on first display.\n if (debounceTimer) {\n clearTimeout(debounceTimer);\n }\n if (state) {\n $toc_block.addClass('toc-was-shown')\n .attr('tabindex', '0');\n setTimeout(function() { $toc_block.focus(); }, 100);\n }\n else {\n $toc_block.attr('tabindex', null);\n // Roughly match the ms delay here to the $duration value in SCSS.\n debounceTimer = setTimeout(function() { $toc_block.removeClass('toc-was-shown'); }, 350);\n }\n $toc_block.toggleClass('toc-hidden', !state);\n $toc_toggle\n .text(state ? 'Close Menu' : 'On This Page')\n .attr({\n \"aria-expanded\": !!state\n });\n };\n var fnToCButtonToggle = function(event) {\n // Register this modal, so it can be closed by other modals.\n if (!$toc_block.hasClass('toc-shown')) {\n lu_showModal('toc-menu', $toc_block, fnToCToggle, event);\n }\n else {\n lu_hideModal('toc-menu');\n }\n event.stopPropagation();\n };\n\n // Attach our open/close button.\n // Adding 'on-this-page' class to enable not hiding the button on mobile per Ken's request, see _floating_toc.scss line 78\n var $toc_toggle = $('')\n .on('click', function() { lu_hideModal('toc-menu'); })\n .prependTo($toc_block);\n\n // Connect the button to the widget via ARIA attributes.\n $toc_block.find('.floating-toc-wrapper').attr({\n \"aria-labelledby\": \"toc-toggle\",\n \"role\": \"region\"\n });\n\n // Hook the new-third event, which signifies a change in scroll status.\n var breakpoint_bottom_menu_flip = 'medium';\n var has_ever_scrolled = false;\n $('#block-floatingtableofcontents')\n .on('scroll-move', function (event) {\n var show_toc = !!event.belowBottom || !lu_isBP(breakpoint_bottom_menu_flip);\n $(this).toggleClass('scrolled', show_toc);\n if (!show_toc) {\n // Ensure we close up any open drawers.\n setTimeout(function () {\n lu_hideModal('toc-menu');\n }, 0);\n }\n if (show_toc && !has_ever_scrolled) {\n $(this).addClass('has-ever-scrolled');\n has_ever_scrolled = true;\n }\n })\n // If (with a full-screen ToC panel) the user clicks a link, close the\n // ToC overlay so that they can see the results of their click.\n .on('click', 'a', function() {\n if (!lu_isBP(breakpoint_bottom_menu_flip)) {\n lu_hideModal('toc-menu');\n }\n });\n // $('

On This Page

').prependTo($toc_block);\n // Set everything up for a hidden menu.\n fnToCToggle(false);\n });\n})(jQuery);\n"]}