{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./template.js","webpack:///./js/adapter/adapter.js","webpack:///./js/core/core.js","webpack:///./js/navigator/navigator.js","webpack:///./js/cookiebar/cookiebar.js","webpack:///./js/scroll-smooth/scroll-smooth.js","webpack:///./js/anime/anime.js","webpack:///./js/tocbot/tocbot.js","webpack:///(webpack)/buildin/global.js","webpack:///./js/tocbot/default-options.js","webpack:///./js/tocbot/build-html.js","webpack:///./js/tocbot/parse-content.js","webpack:///./js/tocbot/update-toc-scroll.js","webpack:///./js/tocbot/scroll-smooth/index.js","webpack:///./js/adoc_result_viewer/view_results.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","j1","adapter","require","core","navigator","cookiebar","scrollSmooth","anime","_init_","options","$","extend","foo","bar","getState","isMobile","ua_name","a","mobile","userAgent","vendor","opera","test","substr","bsFormClearButton","on","this","val","length","nextAll","removeClass","addClass","logger","logText","cookie_names","getCookieNames","message","cookie_consent","user_session","init","defaultOptions","menuOptions","log4javascript","getLogger","info","manageDropdownMenu","navbarSticky","type","action","text","sendMessage","eventHandler","$getNav","hasClass","wrap","postsArr","Array","index","$postsList","find","each","push","html","firstList","splice","Math","round","secondList","ListHTML","createHTML","list","first","after","next","last","dropDown","megaMenu","closest","prepend","navbarHeighth","outerHeight","scrollTop","debug","e","animate","slideToggle","is","preventDefault","unbind","slideUp","stopPropagation","toggle","css","wrapInner","$menu","breakPoint","$dropDown","timeoutHandle","navDefaultOptions","navMenuOptions","$getWindow","matchMedia","matches","width","$getIn","data","$getOut","menuSelector","xhr_container_id","delayMenuOpen","delay_menu_open","nav_bar","media_breakpoint","off","stop","fadeToggle","fadeOut","hide","show","hover","$list","height","match","eq","setTimeout","fadeIn","clearTimeout","windowHeight","windowWidth","getId","$getHeight","getOffset","offset","top","updateSidebar","user_data","json_message","JSON","stringify","resolveMacros","updateMacros","jQuery","moduleOptions","cookie_user_state","user_state","moduleDefaults","renewOnVisit","forceShow","domain","String","location","hostname","referrer","document","dependencies_met_page_ready","setInterval","user_state_detected","existsCookie","readCookie","error","cookies_accepted","modal","clearInterval","current_page","pathname","modalButtons","querySelectorAll","whitelistedPages","appDetected","deleteOnDecline","stopScrolling","whitelisted","forEach","button","addEventListener","id","toggleClass","writeCookie","expires","current_user_data","mergeData","indexOf","warn","deleteCookie","goHome","scroll","target","duration","scrollTo","callback","timeStart","timeElapsed","$pagehead","$navbar","$adblock","navbarType","fontSize","replace","start","pageYOffset","parseInt","h","opt","easing","b","tgt","querySelector","decodeURI","split","join","distance","getBoundingClientRect","documentElement","body","loop","time","requestAnimationFrame","defaultInstanceSettings","update","begin","loopBegin","changeBegin","change","changeComplete","loopComplete","complete","direction","autoplay","timelineOffset","defaultTweenSettings","delay","endDelay","validTransforms","cache","CSS","springs","minMax","min","max","stringContains","str","applyArguments","func","args","apply","arr","isArray","obj","toString","pth","svg","SVGElement","inp","HTMLInputElement","dom","nodeType","fnc","und","hex","rgb","hsl","col","parseEasingParameters","string","exec","map","parseFloat","spring","params","mass","stiffness","damping","velocity","w0","sqrt","zeta","wd","solver","progress","exp","cos","sin","cached","elapsed","rest","steps","ceil","eases","functionEasings","bezier","A","aA1","aA2","B","C","calcBezier","aT","getSlope","mX1","mY1","mX2","mY2","sampleValues","Float32Array","x","getTForX","aX","intervalStart","currentSample","kSplineTableSize","guessForT","initialSlope","aGuessT","currentSlope","newtonRaphsonIterate","aA","aB","currentX","currentT","abs","binarySubdivide","penner","linear","Sine","PI","Circ","Back","Bounce","pow2","pow","Elastic","amplitude","period","asin","keys","easeIn","parseEasings","ease","selectString","filterArray","len","thisArg","arguments","result","flattenArray","reduce","concat","toArray","NodeList","HTMLCollection","slice","arrayContains","some","cloneObject","clone","replaceObjectProps","o1","o2","mergeObjects","colorToRgb","rgbValue","hexValue","g","hexToRgba","hslValue","hue2rgb","q","hslToRgba","getUnit","getFunctionValue","animatable","total","getAttribute","el","prop","convertPxToUnit","unit","tempEl","createElement","tagName","parentEl","parentNode","appendChild","style","position","factor","offsetWidth","removeChild","convertedUnit","getCSSValue","uppercasePropName","toLowerCase","getComputedStyle","getPropertyValue","getAnimationType","getElementTransforms","transform","reg","transforms","Map","set","getTransformValue","propName","defaultVal","getTransformUnit","getOriginalTargetValue","getRelativeValue","to","from","operator","u","y","validateValue","originalUnit","unitLess","getDistance","p1","p2","getPolylineLength","previousPos","points","totalLength","numberOfItems","currentPos","getItem","getTotalLength","getCircleLength","getRectLength","getLineLength","getPolygonLength","getParentSvg","pathEl","svgData","parentSvgEl","getParentSvgEl","rect","viewBoxAttr","viewBox","w","getPathProgress","path","point","getPointAtLength","p0","atan2","decomposeValue","rgx","original","numbers","Number","strings","parseTargets","targets","item","pos","self","getAnimatables","parsed","normalizePropertyTweens","tweenSettings","settings","propArray","v","k","getProperties","properties","keyframes","propertyNames","newKey","flattenKeyframes","tweens","normalizeTweens","previousTween","tween","normalizeTweenValues","tweenValue","toUnit","originalValue","previousValue","fromUnit","end","isPath","isColor","setProgressValue","attribute","setAttribute","manual","setTargetsValue","valueUnit","animType","getAnimations","animatables","lastTween","createAnimation","getInstanceTimings","animations","animLength","getTlOffset","anim","timings","instanceID","raf","activeInstances","pausedInstances","engine","play","step","activeInstancesLength","activeInstance","paused","instanceIndex","tick","cancelAnimationFrame","children","startTime","lastTime","now","childrenLength","resolve","makePromise","instance","promise","Promise","_resolve","finished","instanceSettings","createNewInstance","toggleInstanceDirection","reversed","child","adjustTime","resetTime","currentTime","speed","seekChild","seek","setAnimationsProgress","insTime","animationsLength","tweenLength","eased","isNaN","toNumbersLength","toNumber","fromNumber","stringsLength","n$1","currentValue","setCallback","cb","passThrough","setInstanceProgress","engineTime","insDuration","insDelay","insEndDelay","reversePlayback","i$1","syncInstanceChildren","began","loopBegan","changeBegan","changeCompleted","remaining","completed","reset","pause","reverse","restart","removeTargetsFromAnimations","targetsArray","hidden","ins","running","version","remove","childAnimations","convertPx","percent","setDashoffset","pathLength","stagger","grid","axis","fromIndex","fromFirst","fromCenter","fromLast","isRange","val1","val2","values","maxValue","fromX","fromY","floor","distanceX","distanceY","timeline","tl","add","instanceParams","tlIndex","insParams","tlDuration","random","root","global","define","buildHtml","parseContent","headingsArray","tocbot","BuildHtml","ParseContent","updateTocScroll","supports","destroy","skipRendering","tocSelector","innerHTML","console","scrollContainer","removeEventListener","_scrollListener","_clickListener","customOptions","source","state","scrollSmoothDuration","scrollSmoothOffset","initSmoothScrolling","_buildHtml","_parseContent","selectHeadings","contentSelector","headingSelector","nestedHeadings","nestHeadingsArray","nest","render","throttle","updateToc","disableTocScrollSync","isTop","scrollingElement","eventPhase","currentTarget","scrollEndCallback","throttleTimeout","timeout","event","disableTocAnimation","enableTocAnimation","refresh","fn","threshold","scope","deferTimer","context","Date","Function","ignoreSelector","hasInnerContainers","linkClass","extraLinkClasses","activeLinkClass","listClass","extraListClasses","isCollapsedClass","collapsibleClass","listItemClass","activeListItemClass","collapseDepth","headingsOffset","positionFixedSelector","positionFixedClass","fixedSidebarOffset","includeHtml","onClick","orderedList","headingLabelCallback","ignoreHiddenElements","headingObjectCallback","basePath","currentlyHighlighting","createEl","container","link","onclick","childNodes","node","cloneNode","textContent","nodeName","createLink","createList","isCollapsed","listElement","classes","srcElement","className","selector","parent","firstChild","posFixedEl","offsetTop","updateFixedSidebarClass","topHeader","headings","heading","getHeadingTopPos","offsetParent","tocLinks","tocLink","tocLis","tocLi","activeTocLink","li","tocLists","nextSibling","removeCollapsedFromParents","element","getLastItem","array","getHeadingLevel","getHeadingObject","HTMLElement","offsetHeight","headingLevel","trim","prev","curr","currentHeading","level","lastItem","counter","undefined","addNode","selectors","toc","scrollHeight","clientHeight","activeItem","pageUrl","hash","stripHash","href","url","lastIndexOf","charAt","jump","getElementById","substring","tabIndex","focus","idx","result_block","title_div","view_result_link","append","toggle_result_block"],"mappings":"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","file":"template.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/assets/themes/j1/core/js\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","/*\n # -----------------------------------------------------------------------------\n # ~/src/template.js\n # J1 Template Javascript Core library\n #\n # Product/Info:\n # https://jekyll.one\n #\n # Copyright (C) 2020 Juergen Adams\n #\n # J1 Template is licensed under the MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n #\n # -----------------------------------------------------------------------------\n*/\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint-disable no-unused-vars */\n/* global window */\n\n// -----------------------------------------------------------------------------\n// Import SASS sources for HMR\n// -----------------------------------------------------------------------------\n// import '../100_template_css/scss/theme_uno/components/_footer.scss';\n// import '../100_template_css/theme_uno.css'; // <-- yes, also require (s)css. This is a Webpack thing\n\n// Core Libraries - imported|required from NODE|NPM modules\n// -----------------------------------------------------------------------------\n//\n// Following objects (framework modules) are *conditionaly* forced to be\n// exposed for run-time to the global namespace (window) by WP config\n// file (expose-loader):\n// jQuery\n// Popper ('popper.js/dist/umd/popper', https://github.com/twbs/bootstrap/issues/23381)\n// -----------------------------------------------------------------------------\n\n// Core Utilities (moved to modules)\n// -----------------------------------------------------------------------------\n// Following objects (native node modules) are *explicitely* forced to be\n// exposed for run-time to the global namespace (window).\n// -----------------------------------------------------------------------------\n// window.Cookies = require('js-cookie');\n// window.log4javascript = require('log4javascript');\n// window.parseURL = require('lite-url');\n// window.platform = require('platform');\n// window.yaml = require('js-yaml');\n// window.uuid = require('uuid/v4');\n\n// Core Libraries - build|required from SOURCE\n// -----------------------------------------------------------------------------\n\n// Following source objects|modules are *explicitely* forced to be\n// exposed for run-time to the global namespace (window).\n// -----------------------------------------------------------------------------\nwindow.j1.adapter = require('./js/adapter/adapter.js');\nwindow.j1.core = require('./js/core/core.js');\nwindow.j1.core.navigator = require('./js/navigator/navigator.js');\nwindow.j1.core.cookiebar = require('./js/cookiebar/cookiebar.js');\nwindow.j1.core.scrollSmooth = require('./js/scroll-smooth/scroll-smooth.js');\nwindow.j1.anime = require('./js/anime/anime.js'); // added for fam\n// window.j1.fam = require('./js/fam/fam.js'); // cannot used until NOT rewritten to jQuery\n\n// Following source objects|modules are *implicetly* forced to be\n// exposed for run-time to the global namespace (window).\n// -----------------------------------------------------------------------------\n//const Bootstrap = require('./js/bootstrap/bootstrap.js');\n//const J1JekyllSearch = require('./js/jekyll_search/jekyll_search.js');\nconst J1Tocbot = require('./js/tocbot/tocbot.js');\n//const J1ThemeSwitcher = require('./js/bs_theme_switcher/switcher.js');\n// const J1MmenuLight = require('./js/mmenu-light/mmenu.js');\n\n// Passing log data over Internet|SeeMe (currently NOT used)\n// -----------------------------------------------------------------------------\n// window.j1.core.log4javascript = require('./js/logger/client/webhook.js');\n\n// BMD Libraries (moved to modules)\n// -----------------------------------------------------------------------------\n// window.bootstrapMaterialDesign = require('./js/bmd/js/bmd.js');\n\n// Github Webhooks (currently NOT used)\n// -----------------------------------------------------------------------------\n// window.j1.core.webhooks = require('./js/webhooks/octokit/client.js');\n\n\n// Test|Custom modules (currently NOT used)\n// -----------------------------------------------------------------------------\n// window.j1promiseTest = require('./js/custom/test_promises.js');\n// window.j1Example = require('./js/custom/example_module.js');\n\n// BS Libraries (moved to modules)\n// -----------------------------------------------------------------------------\n// Following source objects|modules are *implicetly* forced to be\n// exposed for run-time to the global namespace (window).\n// -----------------------------------------------------------------------------\n// const Bootstrap = require('./js/bootstrap/bootstrap.js');\n\n// const J1JekyllSearch = require('./js/jekyll_search/jekyll_search.js'); // Buffer Kack\n// const J1Tocbot = require('./js/tocbot/tocbot.js');\n\n// Backstretch (moved to modules)\n// -----------------------------------------------------------------------------\n// Following source objects|modules are *implicetly* forced to be\n// exposed for run-time to the namespace of jQuery ($).\n// -----------------------------------------------------------------------------\n// const J1Attics = require('./js/backstretch/backstretch.js');\n\n// Additional Vanilla JS helpers\n// -----------------------------------------------------------------------------\nconst J1AdocResultViewer = require('./js/adoc_result_viewer/view_results.js');\n// const MSIEPolyfills = require('./js/polyfills/ms-ie.js');\n\n// HMR messages (currently NOT used)\n// -----------------------------------------------------------------------------\n// if (module.hot) {\n// var logtext;\n// var stat;\n// var stat=module.hot.status();\n//\n// logtext='[INFO ] [HMR ] [Hot Module Replacement enabled]';\n// console.log(logtext);\n// logtext='[INFO ] [HMR ] [Status: ' + stat + ']';\n// console.log(logtext);\n//\n// module.hot.accept('./template.js', function() {\n// console.log('[HMR] Accepting the updated template.js module!');\n// });\n//\n// module.hot.accept('../100_template_css/theme_uno.scss', function () {\n// console.log('[HMR] Accepting the updated style.css module!');\n// require('../100_template_css/theme_uno.scss')\n// })\n//\n// React to the current status...\n// module.hot.addStatusHandler(status => {\n// stat=module.hot.status();\n// logtext='[INFO ] [HMR ] [Status: ' + stat + ']';\n// console.log(logtext);\n// });\n//}\n\n// -----------------------------------------------------------------------------\n// END\n","/*\n # -----------------------------------------------------------------------------\n # ~/js/adapter/adapter.js\n # Provides an empty object for later loaded adapter objects\n #\n # Product/Info:\n # https://jekyll.one\n #\n # Copyright (C) 2020 Juergen Adams\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n # -----------------------------------------------------------------------------\n*/\n'use strict';\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/* eslint no-undef: \"off\" */\n// -----------------------------------------------------------------------------\n\n/*!\n * J1 Adapter\n * Copyright (C) 2020 Juergen Adams\n * Licensed under MIT License.\n */\nmodule.exports = (function ( j1, window ) {\n return {\n\n // -------------------------------------------------------------------------\n // _init_\n // Global initializer for the adapter object\n // -------------------------------------------------------------------------\n _init_: function () {\n return;\n } // END _init_\n\n }; // END return\n\n})( j1, window );\n","/*\n # -----------------------------------------------------------------------------\n # ~/js/j1_template/core.js\n # Provides an empty object for later loaded core objects\n #\n # Product/Info:\n # https://jekyll.one\n # http://getbootstrap.com/\n #\n # Copyright (C) 2020 Juergen Adams\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n # -----------------------------------------------------------------------------\n*/\n'use strict';\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/* eslint no-undef: \"off\" */\n// -----------------------------------------------------------------------------\n\n// module.exports = function core ( options ) {\n/*!\n * J1 Core\n * Copyright (C) 2020 Juergen Adams\n * Licensed under MIT License.\n */\nmodule.exports = (function (options) {\n\n // ---------------------------------------------------------------------------\n // Global variables\n // ---------------------------------------------------------------------------\n // var messageCatalog = {};\n // var state;\n // var logger;\n // var logText;\n\n // ---------------------------------------------------------------------------\n // Default settings\n // ---------------------------------------------------------------------------\n var settings = $.extend({\n foo: 'foo_option',\n bar: 'bar_option'\n }, options );\n\n var state = 'loaded';\n\n return {\n\n // -------------------------------------------------------------------------\n // _init_\n // Global initializer for the core object\n // -------------------------------------------------------------------------\n _init_: function (options) {\n\n //\n // Place handling of options here\n //\n\n return;\n }, // END _init_\n\n // -------------------------------------------------------------------------\n // Returns the current (processing) state of the module\n // -------------------------------------------------------------------------\n getState: function () {\n return state;\n }, // END state\n\n // -------------------------------------------------------------------------\n // isMobile\n // Return true if the current platform is a mobile device\n // -------------------------------------------------------------------------\n isMobile: function (ua_name) {\n var mobile = false;\n (function(a){if(/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i.test(a.substr(0,4))) mobile = true;})(navigator.userAgent||navigator.vendor||window.opera);\n return mobile;\n }, // END isMobile\n\n // -------------------------------------------------------------------------\n // Clear button for input fields (forms)\n // -------------------------------------------------------------------------\n bsFormClearButton: function () {\n// $('.position-relative :input').on('keydown focus', function() {\n $(':input').on('keydown focus change mouseover', function() {\n if ($(this).val().length > 0) {\n $(this).nextAll('.form-clear').removeClass('d-none');\n }\n }).on('keydown keyup blur', function() {\n if ($(this).val().length === 0) {\n $(this).nextAll('.form-clear').addClass('d-none');\n }\n });\n\n // $('.form-clear').on('click', function() {\n // $(this).addClass('d-none').prevAll(':input').val('');\n // // hide|clear results from top search\n // $('#search-results').hide();\n // $('#search-results').html('');\n // });\n }\n\n }; // end return (object)\n\n//})( jQuery, window );\n})(); // END IFFE\n","/*\n # -----------------------------------------------------------------------------\n # ~/js/navigator/navigator.js\n # Provides all JavaScript core functions for J1 Navigator\n #\n # Product/Info:\n # https://jekyll.one\n # https://github.com/adamnurdin01/navigator\n #\n # Copyright (C) 2020 Juergen Adams\n # Copyright (C) 2016 adamnurdin01\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n # Bootsnav is licensed under MIT License.\n # See: https://github.com/adamnurdin01/navigator\n #\n # -----------------------------------------------------------------------------\n # NOTE:\n # jadams, 2020-06-21:\n # J1 Navigator needs a general revision on BS4 code and functionalities\n # Current, only base function are tested with BS4 (was coded for BS3)\n # -----------------------------------------------------------------------------\n*/\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/* eslint no-undef: \"off\" */\n// -----------------------------------------------------------------------------\n\n// -----------------------------------------------------------------------------\n// TODO: Height of dropdowns are to be limited in general\n\n// -----------------------------------------------------------------------------\n// Navigator core registered as 'j1.core.navigator'\n// -----------------------------------------------------------------------------\n\n/*!\n * J1 Navigator\n * Copyright (C) 2020 Juergen Adams\n * Licensed under MIT License.\n */\nmodule.exports = function navigator ( options ) {\n\n // ---------------------------------------------------------------------------\n // global vars\n // ---------------------------------------------------------------------------\n var cookie_names = j1.getCookieNames();\n var cookie_consent_name = cookie_names.cookie_consent;\n var cookie_user_session_name = cookie_names.user_session;\n var message = {};\n var state;\n var logger;\n var logText;\n\n // -----------------------------------------------------------------------\n // default settings\n // -----------------------------------------------------------------------\n var settings = $.extend ({\n foo: 'bar',\n bar: 'foo',\n }, options );\n\n // ---------------------------------------------------------------------------\n // main object\n // ---------------------------------------------------------------------------\n return {\n\n // -------------------------------------------------------------------------\n // module initializer\n // -------------------------------------------------------------------------\n init: function( defaultOptions, menuOptions ) {\n logger = log4javascript.getLogger('j1.core.navigator');\n logText = 'core is being initialized';\n\n logger.info(logText);\n this.manageDropdownMenu(defaultOptions, menuOptions);\n this.navbarSticky();\n // this.navbarScrollspy();\n\n message.type = 'command';\n message.action = 'module_initialized';\n message.text = 'navigator core initialized successfully';\n j1.sendMessage( 'j1.core.navigator', 'j1.adapter.navigator', message );\n\n return true;\n },\n\n // -------------------------------------------------------------------------\n // event handler\n // -------------------------------------------------------------------------\n eventHandler: function() {\n var logger = log4javascript.getLogger('j1.core.navigator.eventHandler');\n var $getNav = $('nav.navbar.navigator');\n // const seeMe = 'https://smee.io/wlNIFNiJN0GClm2';\n // const middleware = 'localhost:5000/state';\n // const web_server_dev = 'http://localhost:41000/status';\n // const utility_server = 'http://localhost:41001/git?request=pull';\n // var sender = seeMe;\n // var payload;\n var json_data;\n\n // if (j1.checkUserAgent('IE') || j1.checkUserAgent('Edge')) {\n // logger.warn('HTML5 server side events (SSE) not supported for: ' + userAgent);\n // logger.warn('Middleware messages disabled');\n // } else {\n // const middleware_status = new EventSource(sender);\n //\n // // -----------------------------------------------------------------------\n // // middleware event handler ( SSE currently NOT used)\n // // -----------------------------------------------------------------------\n // middleware_status.onmessage = (event) => {\n // const payload = JSON.parse(event.data);\n //\n // logger.debug('middleware: event received');\n //\n // json_data = JSON.stringify(payload, undefined, 2);\n // logText = 'payload: ' + json_data;\n // logger.debug(logText);\n //\n // message.type = 'command';\n // message.action = 'status';\n // message.text = payload;\n // j1.sendMessage( 'j1.core.navigator', 'j1.adapter.navigator', message );\n //\n // return true;\n // }; // END event onMessage\n // }\n\n // -----------------------------------------------------------------------\n // Navbar Sticky\n // -----------------------------------------------------------------------\n var navSticky = $getNav.hasClass('navbar-sticky');\n if( navSticky ){\n // Wraped navigation\n $getNav.wrap('
');\n }\n\n // -----------------------------------------------------------------------\n // Navbar Center\n // -----------------------------------------------------------------------\n if( $getNav.hasClass('brand-center') ){\n var postsArr = new Array();\n var index = $('nav.brand-center');\n var $postsList = index.find('ul.navbar-nav');\n\n //Create array of all posts in lists\n index.find('ul.navbar-nav > li').each(function(){\n postsArr.push($(this).html());\n });\n\n // Split the array at this point. The original array is altered.\n var firstList = postsArr.splice(0, Math.round(postsArr.length / 2));\n var secondList = postsArr;\n var ListHTML = '';\n\n var createHTML = function(list) {\n ListHTML = '';\n for (var i = 0; i < list.length; i++) {\n ListHTML += '
  • ' + list[i] + '
  • ';\n }\n };\n\n // Generate HTML for first list\n createHTML(firstList);\n $postsList.html(ListHTML);\n index.find('ul.nav').first().addClass('navbar-left');\n\n // Generate HTML for second list\n createHTML(secondList);\n //Create new list after original one\n $postsList.after('').next().html(ListHTML);\n index.find('ul.nav').last().addClass('navbar-right');\n\n // Wrap navigation menu\n index.find('ul.nav.navbar-left').wrap('
    ');\n index.find('ul.nav.navbar-right').wrap('
    ');\n\n // Selection Class\n index.find('ul.navbar-nav > li').each(function() {\n var dropDown = $('ul.dropdown-menu', this),\n megaMenu = $('ul.megamenu-content', this);\n dropDown.closest('li').addClass('dropdown');\n megaMenu.closest('li').addClass('megamenu-fw');\n });\n }\n\n // -----------------------------------------------------------------------\n // Navbar Sidebar\n // -----------------------------------------------------------------------\n // if( $getNav.hasClass('navbar-sidebar')) {\n // // Add Class to body\n // $('body').addClass('wrap-nav-sidebar');\n // $getNav.wrapInner('
    ');\n // } else {\n // $('.navigator').addClass('on');\n // }\n\n // -----------------------------------------------------------------------\n // Menu Center\n // -----------------------------------------------------------------------\n if( $getNav.find('ul.nav').hasClass('navbar-center')) {\n $getNav.addClass('menu-center');\n }\n\n // -----------------------------------------------------------------------\n // Navbar Full\n // -----------------------------------------------------------------------\n if( $getNav.hasClass('navbar-full')) {\n // Add Class to body\n $('nav.navbar.navigator').find('ul.nav').wrap('
    ');\n $('.wrap-full-menu').wrap('
    ');\n $('ul.nav.navbar-nav').prepend('
  • ');\n } else if( $getNav.hasClass('navbar-mobile') ) {\n $getNav.removeClass('no-full');\n } else {\n $getNav.addClass('no-full');\n }\n\n // -----------------------------------------------------------------------\n // Navbar Mobile\n // -----------------------------------------------------------------------\n // if( $getNav.hasClass('navbar-mobile')) {\n // // Add Class to body\n // $('.navbar-collapse').on('shown.bs.collapse', function() {\n // $('body').addClass('side-right');\n // });\n // $('.navbar-collapse').on('hide.bs.collapse', function() {\n // $('body').removeClass('side-right');\n // });\n //\n // $(window).on('resize', function() {\n // $('body').removeClass('side-right');\n // });\n // }\n\n // -----------------------------------------------------------------------\n // Navbar Fixed\n // -----------------------------------------------------------------------\n if( $getNav.hasClass('no-background') ) {\n $(window).on('scroll', function() {\n var navbarHeighth = $('nav.navbar').outerHeight();\n var scrollPos = $(window).scrollTop();\n\n if (scrollPos > navbarHeighth) {\n $('.navbar-fixed').removeClass('no-background');\n } else {\n $('.navbar-fixed').addClass('no-background');\n }\n });\n }\n\n if( $getNav.hasClass('navbar-transparent') ) {\n $(window).on('scroll', function() {\n var navbarHeighth = $('nav.navbar').outerHeight();\n var scrollPos = $(window).scrollTop();\n\n if (scrollPos > navbarHeighth) {\n $('.navbar-fixed').removeClass('navbar-transparent');\n $('.navbar-fixed').addClass('navbar-scrolled');\n } else {\n $('.navbar-fixed').removeClass('navbar-scrolled');\n $('.navbar-fixed').addClass('navbar-transparent');\n }\n });\n }\n\n // -----------------------------------------------------------------------\n // Toggle Search\n // https://stackoverflow.com/questions/178325/how-do-i-check-if-an-element-is-hidden-in-jquery\n // https://stackoverflow.com/questions/4770025/how-to-disable-scrolling-temporarily\n // https://stackoverflow.com/questions/5963669/whats-the-difference-between-event-stoppropagation-and-event-preventdefault\n // -----------------------------------------------------------------------\n $('nav.navbar.navigator .attr-nav').each(function() {\n logger.debug('register OPEN event|s for QuickSearch');\n $('li.search > a', this).on('click', function(e) {\n // e.preventDefault(); // don't do the default browser action\n logger.debug('manage search action OPEN');\n $('html,body').animate({scrollTop: 0}, 0);\n $('.top-search').slideToggle('slow', 'swing', function() {\n if ( $('.top-search').is(':visible') ) {\n // disable scrolling (desktop)\n $('body').addClass('stop-scrolling');\n // disable scrolling (mobile)\n $('body').bind('touchmove', function(e){e.preventDefault();});\n } else {\n // enable scrolling (desktop)\n $('body').removeClass('stop-scrolling');\n // enable scrolling (mobile)\n $('body').unbind('touchmove');\n }\n });\n // e.stopPropagation(); // don't bubble up the event\n });\n });\n logger.debug('register CLOSE event|s for QuickSearch');\n $('.input-group-addon.close-search').on('click', function(e) {\n e.preventDefault(); // don't do the default browser action\n logger.debug('manage search action CLOSE');\n $('.top-search').slideUp('slow', 'swing');\n $('html,body').animate({scrollTop: 0}, 0);\n // enable scrolling (desktop)\n $('body').removeClass('stop-scrolling');\n // enable scrolling (mobile)\n $('body').unbind('touchmove');\n e.stopPropagation(); // don't bubble up the event\n });\n\n // -----------------------------------------------------------------------\n // Toggle Translator SHOW|HIDE\n // -----------------------------------------------------------------------\n $('nav.navbar.navigator .attr-nav').each(function() {\n logger.debug('register SHOW|HIDE event|s for J1 Translator');\n $('li.translator > a', this).on('click', function(e) {\n // e.preventDefault(); // don't do the default browser action\n // window.location.reload(true);\n logger.debug('toggle translator icon SHOW|HIDE');\n // See: https://api.jquery.com/toggle/\n // With no parameters, the .toggle() method simply toggles the visibility of elements\n $('#google_translate_element').toggle();\n if ($('#google_translate_element').css('display') !== 'none') {\n $('html,body').animate({scrollTop: 0}, 'slow');\n }\n // e.stopPropagation(); // don't bubble up the event\n });\n });\n\n // -----------------------------------------------------------------------\n // Toggle Side Menu\n // -----------------------------------------------------------------------\n // $('nav.navbar.navigator .attr-nav').each(function() {\n // logger.debug('register OPEN event|s for SideBar');\n // $('li.side-menu > a', this).on('click', function(e) {\n // // e.preventDefault(); // don't do the default browser action\n // logger.debug('manage sidebar action OPEN');\n // // e.stopPropagation(); // don't bubble up the event\n // $('nav.navbar.navigator > .side').toggleClass('on');\n // $('body').toggleClass('on-side');\n // // e.stopPropagation(); // don't bubble up the event\n // });\n // });\n // logger.debug('register CLOSE event|s for SideBar');\n // $('.side .close-side').on('click', function(e) {\n // e.preventDefault(); // don't do the default browser action\n // logger.debug('manage sidebar action CLOSE');\n // $('nav.navbar.navigator > .side').removeClass('on');\n // $('body').removeClass('on-side');\n // // e.stopPropagation(); // don't bubble up the event\n // });\n\n // -----------------------------------------------------------------------\n // Wrapper\n // -----------------------------------------------------------------------\n $('body').wrapInner( '
    ');\n\n }, // end event\n\n // -------------------------------------------------------------------------\n // Manage the Menu Dropdowns for Desktop|Mobile\n // -------------------------------------------------------------------------\n manageDropdownMenu : function( defaultOptions, menuOptions ) {\n\n var navDefaultOptions = defaultOptions;\n var navMenuOptions = menuOptions;\n\n var $getNav = $('nav.navbar.navigator');\n var $windowOrientation = window.matchMedia('(orientation: landscape)').matches ? 'landscape' : 'portrait';\n var $getWindow = $(window).width();\n var $getNavWidth = $('nav').width();\n var $getIn = $getNav.find('ul.nav').data('in');\n var $getOut = $getNav.find('ul.nav').data('out');\n\n var menuSelector = '#' +navMenuOptions.xhr_container_id+ '.collapse';\n var delayMenuOpen = navMenuOptions.delay_menu_open;\n\n var $menu;\n var breakPoint;\n var $dropDown;\n var timeoutHandle;\n\n // BS4 @media MAX breakpoints\n // NOTE: a media query is always a range\n // -----------------------------------------------------------------------\n var gridBreakpoint_lg = 992; // bs-breakpoint-lg\n var gridBreakpoint_md = 768; // bs-breakpoint-md\n var gridBreakpoint_sm = 576; // bs-breakpoint-sm\n\n // BS4 @media MIN breakpoints\n // -----------------------------------------------------------------------\n // NOTE: a media query is always a range\n // var gridBreakpoint_lg = 991;\n // var gridBreakpoint_md = 767;\n // var gridBreakpoint_sm = 575;\n\n // @media ranges\n // -----------------------------------------------------------------------\n var small_range = {min: '0em', max: '40em'}; /* 0, 640px */\n var medium_range = {min: '40.063em', max: '64em'}; /* 641px, 1024px */\n var large_range = {min: '64.063em', max: '90em'}; /* 1025px, 1440px */\n var xlarge_range = {min: '90.063em', max: '120em'}; /* 1441px, 1920px */\n var xxlarge_range = {min: '120.063em'}; /* 1921px */\n\n\n // jadams, 2019-05-01: Set Media Breakpoint for Desktop|Mobile Navigation\n if ( navDefaultOptions.nav_bar.media_breakpoint === 'lg' ) {\n breakPoint = gridBreakpoint_lg;\n } else if ( navDefaultOptions.nav_bar.media_breakpoint === 'md' ) {\n breakPoint = gridBreakpoint_md;\n } else if ( navDefaultOptions.nav_bar.media_breakpoint === 'sm' ) {\n breakPoint = gridBreakpoint_sm;\n } else{\n breakPoint = gridBreakpoint_lg;\n }\n\n // -----------------------------------------------------------------------\n // Tablet or Mobile\n // NOTE:\n // Managing the mobile menu is moved to MMenu Plugin\n // Only base functions like QuickLinks are managed by\n // J1 Navigator\n // -----------------------------------------------------------------------\n // MIN media breakpoint\n if ( $getWindow <= breakPoint ) {\n\n // Collapse Navbar\n $(menuSelector).addClass('navbar-collapse');\n $(menuSelector).removeClass('show'); //\n $('#navigator_nav_quicklinks').addClass('show');\n\n // Enable click Quicklink Navigation\n $('nav.navbar.navigator .attr-nav').each(function() {\n $('.dropdown-menu', this).removeClass('animated');\n $('li.dropdown', this).off('mouseenter');\n $('li.dropdown', this).off('mouseleave');\n $('a.dropdown-toggle', this).off('click');\n $('a.dropdown-toggle', this).on('click', function (e) {\n // e.stopPropagation(); // don't bubble up the event\n $(this).closest('li.dropdown').find('.dropdown-menu').first().stop().fadeToggle();\n $('.navbar-toggle').each(function(){\n $('.mdi', this).removeClass('mdi-close');\n $('.mdi', this).addClass('mdi-menu');\n $('.navbar-collapse').removeClass('in');\n $('.navbar-collapse').removeClass('open');\n });\n });\n\n $(this).on('mouseleave', function(){\n $('.dropdown-menu', this).stop().fadeOut();\n $('li.dropdown', this).removeClass('open');\n // return false;\n });\n });\n\n $('#desktop_menu').hide();\n\n // -----------------------------------------------------------------------\n // Desktop Navigation does NOT work on physical devices like iPad|Pro\n // Config DISABLED\n //\n// } else if ( $getWindow > breakPoint || $getWindow <= 1024 && $windowOrientation == 'portrait' ) {\n } else if ( $getWindow > breakPoint ) {\n // -----------------------------------------------------------------------\n // Desktop\n // -----------------------------------------------------------------------\n $('#navigator_nav_quicklinks').removeClass('show');\n $('#desktop_menu').show();\n\n // TODO: Fix delayMenuOpen issue\n // TODO: scrollStart|Stop are to be moved to menu events\n //\n // var scrollStart = $('body').removeClass('stop-scrolling');\n // var scrollStop = $('body').addClass('stop-scrolling');\n\n // jadams, 2017-12-39: Workaround. Unclear why delayMenuOpen get lost for image|video headers\n // if ( delayMenuOpen === undefined ) { delayMenuOpen = 250; }\n\n // jadams, 2020-20-13: managing the dropdown menu lenght should be done\n // different. The current method cause an ugly extry lengt at the end of\n // the LAST menu item\n // Adding the height limiter DISABLED\n\n // limit the dropdown menu lenght if needed\n $('.dropdown-menu > li').hover(function() {\n var $container = $(this);\n var $list = $container.find('ul');\n\n // $('body').addClass('stop-scrolling');\n\n // continue on simple dropdowns only (no MM)\n if ( $list.length == 1 ) {\n var height = $list.height() * 1.1; // make sure there is valid space at the bottom\n var maxHeight;\n // typeof, make sure that test|if returns a string\n // see: https://stackoverflow.com/questions/3390396/how-can-i-check-for-undefined-in-javascript\n if ( typeof $list.css('max-height') !== 'undefined' ) {\n maxHeight = $list.css('max-height').match(/\\d+/)[0]; // get the value of (dropdown) maxHeight\n } else { maxHeight = 200; }\n var tooHeigh = height / maxHeight; // calc if the dropdown height exceeds the limit\n\n // limit the dropdown lenght to maxHeight (permanent)\n // jadams, 2020-20-13: height limiter DISABLED\n // if (tooHeigh > 1) {\n // $list.css({\n // 'height': maxHeight,\n // 'overflow-y': 'auto'\n // });\n // }\n }\n });\n\n $('.dropdown-menu > li').on('mouseleave', function(){\n $('body').removeClass('stop-scrolling');\n });\n\n // Height of scroll navigation sidebar (??? needed ???)\n // jadams: 2019-06-14, since HTML generation of the menubar changed\n // to \"id only\" jQuery of '.scroller' cause failures\n // What a hell is: '.scroller' (jQuery Scroller) ???\n //$('.scroller').css('height', $getHeight + 'px');\n // Removed module support this\n // $('body').removeClass('stop-scrolling');\n\n // jadams 2017-11-01: Menu button (toggler) shown|hide by BS4\n //$(buttonSelector).css('display','block');\n $(menuSelector).removeClass('navbar-collapse'); //.toggleClass(scrollStart);\n // jadams 2017-11-01: class 'in' replaced by 'show' for BS4\n $(menuSelector).addClass('show');\n\n // Navbar Sidebar\n // if ( $getNav.hasClass('navbar-sidebar')) {\n //\n // // Hover Open on Sidebar Menu\n // $('nav.navbar.navigator ul.nav').each(function () {\n //\n // $('a.dropdown-toggle', this).off('click');\n // $('a.dropdown-toggle', this).on('click', function (e) {\n // // e.stopPropagation(); // don't bubble up the event\n // });\n //\n // $('.dropdown-menu', this).addClass('animated');\n // $('li.dropdown', this).on('mouseenter', function () {\n // $('.dropdown-menu', this).eq(0).removeClass($getOut);\n // $('.dropdown-menu', this).eq(0).stop().fadeIn().addClass($getIn);\n // $(this).addClass('open');\n // // return false;\n // });\n //\n // $('.col_menu').each(function () {\n // $('.content', this).addClass('animated');\n // $('.title', this).on('mouseenter', function () {\n // $(this).closest('.col_menu').find('.content').stop().fadeIn().addClass($getIn);\n // $(this).closest('.col_menu').addClass('open');\n // // return false;\n // });\n // });\n //\n // $(this).on('mouseleave', function () {\n // $('.dropdown-menu', this).stop().removeClass($getIn);\n // $('.dropdown-menu', this).stop().addClass($getOut).fadeOut();\n // $('.col_menu', this).find('.content').stop().fadeOut().removeClass($getIn);\n // $('.col_menu', this).removeClass('open');\n // $('li.dropdown', this).removeClass('open');\n // // return false;\n // });\n // }); // fixed\n // } // END Navbar Sidebar\n\n // Hover Open on Default Menu\n $('nav.navbar.navigator ul.nav').each(function() {\n $('a.dropdown-toggle', this).off('click');\n $('a.dropdown-toggle', this).on('click', function (e) {\n // e.stopPropagation(); // don't bubble up the event\n });\n\n $('.megamenu-fw', this).each(function(){\n $('.title', this).off('click');\n $('a.dropdown-toggle', this).off('click');\n $('.content').removeClass('animated');\n });\n $('.dropdown-menu', this).addClass('animated');\n\n $('li.dropdown', this).on('mouseenter', function(){\n $menu = $('.dropdown-menu', this).eq(0);\n $dropDown = $(this);\n\n // stop scrolling if top search or any (mmenu) drawer is opened\n if ($('body').hasClass('stop-scrolling') || $('body').hasClass('mm-ocd-opened') ){ return false; }\n\n $menu.removeClass($getOut);\n $menu.removeClass('open');\n $dropDown.addClass('open');\n // Get|Set the timeout object to delay the dropdown open\n timeoutHandle = window.setTimeout(function () {\n if ($dropDown.hasClass('open')){\n $menu.stop().fadeIn().addClass($getIn);\n $menu.addClass('open');\n $dropDown.addClass('open');\n }\n }, delayMenuOpen);\n });\n\n $('li.dropdown', this).on('mouseleave', function(){\n window.clearTimeout(timeoutHandle); // Clear the timeout object\n $(this).removeClass('open').removeClass('open');\n\n $('.dropdown-menu', this).removeClass('open');\n $('.dropdown-menu', this).eq(0).removeClass($getIn);\n $('.dropdown-menu', this).eq(0).stop().fadeOut().addClass($getOut);\n });\n\n $(this).on('mouseleave', function(){\n window.clearTimeout(timeoutHandle);\n $('li.dropdown', this).removeClass('open');\n $('.dropdown-menu', this).removeClass('open');\n $('.dropdown-menu', this).removeClass($getIn);\n $('.dropdown-menu', this).eq(0).stop().fadeOut().addClass($getOut);\n });\n }); // END Default Menu\n\n } // end Desktop\n\n // -----------------------------------------------------------------------\n // Hover Open on Quicklink Navigation\n // -----------------------------------------------------------------------\n $('nav.navbar.navigator .attr-nav').each(function() {\n\n $('a.dropdown-toggle', this).off('click');\n $('a.dropdown-toggle', this).on('click', function (e) {\n // e.stopPropagation(); // don't bubble up the event\n });\n\n $('.dropdown-menu', this).addClass('animated');\n $('li.dropdown', this).on('mouseenter', function(){\n $('.dropdown-menu', this).eq(0).removeClass($getOut);\n $('.dropdown-menu', this).eq(0).stop().fadeIn().addClass($getIn);\n $(this).addClass('open');\n //return false;\n });\n\n $('li.dropdown', this).on('mouseleave', function(){\n $('.dropdown-menu', this).eq(0).removeClass($getIn);\n $('.dropdown-menu', this).eq(0).stop().fadeOut().addClass($getOut);\n $(this).removeClass('open');\n });\n\n $(this).on('mouseleave', function(){\n $('.dropdown-menu', this).removeClass($getIn);\n $('.dropdown-menu', this).eq(0).stop().fadeOut().addClass($getOut);\n $('li.dropdown', this).removeClass('open');\n //return false;\n });\n });\n\n // -----------------------------------------------------------------------\n // Fullscreen Menu\n // -----------------------------------------------------------------------\n if( $getNav.hasClass('navbar-full')){\n var windowHeight = $(window).height(),\n windowWidth = $(window).width();\n\n $('.nav-full').css('height', windowHeight + 'px');\n $('.wrap-full-menu').css('height', windowHeight + 'px');\n $('.wrap-full-menu').css('width', windowWidth + 'px');\n\n $('.navbar-collapse').addClass('animated');\n $('.navbar-toggle').each(function(){\n var getId = $(this).data('target');\n $(this).off('click');\n $(this).on('click', function(e){\n e.preventDefault();\n $(getId).removeClass($getOut);\n $(getId).addClass('in');\n $(getId).addClass($getIn);\n // e.stopPropagation(); // don't bubble up the event\n // return false;\n });\n\n $('li.close-full-menu').on('click', function(e){\n e.preventDefault();\n $(getId).addClass($getOut);\n setTimeout(function(){\n $(getId).removeClass('in');\n $(getId).removeClass($getIn);\n }, 500);\n //e.stopPropagation(); // don't bubble up the event\n // return false;\n });\n });\n }\n }, // end manageDropdownMenu\n\n // -------------------------------------------------------------------------\n // Sticky Navbar\n // -------------------------------------------------------------------------\n navbarSticky : function() {\n var $getNav = $('nav.navbar.navigator'),\n navSticky = $getNav.hasClass('navbar-sticky');\n\n if (navSticky) {\n // Set Height Navigation\n var $getHeight = $getNav.height();\n $('.wrap-sticky').height($getHeight);\n\n // Windown on scroll\n var getOffset = $('.wrap-sticky').offset().top;\n $(window).on('scroll', function(){\n var scrollTop = $(window).scrollTop();\n if(scrollTop > getOffset){\n $getNav.addClass('sticked');\n }else {\n $getNav.removeClass('sticked');\n }\n });\n }\n }, // end navbarSticky\n\n // -------------------------------------------------------------------------\n // Navbar Scrollspy\n // -------------------------------------------------------------------------\n // navbarScrollspy : function() {\n // var navScrollSpy = $('.navbar-scrollspy'),\n // $body = $('body'),\n // $getNav = $('nav.navbar.navigator'),\n // offset = $getNav.outerHeight();\n //\n // if( navScrollSpy.length ){\n // $body.scrollspy({target: '.navbar', offset: offset });\n //\n // // Animation Scrollspy\n // $('.scroll').on('click', function(event) {\n // event.preventDefault();\n //\n // // Active link\n // $('.scroll').removeClass('active');\n // $(this).addClass('active');\n //\n // // Remove navbar collapse\n // $('.navbar-collapse').removeClass('in');\n //\n // // Toggle Bars\n // $('.navbar-toggle').each(function(){\n // $('.mdi', this).removeClass('mdi-close');\n // $('.mdi', this).addClass('mdi-menu');\n // });\n //\n // // Scroll\n // var scrollTop = $(window).scrollTop(),\n // $anchor = $(this).find('a'),\n // $section = $($anchor.attr('href')).offset().top,\n // $window = $(window).width(),\n // $minusDesktop = $getNav.data('minus-value-desktop'),\n // $minusMobile = $getNav.data('minus-value-mobile'),\n // $speed = $getNav.data('speed'),\n // $position;\n //\n // if( $window > 992 ){\n // $position = $section - $minusDesktop;\n // }else{\n // $position = $section - $minusMobile;\n // }\n //\n // $('html, body').stop().animate({\n // scrollTop: $position\n // }, $speed);\n // });\n //\n // // Activate Navigation\n // var fixSpy = function() {\n // var data = $body.data('bs.scrollspy');\n // if (data) {\n // offset = $getNav.outerHeight();\n // data.options.offset = offset;\n // $body.data('bs.scrollspy', data);\n // $body.scrollspy('refresh');\n // }\n // };\n //\n // // Activate Navigation on resize\n // var resizeTimer;\n // $(window).on('resize', function() {\n // clearTimeout(resizeTimer);\n // var resizeTimer = setTimeout(fixSpy, 200);\n // });\n // }\n // }, // end navbarScrollspy\n\n // -------------------------------------------------------------------------\n // updateSidebar\n // Note:\n // -------------------------------------------------------------------------\n updateSidebar: function (user_data) {\n var logger = log4javascript.getLogger('j1.core.navigator.updateSidebar');\n var json_message;\n\n// json_message = JSON.stringify(user_data, undefined, 2); // multiline\n json_message = JSON.stringify(user_data);\n logText = 'user state data: ' + json_message;\n logger.debug(logText);\n\n // Replace Macro placeholders to values\n j1.resolveMacros(user_data);\n // Replace Macro values only\n j1.updateMacros(user_data);\n\n return true;\n\n }, // END updateSidebar\n\n }; // end return (object)\n}( jQuery );\n","/*\n # -----------------------------------------------------------------------------\n # ~/assets/themes/j1/modules/cookiebar/js/cookiebar.js\n # Provides Javascript functions for jQuery cookiebar\n #\n # Product/Info:\n # http://jekyll.one\n #\n # Copyright (C) 2020 Juergen Adams\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one/J1 Template/blob/master/LICENSE\n # -----------------------------------------------------------------------------\n # NOTE:\n # cb cookie disabled. Instead, j1 user state cookie is used.\n # -----------------------------------------------------------------------------\n # TODO:\n # Module needs to be rewritten to use j1 native BS modals.\n # -----------------------------------------------------------------------------\n*/\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint no-unused-vars: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint no-redeclare: \"off\" */\n/* global window */\n\n// TODO:\n\n// -----------------------------------------------------------------------------\n// Cookie Consent core registered as \"cookiebar\"\n// -----------------------------------------------------------------------------\n/*!\n * J1 Cookiebar\n * Copyright (C) 2020 Juergen Adams\n * Licensed under MIT License.\n */\nmodule.exports = function cookiebar (options) {\n\n return {\n\n // -------------------------------------------------------------------------\n // Initialize cookie consent core\n // -------------------------------------------------------------------------\n init: function (options) {\n\n var moduleOptions = options;\n var logger = log4javascript.getLogger('j1.cookiebar');\n var cookie_names = j1.getCookieNames();\n const cookie_user_state = cookie_names.user_state;\n var user_state = {};\n\n var moduleDefaults = {\n renewOnVisit: false, // Renew the cookie upon revisit to website\n forceShow: false, // Force cookiebar to show regardless of user cookie preference\n domain: String(window.location.hostname), // Location of privacy policy\n referrer: String(document.referrer) // Where visitor has come from\n };\n\n var options = $.extend(moduleDefaults,moduleOptions);\n\n var dependencies_met_page_ready = setInterval (function (options) {\n if ( j1.getState() == 'finished' ) {\n\n // Set|Detect J1 UserState\n user_state_detected = j1.existsCookie (cookie_user_state);\n if ( user_state_detected ) {\n logger.info('User state cookie found');\n user_state = j1.readCookie(cookie_user_state);\n } else {\n logger.error('User state NOT cookie found');\n }\n\n // Show cookie (consent) icon\n if (user_state.cookies_accepted == 'accepted') {\n // Display cookie (consent) icon\n $('#quickLinksCookieButton').css('display', 'block');\n }\n\n // Hide cookie (consent) icon\n if (user_state.cookies_accepted == 'pending' || user_state.cookies_accepted == 'declined' ) {\n // Display cookie (consent) icon\n $('#quickLinksCookieButton').css('display', 'none');\n }\n\n // Sets expiration date for cookie\n // var expireDate = new Date();\n // expireDate.setTime(expireDate.getTime()+(options.expireDays*86400000));\n // expireDate = expireDate.toGMTString();\n\n if (\n user_state.cookies_accepted == 'pending' ||\n user_state.cookies_accepted == 'declined' ||\n user_state.cookies_accepted == '')\n {\n $('#topFullCookieConsent').modal('show');\n }\n clearInterval(dependencies_met_page_ready);\n }\n });\n },\n\n // -------------------------------------------------------------------------\n // eventHandler: EventHandler for J1 Cookie Consent\n // Manage button click events for all BS Modals\n // See: https://www.nickang.com/add-event-listener-for-loop-problem-in-javascript/\n // -------------------------------------------------------------------------\n eventHandler: function (options) {\n var logger = log4javascript.getLogger('cookiebar.eventHandler');\n var current_page = window.location.pathname;\n var modalButtons = document.querySelectorAll('a.btn');\n var appDetected = j1.appDetected();\n var deleteOnDecline = options.deleteOnDecline;\n var deleteOnDecline = true;\n var whitelistedPages = options.whitelistedPages;\n var whitelistedPages = [];\n var stopScrolling = options.stopScrolling;\n var cookie_names = j1.getCookieNames();\n const cookie_user_state = cookie_names.user_state;\n var user_state = {};\n var cookie_consent = j1.readCookie(cookie_user_state);\n var whitelisted;\n var json_data;\n\n logText = 'register button click events';\n logger.debug(logText);\n\n modalButtons.forEach(function(button, index) {\n button.addEventListener('click', function(e) {\n\n // CookieConsent policyButton\n // -------------------------------------------------------------------\n if (this.id === 'policyButton') {\n logger.debug('user clicked policyButton');\n // toggle|display cookie policy\n $('#cookiePolicyInfo').toggle( 'fast', function() {\n // toggle container classes\n $('#modal-footer').toggleClass('modal-footer-hidden modal-footer-show');\n });\n\n // return false behaves like preventDefault() to block\n // further event propagation (bubble up)\n return false;\n }\n\n // CookieConsent acceptButton\n // -------------------------------------------------------------------\n if (this.id === 'acceptButton') {\n logger.debug('user clicked acceptButton');\n\n // Set consent state\n cookie_consent = j1.readCookie(cookie_user_state);\n cookie_consent.cookies_accepted = 'accepted';\n\n // Update user state cookie\n\n // j1.writeCookie({\n // name: cookie_user_state,\n // data: cookie_consent,\n // expires: cookie_consent.live_span\n // });\n\n j1.writeCookie({\n name: cookie_user_state,\n data: cookie_consent,\n expires: 365\n });\n\n // update sidebar for changed consent|theme data\n logger.info('update sidebar');\n user_state = j1.readCookie(cookie_names.user_state);\n user_session = j1.readCookie(cookie_names.user_session);\n current_user_data = j1.mergeData(user_session, user_state);\n j1.core.navigator.updateSidebar(current_user_data);\n\n // Display cookie icon\n $('#quickLinksCookieButton').css('display', 'block');\n\n return false;\n }\n\n // CookieConsent declineButton\n // -------------------------------------------------------------------\n if (this.id === 'declineButton') {\n logger.debug('user clicked declineButton');\n\n // Set consent state|current_page\n cookie_consent.cookies_accepted = 'declined';\n current_page = window.location.pathname;\n whitelisted = (whitelistedPages.indexOf(current_page) > -1);\n\n // update sidebar for changed consent|theme data\n logger.info('update sidebar');\n user_state = j1.readCookie(cookie_names.user_state);\n user_session = j1.readCookie(cookie_names.user_session);\n current_user_data = j1.mergeData(user_session, user_state);\n j1.core.navigator.updateSidebar(current_user_data);\n\n if (deleteOnDecline) {\n // Delete cookies\n logger.warn('delete all cookies');\n j1.deleteCookie(cookie_user_state);\n }\n\n $('#quickLinksCookieButton').css('display', 'none');\n // Set route to home page if current page is NOT whitelisted\n if ( !whitelisted ) { j1.goHome(); }\n\n return false;\n }\n\n // revokeCookiesButton\n // -------------------------------------------------------------------\n if (this.id === 'revokeCookies') {\n logger.debug('user clicked revokeCookiesButton');\n\n current_page = window.location.pathname;\n whitelisted = (whitelistedPages.indexOf(current_page) > -1);\n\n // Set consent state\n cookie_consent = j1.readCookie(cookie_user_state);\n cookie_consent.cookies_accepted = 'declined';\n\n // Update user state cookie\n\n // j1.writeCookie({\n // name: cookie_user_state,\n // data: cookie_consent,\n // expires: cookie_consent.live_span\n // });\n\n j1.writeCookie({\n name: cookie_user_state,\n data: cookie_consent,\n expires: 365\n });\n\n // update sidebar for changed consent|theme data\n logger.info('update sidebar');\n user_state = j1.readCookie(cookie_names.user_state);\n user_session = j1.readCookie(cookie_names.user_session);\n current_user_data = j1.mergeData(user_session, user_state);\n j1.core.navigator.updateSidebar(current_user_data);\n\n // Hide cookie icon\n $('#quickLinksCookieButton').css('display', 'none');\n\n // Set route to home page if current page is NOT whitelisted\n if (!whitelisted) { j1.goHome(); }\n }\n\n // remainCookiesButton\n // -------------------------------------------------------------------\n if (this.id === 'remainCookies') {\n logger.debug('user clicked remainCookiesButton');\n return false;\n }\n });\n });\n\n // Register pre/post events for modal cookieRevokeCentralDanger\n // -----------------------------------------------------------------------\n $(document).on('shown.bs.modal','#cookieRevokeCentralDanger', function () {\n logger.debug('user opened modal: cookieRevokeCentralDanger');\n });\n\n $(document).on('hide.bs.modal','#cookieRevokeCentralDanger', function () {\n logger.debug('user closed cookieRevokeCentralDanger');\n });\n\n // Register pre/post events for modal topFullCookieConsent\n // -----------------------------------------------------------------------\n $(document).on('shown.bs.modal','#topFullCookieConsent', function () {\n if ( stopScrolling ) { $('body').addClass('stop-scrolling'); }\n //\n // place action here\n //\n });\n\n $(document).on('hide.bs.modal','#topFullCookieConsent', function () {\n logger.debug('user closed modal: topFullCookieConsent');\n $('body').removeClass('stop-scrolling');\n });\n\n logText = 'events registered';\n logger.debug(logText);\n\n return true;\n } // END eventHandler\n }; // END return\n}( jQuery );\n","/*\n # -----------------------------------------------------------------------------\n # ~/js/scroll-smooth/scroll-smooth.js\n # Provides Javascript functions for smooth scrolling\n #\n # Product/Info:\n # http://jekyll.one\n #\n # Copyright (C) 2020 Juergen Adams\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n # -----------------------------------------------------------------------------\n*/\n'use strict';\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint no-redeclare: \"off\" */\n/* eslint indent: \"off\" */\n// -----------------------------------------------------------------------------\n\n// -----------------------------------------------------------------------------\n// scrollSmooth core registered as \"scrollSmooth\"\n// -----------------------------------------------------------------------------\n/*!\n * J1 scrollSmooth\n * Copyright (C) 2020 Juergen Adams\n * Licensed under MIT License.\n */\nmodule.exports = function scrollSmooth ( options ) {\n\n // Default settings\n var settings = $.extend({\n foo: 'foo_option',\n bar: 'bar_option'\n }, options );\n\n // -----------------------------------------------------------------------\n // Helper functions\n // -----------------------------------------------------------------------\n function stripHash (url) {\n return url.slice(0, url.lastIndexOf('#'))\n }\n\n function isCssSmoothScrollSupported () {\n return 'scrollBehavior' in document.documentElement.style\n }\n\n return {\n // -------------------------------------------------------------------------\n // Initialize scrollSmooth\n // -------------------------------------------------------------------------\n scroll: function ( target, options ) {\n\n var logger;\n var logText;\n\n logger = log4javascript.getLogger('j1.scrollSmooth.core');\n\n // indicator|check currently NOT used\n // if (isCssSmoothScrollSupported()) { }\n\n logText = 'run module scrollSmooth'\n logger.info(logText);\n\n var duration = options.duration;\n var offset = options.offset;\n\n // var pageUrl = options.location.hash\n // ? stripHash(options.location.href)\n // : options.location.href;\n\n this.scrollTo(target, {\n duration: duration,\n offset: offset,\n callback: null\n });\n\n logText = 'scrollSmooth finished'\n logger.info(logText);\n },\n\n // -------------------------------------------------------------------------\n // scrollTo\n // -------------------------------------------------------------------------\n scrollTo: function ( target, options ) {\n var offset = options.offset;\n\n var $pagehead = $('.attic');\n var $navbar = $('nav.navbar');\n var $adblock = $('#adblock');\n\n var navbarType = $navbar.hasClass('navbar-fixed') ? 'fixed' : 'scrolled';\n var fontSize = $('body').css('font-size').replace('px','');\n var start = window.pageYOffset;\n\n var l = parseInt(fontSize);\n\n var h = $pagehead.length ? $pagehead.height() : 0;\n var n = $navbar.length ? $navbar.height() : 0;\n var a = $adblock.length ? $adblock.height() : 0;\n\n var o = navbarType == 'fixed' ? -1*(n + a + l) : -1*(h + n + a + l);\n\n var opt = {\n duration: options.duration,\n offset: o,\n callback: options.callback,\n easing: options.easing || easeInOutQuad\n };\n\n // This makes ids that start with a number work: ('[id=\"' + decodeURI(target).split('#').join('') + '\"]')\n // DecodeURI for nonASCII hashes, they was encoded, but id was not encoded, it lead to not finding the tgt element by id.\n // And this is for IE: document.body.scrollTop\n var tgt = document.querySelector('[id=\"' + decodeURI(target).split('#').join('') + '\"]')\n var distance = typeof target === 'string'\n ? opt.offset + (\n target\n ? (tgt && tgt.getBoundingClientRect().top) || 0 // handle non-existent links better.\n : -(document.documentElement.scrollTop || document.body.scrollTop))\n : target\n var duration = typeof opt.duration === 'function'\n ? opt.duration(distance)\n : opt.duration\n var timeStart\n var timeElapsed\n\n requestAnimationFrame(function (time) { timeStart = time; loop(time) })\n function loop (time) {\n timeElapsed = time - timeStart\n\n window.scrollTo(0, opt.easing(timeElapsed, start, distance, duration))\n\n if (timeElapsed < duration) { requestAnimationFrame(loop) } else { end() }\n }\n\n function end () {\n window.scrollTo(0, start + distance)\n\n // jadams, 2020-07-04: on (some?) mobile devices, the navbar\n // background is NOT switched (always?) correctly on a\n // page RELOAD.\n //\n // Solution: scroll the page one pixel back and forth (trigger)\n // to get the right position for the Toccer and adjust the\n // Navigator to display the (tranparent) navbar correctly based\n // on their onscroll events registered.\n //\n $(window).scrollTop($(window).scrollTop()+1);\n $(window).scrollTop($(window).scrollTop()-1);\n\n if (typeof opt.callback === 'function') { opt.callback() }\n }\n\n // Robert Penner's easeInOutQuad - http://robertpenner.com/easing/\n function easeInOutQuad (t, b, c, d) {\n t /= d / 2\n if (t < 1) return c / 2 * t * t + b\n t--\n return -c / 2 * (t * (t - 2) - 1) + b\n }\n } // END scrollTo\n\n }; // END return\n}( jQuery );\n","/*\n * anime.js v3.2.0\n * (c) 2020 Julian Garnier\n * Released under the MIT license\n * animejs.com\n */\n\n'use strict';\n\n// Defaults\n\nvar defaultInstanceSettings = {\n update: null,\n begin: null,\n loopBegin: null,\n changeBegin: null,\n change: null,\n changeComplete: null,\n loopComplete: null,\n complete: null,\n loop: 1,\n direction: 'normal',\n autoplay: true,\n timelineOffset: 0\n};\n\nvar defaultTweenSettings = {\n duration: 1000,\n delay: 0,\n endDelay: 0,\n easing: 'easeOutElastic(1, .5)',\n round: 0\n};\n\nvar validTransforms = ['translateX', 'translateY', 'translateZ', 'rotate', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'perspective', 'matrix', 'matrix3d'];\n\n// Caching\n\nvar cache = {\n CSS: {},\n springs: {}\n};\n\n// Utils\n\nfunction minMax(val, min, max) {\n return Math.min(Math.max(val, min), max);\n}\n\nfunction stringContains(str, text) {\n return str.indexOf(text) > -1;\n}\n\nfunction applyArguments(func, args) {\n return func.apply(null, args);\n}\n\nvar is = {\n arr: function (a) { return Array.isArray(a); },\n obj: function (a) { return stringContains(Object.prototype.toString.call(a), 'Object'); },\n pth: function (a) { return is.obj(a) && a.hasOwnProperty('totalLength'); },\n svg: function (a) { return a instanceof SVGElement; },\n inp: function (a) { return a instanceof HTMLInputElement; },\n dom: function (a) { return a.nodeType || is.svg(a); },\n str: function (a) { return typeof a === 'string'; },\n fnc: function (a) { return typeof a === 'function'; },\n und: function (a) { return typeof a === 'undefined'; },\n hex: function (a) { return /(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a); },\n rgb: function (a) { return /^rgb/.test(a); },\n hsl: function (a) { return /^hsl/.test(a); },\n col: function (a) { return (is.hex(a) || is.rgb(a) || is.hsl(a)); },\n key: function (a) { return !defaultInstanceSettings.hasOwnProperty(a) && !defaultTweenSettings.hasOwnProperty(a) && a !== 'targets' && a !== 'keyframes'; }\n};\n\n// Easings\n\nfunction parseEasingParameters(string) {\n var match = /\\(([^)]+)\\)/.exec(string);\n return match ? match[1].split(',').map(function (p) { return parseFloat(p); }) : [];\n}\n\n// Spring solver inspired by Webkit Copyright © 2016 Apple Inc. All rights reserved. https://webkit.org/demos/spring/spring.js\n\nfunction spring(string, duration) {\n\n var params = parseEasingParameters(string);\n var mass = minMax(is.und(params[0]) ? 1 : params[0], .1, 100);\n var stiffness = minMax(is.und(params[1]) ? 100 : params[1], .1, 100);\n var damping = minMax(is.und(params[2]) ? 10 : params[2], .1, 100);\n var velocity = minMax(is.und(params[3]) ? 0 : params[3], .1, 100);\n var w0 = Math.sqrt(stiffness / mass);\n var zeta = damping / (2 * Math.sqrt(stiffness * mass));\n var wd = zeta < 1 ? w0 * Math.sqrt(1 - zeta * zeta) : 0;\n var a = 1;\n var b = zeta < 1 ? (zeta * w0 + -velocity) / wd : -velocity + w0;\n\n function solver(t) {\n var progress = duration ? (duration * t) / 1000 : t;\n if (zeta < 1) {\n progress = Math.exp(-progress * zeta * w0) * (a * Math.cos(wd * progress) + b * Math.sin(wd * progress));\n } else {\n progress = (a + b * progress) * Math.exp(-progress * w0);\n }\n if (t === 0 || t === 1) { return t; }\n return 1 - progress;\n }\n\n function getDuration() {\n var cached = cache.springs[string];\n if (cached) { return cached; }\n var frame = 1/6;\n var elapsed = 0;\n var rest = 0;\n while(true) {\n elapsed += frame;\n if (solver(elapsed) === 1) {\n rest++;\n if (rest >= 16) { break; }\n } else {\n rest = 0;\n }\n }\n var duration = elapsed * frame * 1000;\n cache.springs[string] = duration;\n return duration;\n }\n\n return duration ? solver : getDuration;\n\n}\n\n// Basic steps easing implementation https://developer.mozilla.org/fr/docs/Web/CSS/transition-timing-function\n\nfunction steps(steps) {\n if ( steps === void 0 ) steps = 10;\n\n return function (t) { return Math.ceil((minMax(t, 0.000001, 1)) * steps) * (1 / steps); };\n}\n\n// BezierEasing https://github.com/gre/bezier-easing\n\nvar bezier = (function () {\n\n var kSplineTableSize = 11;\n var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\n function A(aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1 }\n function B(aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1 }\n function C(aA1) { return 3.0 * aA1 }\n\n function calcBezier(aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT }\n function getSlope(aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1) }\n\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0.0) { aB = currentT; } else { aA = currentT; }\n } while (Math.abs(currentX) > 0.0000001 && ++i < 10);\n return currentT;\n }\n\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < 4; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0.0) { return aGuessT; }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n\n function bezier(mX1, mY1, mX2, mY2) {\n\n if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { return; }\n var sampleValues = new Float32Array(kSplineTableSize);\n\n if (mX1 !== mY1 || mX2 !== mY2) {\n for (var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n }\n\n function getTForX(aX) {\n\n var intervalStart = 0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n\n --currentSample;\n\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n\n if (initialSlope >= 0.001) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if (initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n\n }\n\n return function (x) {\n if (mX1 === mY1 && mX2 === mY2) { return x; }\n if (x === 0 || x === 1) { return x; }\n return calcBezier(getTForX(x), mY1, mY2);\n }\n\n }\n\n return bezier;\n\n})();\n\nvar penner = (function () {\n\n // Based on jQuery UI's implemenation of easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\n var eases = { linear: function () { return function (t) { return t; }; } };\n\n var functionEasings = {\n Sine: function () { return function (t) { return 1 - Math.cos(t * Math.PI / 2); }; },\n Circ: function () { return function (t) { return 1 - Math.sqrt(1 - t * t); }; },\n Back: function () { return function (t) { return t * t * (3 * t - 2); }; },\n Bounce: function () { return function (t) {\n var pow2, b = 4;\n while (t < (( pow2 = Math.pow(2, --b)) - 1) / 11) {}\n return 1 / Math.pow(4, 3 - b) - 7.5625 * Math.pow(( pow2 * 3 - 2 ) / 22 - t, 2)\n }; },\n Elastic: function (amplitude, period) {\n if ( amplitude === void 0 ) amplitude = 1;\n if ( period === void 0 ) period = .5;\n\n var a = minMax(amplitude, 1, 10);\n var p = minMax(period, .1, 2);\n return function (t) {\n return (t === 0 || t === 1) ? t : \n -a * Math.pow(2, 10 * (t - 1)) * Math.sin((((t - 1) - (p / (Math.PI * 2) * Math.asin(1 / a))) * (Math.PI * 2)) / p);\n }\n }\n };\n\n var baseEasings = ['Quad', 'Cubic', 'Quart', 'Quint', 'Expo'];\n\n baseEasings.forEach(function (name, i) {\n functionEasings[name] = function () { return function (t) { return Math.pow(t, i + 2); }; };\n });\n\n Object.keys(functionEasings).forEach(function (name) {\n var easeIn = functionEasings[name];\n eases['easeIn' + name] = easeIn;\n eases['easeOut' + name] = function (a, b) { return function (t) { return 1 - easeIn(a, b)(1 - t); }; };\n eases['easeInOut' + name] = function (a, b) { return function (t) { return t < 0.5 ? easeIn(a, b)(t * 2) / 2 : \n 1 - easeIn(a, b)(t * -2 + 2) / 2; }; };\n });\n\n return eases;\n\n})();\n\nfunction parseEasings(easing, duration) {\n if (is.fnc(easing)) { return easing; }\n var name = easing.split('(')[0];\n var ease = penner[name];\n var args = parseEasingParameters(easing);\n switch (name) {\n case 'spring' : return spring(easing, duration);\n case 'cubicBezier' : return applyArguments(bezier, args);\n case 'steps' : return applyArguments(steps, args);\n default : return applyArguments(ease, args);\n }\n}\n\n// Strings\n\nfunction selectString(str) {\n try {\n var nodes = document.querySelectorAll(str);\n return nodes;\n } catch(e) {\n return;\n }\n}\n\n// Arrays\n\nfunction filterArray(arr, callback) {\n var len = arr.length;\n var thisArg = arguments.length >= 2 ? arguments[1] : void 0;\n var result = [];\n for (var i = 0; i < len; i++) {\n if (i in arr) {\n var val = arr[i];\n if (callback.call(thisArg, val, i, arr)) {\n result.push(val);\n }\n }\n }\n return result;\n}\n\nfunction flattenArray(arr) {\n return arr.reduce(function (a, b) { return a.concat(is.arr(b) ? flattenArray(b) : b); }, []);\n}\n\nfunction toArray(o) {\n if (is.arr(o)) { return o; }\n if (is.str(o)) { o = selectString(o) || o; }\n if (o instanceof NodeList || o instanceof HTMLCollection) { return [].slice.call(o); }\n return [o];\n}\n\nfunction arrayContains(arr, val) {\n return arr.some(function (a) { return a === val; });\n}\n\n// Objects\n\nfunction cloneObject(o) {\n var clone = {};\n for (var p in o) { clone[p] = o[p]; }\n return clone;\n}\n\nfunction replaceObjectProps(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o1) { o[p] = o2.hasOwnProperty(p) ? o2[p] : o1[p]; }\n return o;\n}\n\nfunction mergeObjects(o1, o2) {\n var o = cloneObject(o1);\n for (var p in o2) { o[p] = is.und(o1[p]) ? o2[p] : o1[p]; }\n return o;\n}\n\n// Colors\n\nfunction rgbToRgba(rgbValue) {\n var rgb = /rgb\\((\\d+,\\s*[\\d]+,\\s*[\\d]+)\\)/g.exec(rgbValue);\n return rgb ? (\"rgba(\" + (rgb[1]) + \",1)\") : rgbValue;\n}\n\nfunction hexToRgba(hexValue) {\n var rgx = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n var hex = hexValue.replace(rgx, function (m, r, g, b) { return r + r + g + g + b + b; } );\n var rgb = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n var r = parseInt(rgb[1], 16);\n var g = parseInt(rgb[2], 16);\n var b = parseInt(rgb[3], 16);\n return (\"rgba(\" + r + \",\" + g + \",\" + b + \",1)\");\n}\n\nfunction hslToRgba(hslValue) {\n var hsl = /hsl\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%\\)/g.exec(hslValue) || /hsla\\((\\d+),\\s*([\\d.]+)%,\\s*([\\d.]+)%,\\s*([\\d.]+)\\)/g.exec(hslValue);\n var h = parseInt(hsl[1], 10) / 360;\n var s = parseInt(hsl[2], 10) / 100;\n var l = parseInt(hsl[3], 10) / 100;\n var a = hsl[4] || 1;\n function hue2rgb(p, q, t) {\n if (t < 0) { t += 1; }\n if (t > 1) { t -= 1; }\n if (t < 1/6) { return p + (q - p) * 6 * t; }\n if (t < 1/2) { return q; }\n if (t < 2/3) { return p + (q - p) * (2/3 - t) * 6; }\n return p;\n }\n var r, g, b;\n if (s == 0) {\n r = g = b = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1/3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1/3);\n }\n return (\"rgba(\" + (r * 255) + \",\" + (g * 255) + \",\" + (b * 255) + \",\" + a + \")\");\n}\n\nfunction colorToRgb(val) {\n if (is.rgb(val)) { return rgbToRgba(val); }\n if (is.hex(val)) { return hexToRgba(val); }\n if (is.hsl(val)) { return hslToRgba(val); }\n}\n\n// Units\n\nfunction getUnit(val) {\n var split = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(val);\n if (split) { return split[1]; }\n}\n\nfunction getTransformUnit(propName) {\n if (stringContains(propName, 'translate') || propName === 'perspective') { return 'px'; }\n if (stringContains(propName, 'rotate') || stringContains(propName, 'skew')) { return 'deg'; }\n}\n\n// Values\n\nfunction getFunctionValue(val, animatable) {\n if (!is.fnc(val)) { return val; }\n return val(animatable.target, animatable.id, animatable.total);\n}\n\nfunction getAttribute(el, prop) {\n return el.getAttribute(prop);\n}\n\nfunction convertPxToUnit(el, value, unit) {\n var valueUnit = getUnit(value);\n if (arrayContains([unit, 'deg', 'rad', 'turn'], valueUnit)) { return value; }\n var cached = cache.CSS[value + unit];\n if (!is.und(cached)) { return cached; }\n var baseline = 100;\n var tempEl = document.createElement(el.tagName);\n var parentEl = (el.parentNode && (el.parentNode !== document)) ? el.parentNode : document.body;\n parentEl.appendChild(tempEl);\n tempEl.style.position = 'absolute';\n tempEl.style.width = baseline + unit;\n var factor = baseline / tempEl.offsetWidth;\n parentEl.removeChild(tempEl);\n var convertedUnit = factor * parseFloat(value);\n cache.CSS[value + unit] = convertedUnit;\n return convertedUnit;\n}\n\nfunction getCSSValue(el, prop, unit) {\n if (prop in el.style) {\n var uppercasePropName = prop.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n var value = el.style[prop] || getComputedStyle(el).getPropertyValue(uppercasePropName) || '0';\n return unit ? convertPxToUnit(el, value, unit) : value;\n }\n}\n\nfunction getAnimationType(el, prop) {\n if (is.dom(el) && !is.inp(el) && (getAttribute(el, prop) || (is.svg(el) && el[prop]))) { return 'attribute'; }\n if (is.dom(el) && arrayContains(validTransforms, prop)) { return 'transform'; }\n if (is.dom(el) && (prop !== 'transform' && getCSSValue(el, prop))) { return 'css'; }\n if (el[prop] != null) { return 'object'; }\n}\n\nfunction getElementTransforms(el) {\n if (!is.dom(el)) { return; }\n var str = el.style.transform || '';\n var reg = /(\\w+)\\(([^)]*)\\)/g;\n var transforms = new Map();\n var m; while (m = reg.exec(str)) { transforms.set(m[1], m[2]); }\n return transforms;\n}\n\nfunction getTransformValue(el, propName, animatable, unit) {\n var defaultVal = stringContains(propName, 'scale') ? 1 : 0 + getTransformUnit(propName);\n var value = getElementTransforms(el).get(propName) || defaultVal;\n if (animatable) {\n animatable.transforms.list.set(propName, value);\n animatable.transforms['last'] = propName;\n }\n return unit ? convertPxToUnit(el, value, unit) : value;\n}\n\nfunction getOriginalTargetValue(target, propName, unit, animatable) {\n switch (getAnimationType(target, propName)) {\n case 'transform': return getTransformValue(target, propName, animatable, unit);\n case 'css': return getCSSValue(target, propName, unit);\n case 'attribute': return getAttribute(target, propName);\n default: return target[propName] || 0;\n }\n}\n\nfunction getRelativeValue(to, from) {\n var operator = /^(\\*=|\\+=|-=)/.exec(to);\n if (!operator) { return to; }\n var u = getUnit(to) || 0;\n var x = parseFloat(from);\n var y = parseFloat(to.replace(operator[0], ''));\n switch (operator[0][0]) {\n case '+': return x + y + u;\n case '-': return x - y + u;\n case '*': return x * y + u;\n }\n}\n\nfunction validateValue(val, unit) {\n if (is.col(val)) { return colorToRgb(val); }\n if (/\\s/g.test(val)) { return val; }\n var originalUnit = getUnit(val);\n var unitLess = originalUnit ? val.substr(0, val.length - originalUnit.length) : val;\n if (unit) { return unitLess + unit; }\n return unitLess;\n}\n\n// getTotalLength() equivalent for circle, rect, polyline, polygon and line shapes\n// adapted from https://gist.github.com/SebLambla/3e0550c496c236709744\n\nfunction getDistance(p1, p2) {\n return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));\n}\n\nfunction getCircleLength(el) {\n return Math.PI * 2 * getAttribute(el, 'r');\n}\n\nfunction getRectLength(el) {\n return (getAttribute(el, 'width') * 2) + (getAttribute(el, 'height') * 2);\n}\n\nfunction getLineLength(el) {\n return getDistance(\n {x: getAttribute(el, 'x1'), y: getAttribute(el, 'y1')}, \n {x: getAttribute(el, 'x2'), y: getAttribute(el, 'y2')}\n );\n}\n\nfunction getPolylineLength(el) {\n var points = el.points;\n var totalLength = 0;\n var previousPos;\n for (var i = 0 ; i < points.numberOfItems; i++) {\n var currentPos = points.getItem(i);\n if (i > 0) { totalLength += getDistance(previousPos, currentPos); }\n previousPos = currentPos;\n }\n return totalLength;\n}\n\nfunction getPolygonLength(el) {\n var points = el.points;\n return getPolylineLength(el) + getDistance(points.getItem(points.numberOfItems - 1), points.getItem(0));\n}\n\n// Path animation\n\nfunction getTotalLength(el) {\n if (el.getTotalLength) { return el.getTotalLength(); }\n switch(el.tagName.toLowerCase()) {\n case 'circle': return getCircleLength(el);\n case 'rect': return getRectLength(el);\n case 'line': return getLineLength(el);\n case 'polyline': return getPolylineLength(el);\n case 'polygon': return getPolygonLength(el);\n }\n}\n\nfunction setDashoffset(el) {\n var pathLength = getTotalLength(el);\n el.setAttribute('stroke-dasharray', pathLength);\n return pathLength;\n}\n\n// Motion path\n\nfunction getParentSvgEl(el) {\n var parentEl = el.parentNode;\n while (is.svg(parentEl)) {\n if (!is.svg(parentEl.parentNode)) { break; }\n parentEl = parentEl.parentNode;\n }\n return parentEl;\n}\n\nfunction getParentSvg(pathEl, svgData) {\n var svg = svgData || {};\n var parentSvgEl = svg.el || getParentSvgEl(pathEl);\n var rect = parentSvgEl.getBoundingClientRect();\n var viewBoxAttr = getAttribute(parentSvgEl, 'viewBox');\n var width = rect.width;\n var height = rect.height;\n var viewBox = svg.viewBox || (viewBoxAttr ? viewBoxAttr.split(' ') : [0, 0, width, height]);\n return {\n el: parentSvgEl,\n viewBox: viewBox,\n x: viewBox[0] / 1,\n y: viewBox[1] / 1,\n w: width / viewBox[2],\n h: height / viewBox[3]\n }\n}\n\nfunction getPath(path, percent) {\n var pathEl = is.str(path) ? selectString(path)[0] : path;\n var p = percent || 100;\n return function(property) {\n return {\n property: property,\n el: pathEl,\n svg: getParentSvg(pathEl),\n totalLength: getTotalLength(pathEl) * (p / 100)\n }\n }\n}\n\nfunction getPathProgress(path, progress) {\n function point(offset) {\n if ( offset === void 0 ) offset = 0;\n\n var l = progress + offset >= 1 ? progress + offset : 0;\n return path.el.getPointAtLength(l);\n }\n var svg = getParentSvg(path.el, path.svg);\n var p = point();\n var p0 = point(-1);\n var p1 = point(+1);\n switch (path.property) {\n case 'x': return (p.x - svg.x) * svg.w;\n case 'y': return (p.y - svg.y) * svg.h;\n case 'angle': return Math.atan2(p1.y - p0.y, p1.x - p0.x) * 180 / Math.PI;\n }\n}\n\n// Decompose value\n\nfunction decomposeValue(val, unit) {\n // const rgx = /-?\\d*\\.?\\d+/g; // handles basic numbers\n // const rgx = /[+-]?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var rgx = /[+-]?\\d*\\.?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?/g; // handles exponents notation\n var value = validateValue((is.pth(val) ? val.totalLength : val), unit) + '';\n return {\n original: value,\n numbers: value.match(rgx) ? value.match(rgx).map(Number) : [0],\n strings: (is.str(val) || unit) ? value.split(rgx) : []\n }\n}\n\n// Animatables\n\nfunction parseTargets(targets) {\n var targetsArray = targets ? (flattenArray(is.arr(targets) ? targets.map(toArray) : toArray(targets))) : [];\n return filterArray(targetsArray, function (item, pos, self) { return self.indexOf(item) === pos; });\n}\n\nfunction getAnimatables(targets) {\n var parsed = parseTargets(targets);\n return parsed.map(function (t, i) {\n return {target: t, id: i, total: parsed.length, transforms: { list: getElementTransforms(t) } };\n });\n}\n\n// Properties\n\nfunction normalizePropertyTweens(prop, tweenSettings) {\n var settings = cloneObject(tweenSettings);\n // Override duration if easing is a spring\n if (/^spring/.test(settings.easing)) { settings.duration = spring(settings.easing); }\n if (is.arr(prop)) {\n var l = prop.length;\n var isFromTo = (l === 2 && !is.obj(prop[0]));\n if (!isFromTo) {\n // Duration divided by the number of tweens\n if (!is.fnc(tweenSettings.duration)) { settings.duration = tweenSettings.duration / l; }\n } else {\n // Transform [from, to] values shorthand to a valid tween value\n prop = {value: prop};\n }\n }\n var propArray = is.arr(prop) ? prop : [prop];\n return propArray.map(function (v, i) {\n var obj = (is.obj(v) && !is.pth(v)) ? v : {value: v};\n // Default delay value should only be applied to the first tween\n if (is.und(obj.delay)) { obj.delay = !i ? tweenSettings.delay : 0; }\n // Default endDelay value should only be applied to the last tween\n if (is.und(obj.endDelay)) { obj.endDelay = i === propArray.length - 1 ? tweenSettings.endDelay : 0; }\n return obj;\n }).map(function (k) { return mergeObjects(k, settings); });\n}\n\n\nfunction flattenKeyframes(keyframes) {\n var propertyNames = filterArray(flattenArray(keyframes.map(function (key) { return Object.keys(key); })), function (p) { return is.key(p); })\n .reduce(function (a,b) { if (a.indexOf(b) < 0) { a.push(b); } return a; }, []);\n var properties = {};\n var loop = function ( i ) {\n var propName = propertyNames[i];\n properties[propName] = keyframes.map(function (key) {\n var newKey = {};\n for (var p in key) {\n if (is.key(p)) {\n if (p == propName) { newKey.value = key[p]; }\n } else {\n newKey[p] = key[p];\n }\n }\n return newKey;\n });\n };\n\n for (var i = 0; i < propertyNames.length; i++) loop( i );\n return properties;\n}\n\nfunction getProperties(tweenSettings, params) {\n var properties = [];\n var keyframes = params.keyframes;\n if (keyframes) { params = mergeObjects(flattenKeyframes(keyframes), params); }\n for (var p in params) {\n if (is.key(p)) {\n properties.push({\n name: p,\n tweens: normalizePropertyTweens(params[p], tweenSettings)\n });\n }\n }\n return properties;\n}\n\n// Tweens\n\nfunction normalizeTweenValues(tween, animatable) {\n var t = {};\n for (var p in tween) {\n var value = getFunctionValue(tween[p], animatable);\n if (is.arr(value)) {\n value = value.map(function (v) { return getFunctionValue(v, animatable); });\n if (value.length === 1) { value = value[0]; }\n }\n t[p] = value;\n }\n t.duration = parseFloat(t.duration);\n t.delay = parseFloat(t.delay);\n return t;\n}\n\nfunction normalizeTweens(prop, animatable) {\n var previousTween;\n return prop.tweens.map(function (t) {\n var tween = normalizeTweenValues(t, animatable);\n var tweenValue = tween.value;\n var to = is.arr(tweenValue) ? tweenValue[1] : tweenValue;\n var toUnit = getUnit(to);\n var originalValue = getOriginalTargetValue(animatable.target, prop.name, toUnit, animatable);\n var previousValue = previousTween ? previousTween.to.original : originalValue;\n var from = is.arr(tweenValue) ? tweenValue[0] : previousValue;\n var fromUnit = getUnit(from) || getUnit(originalValue);\n var unit = toUnit || fromUnit;\n if (is.und(to)) { to = previousValue; }\n tween.from = decomposeValue(from, unit);\n tween.to = decomposeValue(getRelativeValue(to, from), unit);\n tween.start = previousTween ? previousTween.end : 0;\n tween.end = tween.start + tween.delay + tween.duration + tween.endDelay;\n tween.easing = parseEasings(tween.easing, tween.duration);\n tween.isPath = is.pth(tweenValue);\n tween.isColor = is.col(tween.from.original);\n if (tween.isColor) { tween.round = 1; }\n previousTween = tween;\n return tween;\n });\n}\n\n// Tween progress\n\nvar setProgressValue = {\n css: function (t, p, v) { return t.style[p] = v; },\n attribute: function (t, p, v) { return t.setAttribute(p, v); },\n object: function (t, p, v) { return t[p] = v; },\n transform: function (t, p, v, transforms, manual) {\n transforms.list.set(p, v);\n if (p === transforms.last || manual) {\n var str = '';\n transforms.list.forEach(function (value, prop) { str += prop + \"(\" + value + \") \"; });\n t.style.transform = str;\n }\n }\n};\n\n// Set Value helper\n\nfunction setTargetsValue(targets, properties) {\n var animatables = getAnimatables(targets);\n animatables.forEach(function (animatable) {\n for (var property in properties) {\n var value = getFunctionValue(properties[property], animatable);\n var target = animatable.target;\n var valueUnit = getUnit(value);\n var originalValue = getOriginalTargetValue(target, property, valueUnit, animatable);\n var unit = valueUnit || getUnit(originalValue);\n var to = getRelativeValue(validateValue(value, unit), originalValue);\n var animType = getAnimationType(target, property);\n setProgressValue[animType](target, property, to, animatable.transforms, true);\n }\n });\n}\n\n// Animations\n\nfunction createAnimation(animatable, prop) {\n var animType = getAnimationType(animatable.target, prop.name);\n if (animType) {\n var tweens = normalizeTweens(prop, animatable);\n var lastTween = tweens[tweens.length - 1];\n return {\n type: animType,\n property: prop.name,\n animatable: animatable,\n tweens: tweens,\n duration: lastTween.end,\n delay: tweens[0].delay,\n endDelay: lastTween.endDelay\n }\n }\n}\n\nfunction getAnimations(animatables, properties) {\n return filterArray(flattenArray(animatables.map(function (animatable) {\n return properties.map(function (prop) {\n return createAnimation(animatable, prop);\n });\n })), function (a) { return !is.und(a); });\n}\n\n// Create Instance\n\nfunction getInstanceTimings(animations, tweenSettings) {\n var animLength = animations.length;\n var getTlOffset = function (anim) { return anim.timelineOffset ? anim.timelineOffset : 0; };\n var timings = {};\n timings.duration = animLength ? Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration; })) : tweenSettings.duration;\n timings.delay = animLength ? Math.min.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.delay; })) : tweenSettings.delay;\n timings.endDelay = animLength ? timings.duration - Math.max.apply(Math, animations.map(function (anim) { return getTlOffset(anim) + anim.duration - anim.endDelay; })) : tweenSettings.endDelay;\n return timings;\n}\n\nvar instanceID = 0;\n\nfunction createNewInstance(params) {\n var instanceSettings = replaceObjectProps(defaultInstanceSettings, params);\n var tweenSettings = replaceObjectProps(defaultTweenSettings, params);\n var properties = getProperties(tweenSettings, params);\n var animatables = getAnimatables(params.targets);\n var animations = getAnimations(animatables, properties);\n var timings = getInstanceTimings(animations, tweenSettings);\n var id = instanceID;\n instanceID++;\n return mergeObjects(instanceSettings, {\n id: id,\n children: [],\n animatables: animatables,\n animations: animations,\n duration: timings.duration,\n delay: timings.delay,\n endDelay: timings.endDelay\n });\n}\n\n// Core\n\nvar activeInstances = [];\nvar pausedInstances = [];\nvar raf;\n\nvar engine = (function () {\n function play() { \n raf = requestAnimationFrame(step);\n }\n function step(t) {\n var activeInstancesLength = activeInstances.length;\n if (activeInstancesLength) {\n var i = 0;\n while (i < activeInstancesLength) {\n var activeInstance = activeInstances[i];\n if (!activeInstance.paused) {\n activeInstance.tick(t);\n } else {\n var instanceIndex = activeInstances.indexOf(activeInstance);\n if (instanceIndex > -1) {\n activeInstances.splice(instanceIndex, 1);\n activeInstancesLength = activeInstances.length;\n }\n }\n i++;\n }\n play();\n } else {\n raf = cancelAnimationFrame(raf);\n }\n }\n return play;\n})();\n\nfunction handleVisibilityChange() {\n if (document.hidden) {\n activeInstances.forEach(function (ins) { return ins.pause(); });\n pausedInstances = activeInstances.slice(0);\n anime.running = activeInstances = [];\n } else {\n pausedInstances.forEach(function (ins) { return ins.play(); });\n }\n}\n\nif (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', handleVisibilityChange);\n}\n\n// Public Instance\n\nfunction anime(params) {\n if ( params === void 0 ) params = {};\n\n\n var startTime = 0, lastTime = 0, now = 0;\n var children, childrenLength = 0;\n var resolve = null;\n\n function makePromise(instance) {\n var promise = window.Promise && new Promise(function (_resolve) { return resolve = _resolve; });\n instance.finished = promise;\n return promise;\n }\n\n var instance = createNewInstance(params);\n var promise = makePromise(instance);\n\n function toggleInstanceDirection() {\n var direction = instance.direction;\n if (direction !== 'alternate') {\n instance.direction = direction !== 'normal' ? 'normal' : 'reverse';\n }\n instance.reversed = !instance.reversed;\n children.forEach(function (child) { return child.reversed = instance.reversed; });\n }\n\n function adjustTime(time) {\n return instance.reversed ? instance.duration - time : time;\n }\n\n function resetTime() {\n startTime = 0;\n lastTime = adjustTime(instance.currentTime) * (1 / anime.speed);\n }\n\n function seekChild(time, child) {\n if (child) { child.seek(time - child.timelineOffset); }\n }\n\n function syncInstanceChildren(time) {\n if (!instance.reversePlayback) {\n for (var i = 0; i < childrenLength; i++) { seekChild(time, children[i]); }\n } else {\n for (var i$1 = childrenLength; i$1--;) { seekChild(time, children[i$1]); }\n }\n }\n\n function setAnimationsProgress(insTime) {\n var i = 0;\n var animations = instance.animations;\n var animationsLength = animations.length;\n while (i < animationsLength) {\n var anim = animations[i];\n var animatable = anim.animatable;\n var tweens = anim.tweens;\n var tweenLength = tweens.length - 1;\n var tween = tweens[tweenLength];\n // Only check for keyframes if there is more than one tween\n if (tweenLength) { tween = filterArray(tweens, function (t) { return (insTime < t.end); })[0] || tween; }\n var elapsed = minMax(insTime - tween.start - tween.delay, 0, tween.duration) / tween.duration;\n var eased = isNaN(elapsed) ? 1 : tween.easing(elapsed);\n var strings = tween.to.strings;\n var round = tween.round;\n var numbers = [];\n var toNumbersLength = tween.to.numbers.length;\n var progress = (void 0);\n for (var n = 0; n < toNumbersLength; n++) {\n var value = (void 0);\n var toNumber = tween.to.numbers[n];\n var fromNumber = tween.from.numbers[n] || 0;\n if (!tween.isPath) {\n value = fromNumber + (eased * (toNumber - fromNumber));\n } else {\n value = getPathProgress(tween.value, eased * toNumber);\n }\n if (round) {\n if (!(tween.isColor && n > 2)) {\n value = Math.round(value * round) / round;\n }\n }\n numbers.push(value);\n }\n // Manual Array.reduce for better performances\n var stringsLength = strings.length;\n if (!stringsLength) {\n progress = numbers[0];\n } else {\n progress = strings[0];\n for (var s = 0; s < stringsLength; s++) {\n var a = strings[s];\n var b = strings[s + 1];\n var n$1 = numbers[s];\n if (!isNaN(n$1)) {\n if (!b) {\n progress += n$1 + ' ';\n } else {\n progress += n$1 + b;\n }\n }\n }\n }\n setProgressValue[anim.type](animatable.target, anim.property, progress, animatable.transforms);\n anim.currentValue = progress;\n i++;\n }\n }\n\n function setCallback(cb) {\n if (instance[cb] && !instance.passThrough) { instance[cb](instance); }\n }\n\n function countIteration() {\n if (instance.remaining && instance.remaining !== true) {\n instance.remaining--;\n }\n }\n\n function setInstanceProgress(engineTime) {\n var insDuration = instance.duration;\n var insDelay = instance.delay;\n var insEndDelay = insDuration - instance.endDelay;\n var insTime = adjustTime(engineTime);\n instance.progress = minMax((insTime / insDuration) * 100, 0, 100);\n instance.reversePlayback = insTime < instance.currentTime;\n if (children) { syncInstanceChildren(insTime); }\n if (!instance.began && instance.currentTime > 0) {\n instance.began = true;\n setCallback('begin');\n }\n if (!instance.loopBegan && instance.currentTime > 0) {\n instance.loopBegan = true;\n setCallback('loopBegin');\n }\n if (insTime <= insDelay && instance.currentTime !== 0) {\n setAnimationsProgress(0);\n }\n if ((insTime >= insEndDelay && instance.currentTime !== insDuration) || !insDuration) {\n setAnimationsProgress(insDuration);\n }\n if (insTime > insDelay && insTime < insEndDelay) {\n if (!instance.changeBegan) {\n instance.changeBegan = true;\n instance.changeCompleted = false;\n setCallback('changeBegin');\n }\n setCallback('change');\n setAnimationsProgress(insTime);\n } else {\n if (instance.changeBegan) {\n instance.changeCompleted = true;\n instance.changeBegan = false;\n setCallback('changeComplete');\n }\n }\n instance.currentTime = minMax(insTime, 0, insDuration);\n if (instance.began) { setCallback('update'); }\n if (engineTime >= insDuration) {\n lastTime = 0;\n countIteration();\n if (!instance.remaining) {\n instance.paused = true;\n if (!instance.completed) {\n instance.completed = true;\n setCallback('loopComplete');\n setCallback('complete');\n if (!instance.passThrough && 'Promise' in window) {\n resolve();\n promise = makePromise(instance);\n }\n }\n } else {\n startTime = now;\n setCallback('loopComplete');\n instance.loopBegan = false;\n if (instance.direction === 'alternate') {\n toggleInstanceDirection();\n }\n }\n }\n }\n\n instance.reset = function() {\n var direction = instance.direction;\n instance.passThrough = false;\n instance.currentTime = 0;\n instance.progress = 0;\n instance.paused = true;\n instance.began = false;\n instance.loopBegan = false;\n instance.changeBegan = false;\n instance.completed = false;\n instance.changeCompleted = false;\n instance.reversePlayback = false;\n instance.reversed = direction === 'reverse';\n instance.remaining = instance.loop;\n children = instance.children;\n childrenLength = children.length;\n for (var i = childrenLength; i--;) { instance.children[i].reset(); }\n if (instance.reversed && instance.loop !== true || (direction === 'alternate' && instance.loop === 1)) { instance.remaining++; }\n setAnimationsProgress(instance.reversed ? instance.duration : 0);\n };\n\n // Set Value helper\n\n instance.set = function(targets, properties) {\n setTargetsValue(targets, properties);\n return instance;\n };\n\n instance.tick = function(t) {\n now = t;\n if (!startTime) { startTime = now; }\n setInstanceProgress((now + (lastTime - startTime)) * anime.speed);\n };\n\n instance.seek = function(time) {\n setInstanceProgress(adjustTime(time));\n };\n\n instance.pause = function() {\n instance.paused = true;\n resetTime();\n };\n\n instance.play = function() {\n if (!instance.paused) { return; }\n if (instance.completed) { instance.reset(); }\n instance.paused = false;\n activeInstances.push(instance);\n resetTime();\n if (!raf) { engine(); }\n };\n\n instance.reverse = function() {\n toggleInstanceDirection();\n instance.completed = instance.reversed ? false : true;\n resetTime();\n };\n\n instance.restart = function() {\n instance.reset();\n instance.play();\n };\n\n instance.reset();\n\n if (instance.autoplay) { instance.play(); }\n\n return instance;\n\n}\n\n// Remove targets from animation\n\nfunction removeTargetsFromAnimations(targetsArray, animations) {\n for (var a = animations.length; a--;) {\n if (arrayContains(targetsArray, animations[a].animatable.target)) {\n animations.splice(a, 1);\n }\n }\n}\n\nfunction removeTargets(targets) {\n var targetsArray = parseTargets(targets);\n for (var i = activeInstances.length; i--;) {\n var instance = activeInstances[i];\n var animations = instance.animations;\n var children = instance.children;\n removeTargetsFromAnimations(targetsArray, animations);\n for (var c = children.length; c--;) {\n var child = children[c];\n var childAnimations = child.animations;\n removeTargetsFromAnimations(targetsArray, childAnimations);\n if (!childAnimations.length && !child.children.length) { children.splice(c, 1); }\n }\n if (!animations.length && !children.length) { instance.pause(); }\n }\n}\n\n// Stagger helpers\n\nfunction stagger(val, params) {\n if ( params === void 0 ) params = {};\n\n var direction = params.direction || 'normal';\n var easing = params.easing ? parseEasings(params.easing) : null;\n var grid = params.grid;\n var axis = params.axis;\n var fromIndex = params.from || 0;\n var fromFirst = fromIndex === 'first';\n var fromCenter = fromIndex === 'center';\n var fromLast = fromIndex === 'last';\n var isRange = is.arr(val);\n var val1 = isRange ? parseFloat(val[0]) : parseFloat(val);\n var val2 = isRange ? parseFloat(val[1]) : 0;\n var unit = getUnit(isRange ? val[1] : val) || 0;\n var start = params.start || 0 + (isRange ? val1 : 0);\n var values = [];\n var maxValue = 0;\n return function (el, i, t) {\n if (fromFirst) { fromIndex = 0; }\n if (fromCenter) { fromIndex = (t - 1) / 2; }\n if (fromLast) { fromIndex = t - 1; }\n if (!values.length) {\n for (var index = 0; index < t; index++) {\n if (!grid) {\n values.push(Math.abs(fromIndex - index));\n } else {\n var fromX = !fromCenter ? fromIndex%grid[0] : (grid[0]-1)/2;\n var fromY = !fromCenter ? Math.floor(fromIndex/grid[0]) : (grid[1]-1)/2;\n var toX = index%grid[0];\n var toY = Math.floor(index/grid[0]);\n var distanceX = fromX - toX;\n var distanceY = fromY - toY;\n var value = Math.sqrt(distanceX * distanceX + distanceY * distanceY);\n if (axis === 'x') { value = -distanceX; }\n if (axis === 'y') { value = -distanceY; }\n values.push(value);\n }\n maxValue = Math.max.apply(Math, values);\n }\n if (easing) { values = values.map(function (val) { return easing(val / maxValue) * maxValue; }); }\n if (direction === 'reverse') { values = values.map(function (val) { return axis ? (val < 0) ? val * -1 : -val : Math.abs(maxValue - val); }); }\n }\n var spacing = isRange ? (val2 - val1) / maxValue : val1;\n return start + (spacing * (Math.round(values[i] * 100) / 100)) + unit;\n }\n}\n\n// Timeline\n\nfunction timeline(params) {\n if ( params === void 0 ) params = {};\n\n var tl = anime(params);\n tl.duration = 0;\n tl.add = function(instanceParams, timelineOffset) {\n var tlIndex = activeInstances.indexOf(tl);\n var children = tl.children;\n if (tlIndex > -1) { activeInstances.splice(tlIndex, 1); }\n function passThrough(ins) { ins.passThrough = true; }\n for (var i = 0; i < children.length; i++) { passThrough(children[i]); }\n var insParams = mergeObjects(instanceParams, replaceObjectProps(defaultTweenSettings, params));\n insParams.targets = insParams.targets || params.targets;\n var tlDuration = tl.duration;\n insParams.autoplay = false;\n insParams.direction = tl.direction;\n insParams.timelineOffset = is.und(timelineOffset) ? tlDuration : getRelativeValue(timelineOffset, tlDuration);\n passThrough(tl);\n tl.seek(insParams.timelineOffset);\n var ins = anime(insParams);\n passThrough(ins);\n children.push(ins);\n var timings = getInstanceTimings(children, params);\n tl.delay = timings.delay;\n tl.endDelay = timings.endDelay;\n tl.duration = timings.duration;\n tl.seek(0);\n tl.reset();\n if (tl.autoplay) { tl.play(); }\n return tl;\n };\n return tl;\n}\n\nanime.version = '3.2.0';\nanime.speed = 1;\nanime.running = activeInstances;\nanime.remove = removeTargets;\nanime.get = getOriginalTargetValue;\nanime.set = setTargetsValue;\nanime.convertPx = convertPxToUnit;\nanime.path = getPath;\nanime.setDashoffset = setDashoffset;\nanime.stagger = stagger;\nanime.timeline = timeline;\nanime.easing = parseEasings;\nanime.penner = penner;\nanime.random = function (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; };\n\nmodule.exports = anime;\n","/*\n # -----------------------------------------------------------------------------\n # ~/js/tocbot/tocbot.js\n # Tocbot v4.12.0 implementation for J1 template\n #\n # Product/Info:\n # https://jekyll.one\n # https://tscanlin.github.io/tocbot\n # https://github.com/tscanlin/tocbot\n #\n # Copyright (C) 2020 Juergen Adams\n # Copyright (C) 2016 Tim Scanlin\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n # Tocbot is licensed under the MIT License.\n # For details, https://github.com/tscanlin/tocbot/blob/master/LICENSE\n # -----------------------------------------------------------------------------\n # rules:\n # \"eslint:tocbot\": \"eslint --ignore-path .eslintignore src/tocbot/js\"\n # -----------------------------------------------------------------------------\n*/\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint semi: \"off\" */\n// -----------------------------------------------------------------------------\n\n/**\n * Tocbot\n * Tocbot creates a toble of contents based on HTML headings on a page,\n * this allows users to easily jump to different sections of the document.\n * Tocbot was inspired by tocify (http://gregfranko.com/jquery.tocify.js/).\n * The main differences are that it works natively without any need for jquery or jquery UI).\n *\n * @author Tim Scanlin\n */\n\n/* globals define */\n\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define([], factory(root))\n } else if (typeof exports === 'object') {\n module.exports = factory(root)\n } else {\n root.tocbot = factory(root)\n }\n})(typeof global !== 'undefined' ? global : this.window || this.global, function (root) {\n 'use strict'\n\n // Default options.\n var defaultOptions = require('./default-options.js')\n // Object to store current options.\n var options = {}\n // Object for public APIs.\n var tocbot = {}\n\n var BuildHtml = require('./build-html.js')\n var ParseContent = require('./parse-content.js')\n var updateTocScroll = require('./update-toc-scroll.js')\n // Keep these variables at top scope once options are passed in.\n var buildHtml\n var parseContent\n\n // Just return if its not a browser.\n var supports = !!root && !!root.document && !!root.document.querySelector && !!root.addEventListener // Feature test\n if (typeof window === 'undefined' && !supports) {\n return\n }\n var headingsArray\n\n // From: https://github.com/Raynos/xtend\n var hasOwnProperty = Object.prototype.hasOwnProperty\n function extend () {\n var target = {}\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n return target\n }\n\n // From: https://remysharp.com/2010/07/21/throttling-function-calls\n function throttle (fn, threshold, scope) {\n threshold || (threshold = 250)\n var last\n var deferTimer\n return function () {\n var context = scope || this\n var now = +new Date()\n var args = arguments\n if (last && now < last + threshold) {\n // hold on to it\n clearTimeout(deferTimer)\n deferTimer = setTimeout(function () {\n last = now\n fn.apply(context, args)\n }, threshold)\n } else {\n last = now\n fn.apply(context, args)\n }\n }\n }\n\n /**\n * Destroy tocbot.\n */\n tocbot.destroy = function () {\n if (!options.skipRendering) {\n // Clear HTML.\n try {\n document.querySelector(options.tocSelector).innerHTML = ''\n } catch (e) {\n console.warn('Element not found: ' + options.tocSelector); // eslint-disable-line\n }\n }\n\n // Remove event listeners.\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).removeEventListener('scroll', this._scrollListener, false)\n document.querySelector(options.scrollContainer).removeEventListener('resize', this._scrollListener, false)\n if (buildHtml) {\n document.querySelector(options.scrollContainer).removeEventListener('click', this._clickListener, false)\n }\n } else {\n document.removeEventListener('scroll', this._scrollListener, false)\n document.removeEventListener('resize', this._scrollListener, false)\n if (buildHtml) {\n document.removeEventListener('click', this._clickListener, false)\n }\n }\n }\n\n /**\n * Initialize tocbot.\n * @param {object} customOptions\n */\n tocbot.init = function (customOptions) {\n // feature test\n if (!supports) {\n return\n }\n\n // Merge defaults with user options.\n // Set to options variable at the top.\n options = extend(defaultOptions, customOptions || {})\n this.options = options\n this.state = {}\n\n // Init smooth scroll if enabled (default).\n if (options.scrollSmooth) {\n options.duration = options.scrollSmoothDuration\n options.offset = options.scrollSmoothOffset\n tocbot.scrollSmooth = require('./scroll-smooth').initSmoothScrolling(options)\n }\n\n // Pass options to these modules.\n buildHtml = BuildHtml(options)\n parseContent = ParseContent(options)\n\n // For testing purposes.\n this._buildHtml = buildHtml\n this._parseContent = parseContent\n\n // Destroy it if it exists first.\n tocbot.destroy()\n\n // Get headings array.\n headingsArray = parseContent.selectHeadings(options.contentSelector, options.headingSelector)\n // Return if no headings are found.\n if (headingsArray === null) {\n return\n }\n\n // Build nested headings array.\n var nestedHeadingsObj = parseContent.nestHeadingsArray(headingsArray)\n var nestedHeadings = nestedHeadingsObj.nest\n\n // Render.\n if (!options.skipRendering) {\n buildHtml.render(options.tocSelector, nestedHeadings)\n }\n\n // Update Sidebar and bind listeners.\n this._scrollListener = throttle(function (e) {\n buildHtml.updateToc(headingsArray)\n !options.disableTocScrollSync && updateTocScroll(options)\n var isTop = e && e.target && e.target.scrollingElement && e.target.scrollingElement.scrollTop === 0\n if ((e && (e.eventPhase === 0 || e.currentTarget === null)) || isTop) {\n buildHtml.updateToc(headingsArray)\n if (options.scrollEndCallback) {\n options.scrollEndCallback(e)\n }\n }\n }, options.throttleTimeout)\n this._scrollListener()\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).addEventListener('scroll', this._scrollListener, false)\n document.querySelector(options.scrollContainer).addEventListener('resize', this._scrollListener, false)\n } else {\n document.addEventListener('scroll', this._scrollListener, false)\n document.addEventListener('resize', this._scrollListener, false)\n }\n\n // Bind click listeners to disable animation.\n var timeout = null\n this._clickListener = throttle(function (event) {\n if (options.scrollSmooth) {\n buildHtml.disableTocAnimation(event)\n }\n buildHtml.updateToc(headingsArray)\n // Timeout to re-enable the animation.\n timeout && clearTimeout(timeout)\n timeout = setTimeout(function () {\n buildHtml.enableTocAnimation()\n }, options.scrollSmoothDuration)\n }, options.throttleTimeout)\n\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n document.querySelector(options.scrollContainer).addEventListener('click', this._clickListener, false)\n } else {\n document.addEventListener('click', this._clickListener, false)\n }\n\n return this\n }\n\n /**\n * Refresh tocbot.\n */\n tocbot.refresh = function (customOptions) {\n tocbot.destroy()\n tocbot.init(customOptions || this.options)\n }\n\n // Make tocbot available globally.\n root.tocbot = tocbot\n\n return tocbot\n})\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint no-unused-vars: \"off\" */\n// -----------------------------------------------------------------------------\n\nmodule.exports = {\n // Where to render the table of contents.\n tocSelector: '.js-toc',\n // Where to grab the headings to build the table of contents.\n contentSelector: '.js-toc-content',\n // Which headings to grab inside of the contentSelector element.\n headingSelector: 'h1, h2, h3',\n // Headings that match the ignoreSelector will be skipped.\n ignoreSelector: '.js-toc-ignore',\n // For headings inside relative or absolute positioned containers within content\n hasInnerContainers: false,\n // Main class to add to links.\n linkClass: 'toc-link',\n // Extra classes to add to links.\n extraLinkClasses: '',\n // Class to add to active links,\n // the link corresponding to the top most heading on the page.\n activeLinkClass: 'is-active-link',\n // Main class to add to lists.\n listClass: 'toc-list',\n // Extra classes to add to lists.\n extraListClasses: '',\n // Class that gets added when a list should be collapsed.\n isCollapsedClass: 'is-collapsed',\n // Class that gets added when a list should be able\n // to be collapsed but isn't necessarily collapsed.\n collapsibleClass: 'is-collapsible',\n // Class to add to list items.\n listItemClass: 'toc-list-item',\n // Class to add to active list items.\n activeListItemClass: 'is-active-li',\n // How many heading levels should not be collapsed.\n // For example, number 6 will show everything since\n // there are only 6 heading levels and number 0 will collapse them all.\n // The sections that are hidden will open\n // and close as you scroll to headings within them.\n collapseDepth: 0,\n // Smooth scrolling enabled.\n scrollSmooth: true,\n // Smooth scroll duration.\n scrollSmoothDuration: 420,\n // Smooth scroll offset.\n scrollSmoothOffset: 0,\n // Callback for scroll end.\n scrollEndCallback: function (e) {},\n // Headings offset between the headings and the top of the document (this is meant for minor adjustments).\n headingsOffset: 1,\n // Timeout between events firing to make sure it's\n // not too rapid (for performance reasons).\n throttleTimeout: 50,\n // Element to add the positionFixedClass to.\n positionFixedSelector: null,\n // Fixed position class to add to make sidebar fixed after scrolling\n // down past the fixedSidebarOffset.\n positionFixedClass: 'is-position-fixed',\n // fixedSidebarOffset can be any number but by default is set\n // to auto which sets the fixedSidebarOffset to the sidebar\n // element's offsetTop from the top of the document on init.\n fixedSidebarOffset: 'auto',\n // includeHtml can be set to true to include the HTML markup from the\n // heading node instead of just including the textContent.\n includeHtml: false,\n // onclick function to apply to all links in toc. will be called with\n // the event as the first parameter, and this can be used to stop,\n // propagation, prevent default or perform action\n onClick: function (e) {},\n // orderedList can be set to false to generate unordered lists (ul)\n // instead of ordered lists (ol)\n orderedList: true,\n // If there is a fixed article scroll container, set to calculate titles' offset\n scrollContainer: null,\n // prevent ToC DOM rendering if it's already rendered by an external system\n skipRendering: false,\n // Optional callback to change heading labels.\n // For example it can be used to cut down and put ellipses on multiline headings you deem too long.\n // Called each time a heading is parsed. Expects a string in return, the modified label to display.\n // function (string) => string\n headingLabelCallback: false,\n // ignore headings that are hidden in DOM\n ignoreHiddenElements: false,\n // Optional callback to modify properties of parsed headings.\n // The heading element is passed in node parameter and information parsed by default parser is provided in obj parameter.\n // Function has to return the same or modified obj.\n // The heading will be excluded from TOC if nothing is returned.\n // function (object, HTMLElement) => object | void\n headingObjectCallback: null,\n // Set the base path, useful if you use a `base` tag in `head`.\n basePath: '',\n // Only takes affect when `tocSelector` is scrolling,\n // keep the toc scroll position in sync with the content.\n disableTocScrollSync: false,\n};\n","/**\n * This file is responsible for building the DOM and updating DOM state.\n *\n * @author Tim Scanlin\n */\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint semi: \"off\" */\n// -----------------------------------------------------------------------------\n\nmodule.exports = function (options) {\n var forEach = [].forEach\n var some = [].some\n var body = document.body\n var currentlyHighlighting = true\n var SPACE_CHAR = ' '\n\n /**\n * Create link and list elements.\n * @param {Object} d\n * @param {HTMLElement} container\n * @return {HTMLElement}\n */\n function createEl (d, container) {\n var link = container.appendChild(createLink(d))\n if (d.children.length) {\n var list = createList(d.isCollapsed)\n d.children.forEach(function (child) {\n createEl(child, list)\n })\n link.appendChild(list)\n }\n }\n\n /**\n * Render nested heading array data into a given selector.\n * @param {String} selector\n * @param {Array} data\n * @return {HTMLElement}\n */\n function render (selector, data) {\n var collapsed = false\n var container = createList(collapsed)\n\n data.forEach(function (d) {\n createEl(d, container)\n })\n\n var parent = document.querySelector(selector)\n\n // Return if no parent is found.\n if (parent === null) {\n return\n }\n\n // Remove existing child if it exists.\n if (parent.firstChild) {\n parent.removeChild(parent.firstChild)\n }\n\n // Just return the parent and don't append the list if no links are found.\n if (data.length === 0) {\n return parent\n }\n\n // Append the Elements that have been created\n return parent.appendChild(container)\n }\n\n /**\n * Create link element.\n * @param {Object} data\n * @return {HTMLElement}\n */\n function createLink (data) {\n var item = document.createElement('li')\n var a = document.createElement('a')\n if (options.listItemClass) {\n item.setAttribute('class', options.listItemClass)\n }\n\n if (options.onClick) {\n a.onclick = options.onClick\n }\n\n if (options.includeHtml && data.childNodes.length) {\n forEach.call(data.childNodes, function (node) {\n a.appendChild(node.cloneNode(true))\n })\n } else {\n // Default behavior.\n a.textContent = data.textContent\n }\n a.setAttribute('href', options.basePath + '#' + data.id)\n a.setAttribute('class', options.linkClass +\n SPACE_CHAR + 'node-name--' + data.nodeName +\n SPACE_CHAR + options.extraLinkClasses)\n item.appendChild(a)\n return item\n }\n\n /**\n * Create list element.\n * @param {Boolean} isCollapsed\n * @return {HTMLElement}\n */\n function createList (isCollapsed) {\n var listElement = (options.orderedList) ? 'ol' : 'ul'\n var list = document.createElement(listElement)\n var classes = options.listClass +\n SPACE_CHAR + options.extraListClasses\n if (isCollapsed) {\n classes += SPACE_CHAR + options.collapsibleClass\n classes += SPACE_CHAR + options.isCollapsedClass\n }\n list.setAttribute('class', classes)\n return list\n }\n\n /**\n * Update fixed sidebar class.\n * @return {HTMLElement}\n */\n function updateFixedSidebarClass () {\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n var top\n top = document.querySelector(options.scrollContainer).scrollTop\n } else {\n top = document.documentElement.scrollTop || body.scrollTop\n }\n var posFixedEl = document.querySelector(options.positionFixedSelector)\n\n if (options.fixedSidebarOffset === 'auto') {\n options.fixedSidebarOffset = document.querySelector(options.tocSelector).offsetTop\n }\n\n if (top > options.fixedSidebarOffset) {\n if (posFixedEl.className.indexOf(options.positionFixedClass) === -1) {\n posFixedEl.className += SPACE_CHAR + options.positionFixedClass\n }\n } else {\n posFixedEl.className = posFixedEl.className.split(SPACE_CHAR + options.positionFixedClass).join('')\n }\n }\n\n /**\n * Get top position of heading\n * @param {HTMLElement}\n * @return {integer} position\n */\n function getHeadingTopPos (obj) {\n var position = 0\n if (obj !== document.querySelector(options.contentSelector && obj != null)) {\n position = obj.offsetTop\n if (options.hasInnerContainers) { position += getHeadingTopPos(obj.offsetParent) }\n }\n return position\n }\n\n /**\n * Update TOC highlighting and collapsed groups\n */\n function updateToc (headingsArray) {\n // If a fixed content container was set\n if (options.scrollContainer && document.querySelector(options.scrollContainer)) {\n var top\n top = document.querySelector(options.scrollContainer).scrollTop\n } else {\n top = document.documentElement.scrollTop || body.scrollTop\n }\n\n // Add fixed class at offset\n if (options.positionFixedSelector) {\n updateFixedSidebarClass()\n }\n\n // Get the most TOP heading currently visible on the page to\n // identify what element to be highlighted\n var headings = headingsArray;\n var topHeader;\n var headingTopPos;\n\n // Using some instead of each so that we can escape early\n if (currentlyHighlighting &&\n document.querySelector(options.tocSelector) !== null &&\n headings.length > 0) {\n some.call(headings, function (heading, i) {\n headingTopPos = getHeadingTopPos(heading)\n if (headingTopPos > top + options.headingsOffset + 10) {\n // Don't allow negative index value\n // var index = (i === 0) ? i : i - 1;\n // topHeader = headings[index];\n // jadams, index correction seems NOT needed\n topHeader = headings[i];\n return true\n } else if (i === headings.length - 1) {\n // This allows scrolling for the last heading on the page\n topHeader = headings[headings.length - 1]\n return true\n }\n })\n\n // Remove the active class from the other tocLinks.\n var tocLinks = document.querySelector(options.tocSelector)\n .querySelectorAll('.' + options.linkClass)\n forEach.call(tocLinks, function (tocLink) {\n tocLink.className = tocLink.className.split(SPACE_CHAR + options.activeLinkClass).join('')\n })\n var tocLis = document.querySelector(options.tocSelector)\n .querySelectorAll('.' + options.listItemClass)\n forEach.call(tocLis, function (tocLi) {\n tocLi.className = tocLi.className.split(SPACE_CHAR + options.activeListItemClass).join('')\n })\n\n // Add the active class to the active tocLink.\n var activeTocLink = document.querySelector(options.tocSelector)\n .querySelector('.' + options.linkClass +\n '.node-name--' + topHeader.nodeName +\n '[href=\"' + options.basePath + '#' + topHeader.id.replace(/([ #;&,.+*~':\"!^$[\\]()=>|/@])/g, '\\\\$1') + '\"]')\n if (activeTocLink.className.indexOf(options.activeLinkClass) === -1) {\n activeTocLink.className += SPACE_CHAR + options.activeLinkClass\n }\n var li = activeTocLink.parentNode\n if (li && li.className.indexOf(options.activeListItemClass) === -1) {\n li.className += SPACE_CHAR + options.activeListItemClass\n }\n\n var tocLists = document.querySelector(options.tocSelector)\n .querySelectorAll('.' + options.listClass + '.' + options.collapsibleClass)\n\n // Collapse the other collapsible lists.\n forEach.call(tocLists, function (list) {\n if (list.className.indexOf(options.isCollapsedClass) === -1) {\n list.className += SPACE_CHAR + options.isCollapsedClass\n }\n })\n\n // Expand the active link's collapsible list and its sibling if applicable.\n if (activeTocLink.nextSibling && activeTocLink.nextSibling.className.indexOf(options.isCollapsedClass) !== -1) {\n activeTocLink.nextSibling.className = activeTocLink.nextSibling.className.split(SPACE_CHAR + options.isCollapsedClass).join('')\n }\n removeCollapsedFromParents(activeTocLink.parentNode.parentNode)\n }\n }\n\n /**\n * Remove collpased class from parent elements.\n * @param {HTMLElement} element\n * @return {HTMLElement}\n */\n function removeCollapsedFromParents (element) {\n if (element.className.indexOf(options.collapsibleClass) !== -1 && element.className.indexOf(options.isCollapsedClass) !== -1) {\n element.className = element.className.split(SPACE_CHAR + options.isCollapsedClass).join('')\n return removeCollapsedFromParents(element.parentNode.parentNode)\n }\n return element\n }\n\n /**\n * Disable TOC Animation when a link is clicked.\n * @param {Event} event\n */\n function disableTocAnimation (event) {\n var target = event.target || event.srcElement\n if (typeof target.className !== 'string' || target.className.indexOf(options.linkClass) === -1) {\n return\n }\n // Bind to tocLink clicks to temporarily disable highlighting\n // while smoothScroll is animating.\n currentlyHighlighting = false\n }\n\n /**\n * Enable TOC Animation.\n */\n function enableTocAnimation () {\n currentlyHighlighting = true\n }\n\n return {\n enableTocAnimation: enableTocAnimation,\n disableTocAnimation: disableTocAnimation,\n render: render,\n updateToc: updateToc\n }\n}\n","/**\n * This file is responsible for parsing the content from the DOM and making\n * sure data is nested properly.\n *\n * @author Tim Scanlin\n */\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint semi: \"off\" */\n// -----------------------------------------------------------------------------\n\nmodule.exports = function parseContent (options) {\n var reduce = [].reduce\n\n /**\n * Get the last item in an array and return a reference to it.\n * @param {Array} array\n * @return {Object}\n */\n function getLastItem (array) {\n return array[array.length - 1]\n }\n\n /**\n * Get heading level for a heading dom node.\n * @param {HTMLElement} heading\n * @return {Number}\n */\n function getHeadingLevel (heading) {\n return +heading.nodeName.split('H').join('')\n }\n\n /**\n * Get important properties from a heading element and store in a plain object.\n * @param {HTMLElement} heading\n * @return {Object}\n */\n function getHeadingObject (heading) {\n // each node is processed twice by this method because nestHeadingsArray() and addNode() calls it\n // first time heading is real DOM node element, second time it is obj\n // that is causing problem so I am processing only original DOM node\n if (!(heading instanceof window.HTMLElement)) return heading\n\n if (options.ignoreHiddenElements && (!heading.offsetHeight || !heading.offsetParent)) {\n return null\n }\n\n var obj = {\n id: heading.id,\n children: [],\n nodeName: heading.nodeName,\n headingLevel: getHeadingLevel(heading),\n textContent: options.headingLabelCallback ? String(options.headingLabelCallback(heading.textContent)) : heading.textContent.trim()\n }\n\n if (options.includeHtml) {\n obj.childNodes = heading.childNodes\n }\n\n if (options.headingObjectCallback) {\n return options.headingObjectCallback(obj, heading)\n }\n\n return obj\n }\n\n /**\n * Add a node to the nested array.\n * @param {Object} node\n * @param {Array} nest\n * @return {Array}\n */\n function addNode (node, nest) {\n var obj = getHeadingObject(node)\n var level = obj.headingLevel\n var array = nest\n var lastItem = getLastItem(array)\n var lastItemLevel = lastItem\n ? lastItem.headingLevel\n : 0\n var counter = level - lastItemLevel\n\n while (counter > 0) {\n lastItem = getLastItem(array)\n if (lastItem && lastItem.children !== undefined) {\n array = lastItem.children\n }\n counter--\n }\n\n if (level >= options.collapseDepth) {\n obj.isCollapsed = true\n }\n\n array.push(obj)\n return array\n }\n\n /**\n * Select headings in content area, exclude any selector in options.ignoreSelector\n * @param {String} contentSelector\n * @param {Array} headingSelector\n * @return {Array}\n */\n function selectHeadings (contentSelector, headingSelector) {\n var selectors = headingSelector\n if (options.ignoreSelector) {\n selectors = headingSelector.split(',')\n .map(function mapSelectors (selector) {\n return selector.trim() + ':not(' + options.ignoreSelector + ')'\n })\n }\n try {\n return document.querySelector(contentSelector)\n .querySelectorAll(selectors)\n } catch (e) {\n console.warn('Element not found: ' + contentSelector); // eslint-disable-line\n return null\n }\n }\n\n /**\n * Nest headings array into nested arrays with 'children' property.\n * @param {Array} headingsArray\n * @return {Object}\n */\n function nestHeadingsArray (headingsArray) {\n return reduce.call(headingsArray, function reducer (prev, curr) {\n var currentHeading = getHeadingObject(curr)\n if (currentHeading) {\n addNode(currentHeading, prev.nest)\n }\n return prev\n }, {\n nest: []\n })\n }\n\n return {\n nestHeadingsArray: nestHeadingsArray,\n selectHeadings: selectHeadings\n }\n}\n","// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint semi: \"off\" */\n// -----------------------------------------------------------------------------\n\nmodule.exports = function updateTocScroll(options) {\n var toc = document.querySelector(options.tocSelector);\n if (toc && toc.scrollHeight > toc.clientHeight) {\n var activeItem = toc.querySelector('.' + options.activeListItemClass);\n if (activeItem) {\n toc.scrollTop = activeItem.offsetTop;\n }\n }\n}\n","/*\n # -----------------------------------------------------------------------------\n # ~/js/tocbot/scroll-smooth/index.js\n # Scroll-Smooth (Tocbot v4.12.0) implementation for J1 template\n #\n # Product/Info:\n # https://jekyll.one\n # https://tscanlin.github.io/tocbot\n # https://github.com/tscanlin/tocbot\n #\n # Copyright (C) 2020 Juergen Adams\n # Copyright (C) 2016 Tim Scanlin\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n # Tocbot is licensed under the MIT License.\n # For details, https://github.com/tscanlin/tocbot/blob/master/LICENSE\n # -----------------------------------------------------------------------------\n*/\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint no-redeclare: \"off\" */\n/* eslint no-undef: \"off\" */\n/* eslint no-empty: \"off\" */\n/* eslint semi: \"off\" */\n// -----------------------------------------------------------------------------\n/* globals location, requestAnimationFrame */\n\nexports.initSmoothScrolling = initSmoothScrolling\n\nfunction initSmoothScrolling (options) {\n if (isCssSmoothSCrollSupported()) { }\n\n var duration = options.duration\n var offset = options.offset\n\n var pageUrl = location.hash\n ? stripHash(location.href)\n : location.href\n\n delegatedLinkHijacking()\n\n function delegatedLinkHijacking () {\n document.body.addEventListener('click', onClick, false)\n\n function onClick (e) {\n if (\n !isInPageLink(e.target) ||\n e.target.className.indexOf('no-smooth-scroll') > -1 ||\n (e.target.href.charAt(e.target.href.length - 2) === '#' &&\n e.target.href.charAt(e.target.href.length - 1) === '!') ||\n e.target.className.indexOf(options.linkClass) === -1) {\n return\n }\n\n // Don't prevent default or hash doesn't change.\n // e.preventDefault()\n\n jump(e.target.hash, {\n duration: duration,\n offset: offset,\n callback: function () {\n setFocus(e.target.hash)\n }\n })\n }\n }\n\n function isInPageLink (n) {\n return n.tagName.toLowerCase() === 'a' &&\n (n.hash.length > 0 || n.href.charAt(n.href.length - 1) === '#') &&\n (stripHash(n.href) === pageUrl || stripHash(n.href) + '#' === pageUrl)\n }\n\n function stripHash (url) {\n return url.slice(0, url.lastIndexOf('#'))\n }\n\n function isCssSmoothSCrollSupported () {\n return 'scrollBehavior' in document.documentElement.style\n }\n\n // Adapted from:\n // https://www.nczonline.net/blog/2013/01/15/fixing-skip-to-content-links/\n function setFocus (hash) {\n var element = document.getElementById(hash.substring(1))\n\n if (element) {\n if (!/^(?:a|select|input|button|textarea)$/i.test(element.tagName)) {\n element.tabIndex = -1\n }\n\n element.focus()\n }\n }\n}\n\nfunction jump (target, options) {\n var start = window.pageYOffset\n var opt = {\n duration: options.duration,\n offset: options.offset || 0,\n callback: options.callback,\n easing: options.easing || easeInOutQuad\n }\n // This makes ids that start with a number work: ('[id=\"' + decodeURI(target).split('#').join('') + '\"]')\n // DecodeURI for nonASCII hashes, they was encoded, but id was not encoded, it lead to not finding the tgt element by id.\n // And this is for IE: document.body.scrollTop\n var tgt = document.querySelector('[id=\"' + decodeURI(target).split('#').join('') + '\"]')\n var distance = typeof target === 'string'\n ? opt.offset + (\n target\n ? (tgt && tgt.getBoundingClientRect().top) || 0 // handle non-existent links better.\n : -(document.documentElement.scrollTop || document.body.scrollTop))\n : target\n var duration = typeof opt.duration === 'function'\n ? opt.duration(distance)\n : opt.duration\n var timeStart\n var timeElapsed\n\n requestAnimationFrame(function (time) { timeStart = time; loop(time) })\n function loop (time) {\n timeElapsed = time - timeStart\n\n window.scrollTo(0, opt.easing(timeElapsed, start, distance, duration))\n\n if (timeElapsed < duration) { requestAnimationFrame(loop) } else { end() }\n }\n\n function end () {\n window.scrollTo(0, start + distance)\n\n if (typeof opt.callback === 'function') { opt.callback() }\n }\n\n // Robert Penner's easeInOutQuad - http://robertpenner.com/easing/\n function easeInOutQuad (t, b, c, d) {\n t /= d / 2\n if (t < 1) return c / 2 * t * t + b\n t--\n return -c / 2 * (t * (t - 2) - 1) + b\n }\n}\n","/*\n # -----------------------------------------------------------------------------\n # ~/js/adoc_result_viewer/view_results.js\n # Provides JavaScript functions displaying results for Asciidoctor\n #\n # Product/Info:\n # https://jekyll.one\n #\n # Copyright (C) 2020 Juergen Adams\n #\n # J1 Template is licensed under MIT License.\n # See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE\n #\n # -----------------------------------------------------------------------------\n*/\n\n// -----------------------------------------------------------------------------\n// ESLint shimming\n// -----------------------------------------------------------------------------\n/* eslint indent: \"off\" */\n/* global $ */\n// -----------------------------------------------------------------------------\n\n/*!\n * J1 ADoc ResultViewer\n * Copyright (C) 2020 Juergen Adams\n * Licensed under MIT License.\n */\n\nvar timeoutHandle;\n\nfunction toggle_result_block(result_block) {\n window.clearTimeout(timeoutHandle); // Clear the timeout object\n result_block.prev().toggleClass('stacked');\n result_block.toggle();\n // timeoutHandle = window.setTimeout(function () {\n // result_block.hide();\n // }, 5000);\n}\n\nfunction insert_result_links() {\n $('.result').each(function(idx, node) {\n var result_block = $(node);\n var title_div = result_block.prev().find('.title');\n var view_result_link = $('
    View
    ');\n title_div.append(view_result_link);\n view_result_link.on('click', function(event) {\n event.preventDefault();\n toggle_result_block(result_block);\n });\n });\n}\n\n$(insert_result_links);\n"],"sourceRoot":""}