// Fix DOM matches function if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function(s) { var matches = (this.document || this.ownerDocument).querySelectorAll(s), i = matches.length; while (--i >= 0 && matches.item(i) !== this) {} return i > -1; }; } // Get Scroll position function getScrollPos() { var supportPageOffset = window.pageXOffset !== undefined; var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat"); var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft; var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop; return { x: x, y: y }; } var _scrollTimer = []; // Smooth scroll function smoothScrollTo(y, time) { time = time == undefined ? 500 : time; var scrollPos = getScrollPos(); var count = 60; var length = (y - scrollPos.y); function easeInOut(k) { return .5 * (Math.sin((k - .5) * Math.PI) + 1); } for (var i = _scrollTimer.length - 1; i >= 0; i--) { clearTimeout(_scrollTimer[i]); } for (var i = 0; i <= count; i++) { (function() { var cur = i; _scrollTimer[cur] = setTimeout(function() { window.scrollTo( scrollPos.x, scrollPos.y + length * easeInOut(cur/count) ); }, (time / count) * cur); })(); } } // Init highlight js document.addEventListener('DOMContentLoaded', function(event) { var els = document.querySelectorAll('pre code') function handle(block) { var outer = block.parentElement.parentElement.parentElement; var lang = block.getAttribute('data-lang'); for (var i = 0; i < outer.classList.length; i++) { var cls = outer.classList[i]; if (cls.startsWith('language-')) { lang = cls; break; } } if (!lang) { cls = block.getAttribute('class'); lang = cls ? cls.replace('hljs ', '') : ''; } if (lang.startsWith('language-')) { lang = lang.substr(9); } block.setAttribute('class', 'hljs ' + lang); block.parentNode.setAttribute('data-lang', lang); hljs.highlightBlock(block); } for (var i = 0; i < els.length; i++) { var el = els[i]; handle(el); } });