-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomponent---src-templates-blog-post-js-0f972131b52cee8ee2ad.js.map
1 lines (1 loc) ยท 38.2 KB
/
component---src-templates-blog-post-js-0f972131b52cee8ee2ad.js.map
1
{"version":3,"sources":["webpack:///./node_modules/react-disqus-comments/build/main.js","webpack:///./node_modules/react-disqus-comments/build/components/DisqusThread.js","webpack:///./src/components/elements/hr/index.jsx","webpack:///./src/components/post-title/index.jsx","webpack:///./src/components/post-date/index.jsx","webpack:///./src/components/post-container/index.jsx","webpack:///./src/components/social-share/facebook-icon/index.jsx","webpack:///./src/components/social-share/twitter-icon/index.jsx","webpack:///./src/components/social-share/index.jsx","webpack:///./src/utils/share.js","webpack:///./src/components/sponsor-button/index.jsx","webpack:///./src/components/post-navigator/index.jsx","webpack:///./node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","webpack:///./src/components/disqus/index.jsx","webpack:///./src/components/table-of-contents/index.jsx","webpack:///./src/components/scroll-indicator/index.jsx","webpack:///./src/components/top-sticky-container/index.jsx","webpack:///./src/templates/blog-post.js"],"names":["module","exports","Object","defineProperty","value","_extends","assign","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","_createClass","defineProperties","props","descriptor","enumerable","configurable","writable","Constructor","protoProps","staticProps","_react2","_interopRequireDefault","_propTypes2","obj","__esModule","default","_classCallCheck","instance","TypeError","_possibleConstructorReturn","self","ReferenceError","DISQUS_CONFIG","__disqusAdded","copyProps","context","onNewComment","language","rest","keys","indexOf","_objectWithoutProperties","prop","page","callbacks","DisqusThread","_React$Component","this","__proto__","getPrototypeOf","apply","subClass","superClass","create","constructor","setPrototypeOf","_inherits","loadDisqus","nextProps","nextState","identifier","_this2","reduce","memo","some","config","_defineProperty","createElement","id","child","disqus","document","parent","getElementsByTagName","async","type","src","shortname","appendChild","_this3","forEach","DISQUS","reset","reload","url","replace","window","disqus_config","addDisqusScript","Component","displayName","propTypes","string","isRequired","title","category_id","func","defaultProps","location","href","Hr","className","PostTitle","PostDate","date","PostContainer","html","post_content","dangerouslySetInnerHTML","__html","FacebookIcon","onClick","rel","aria-label","aria-hidden","xmlns","viewBox","d","TwitterIcon","SocialShare","text","author","e","preventDefault","FB","ui","method","mobile_iframe","quote","shareToFacebook","open","encodeURI","shareToTwitter","SponsorButton","sponsorId","alt","PostNavigator","pageContext","previous","next","to","fields","slug","frontmatter","_assertThisInitialized","Disqus","state","toasts","notifyAboutComment","bind","onSnackbarDismiss","setState","slice","push","render","post","shortName","siteUrl","getHeaderElements","headerSelectors","Array","from","Dom","getElementTopPos","element","currentoffsetY","pageYOffset","getBoundingClientRect","top","toggleTOCContent","tocContent","isOpen","postTopestElementList","concat","gatsby_plugin","post_img","guidedZIndex","postTopestElement","style","zIndex","isDisplay","theme_switch","display","author_name_content","post_navigator","onClickTOCOpen","nextSibling","onClickTOCClose","currentTarget","parentNode","getTOCHrefPullPath","headerID","pathname","TableOfContents","toc","onScroll","headerElement","headerElementTop","tocLinkElement","classList","add","remove","useScrollEvent","EventManager","useEffect","addEventListener","scroll","behavior","viewScrollPercent","scrollPercentage","scrollNumber","Math","floor","indicatorElements","indicatorElement","querySelector","textContent","removeAttribute","ScrollerIndicator","isFixed","onClickScrollIndicator","getAttribute","destScrollTop","scrollIndicator","ul","basePercentage","li","a","setAttribute","init","TopStickyContainer","children","data","ScrollManager","markdownRemark","metaData","site","siteMetadata","comment","sponsor","disqusShortName","utterances","tableOfContents","excerpt","postTitle","marginLeft","marginRight","maxWidth","rhythm","padding","description","buyMeACoffeeId"],"mappings":"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","file":"component---src-templates-blog-post-js-0f972131b52cee8ee2ad.js","sourcesContent":["'use strict';\n\nmodule.exports = require('./components/DisqusThread');","'use strict';\n\nrequire(\"core-js/modules/es.array.reduce.js\");\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\nvar _createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar _react = require('react');\n\nvar _react2 = _interopRequireDefault(_react);\n\nvar _propTypes = require('prop-types');\n\nvar _propTypes2 = _interopRequireDefault(_propTypes);\n\nfunction _interopRequireDefault(obj) {\n return obj && obj.__esModule ? obj : {\n default: obj\n };\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\n\nfunction _objectWithoutProperties(obj, keys) {\n var target = {};\n\n for (var i in obj) {\n if (keys.indexOf(i) >= 0) continue;\n if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;\n target[i] = obj[i];\n }\n\n return target;\n}\n\nvar DISQUS_CONFIG = ['shortname', 'identifier', 'title', 'url', 'category_id', 'onNewComment', 'language'];\nvar __disqusAdded = false;\n\nfunction copyProps(context, props) {\n var onNewComment = props.onNewComment,\n language = props.language,\n rest = _objectWithoutProperties(props, ['onNewComment', 'language']);\n\n for (var prop in rest) {\n context.page[prop] = rest[prop];\n } // Setting the language - if none is provided, the default one is used\n\n\n context.language = language;\n\n if (onNewComment) {\n context.callbacks = {\n onNewComment: [onNewComment]\n };\n }\n}\n\nvar DisqusThread = function (_React$Component) {\n _inherits(DisqusThread, _React$Component);\n\n function DisqusThread() {\n _classCallCheck(this, DisqusThread);\n\n return _possibleConstructorReturn(this, (DisqusThread.__proto__ || Object.getPrototypeOf(DisqusThread)).apply(this, arguments));\n }\n\n _createClass(DisqusThread, [{\n key: 'componentDidMount',\n value: function componentDidMount() {\n this.loadDisqus();\n }\n }, {\n key: 'componentDidUpdate',\n value: function componentDidUpdate() {\n this.loadDisqus();\n }\n }, {\n key: 'shouldComponentUpdate',\n value: function shouldComponentUpdate(nextProps, nextState) {\n return nextProps.identifier !== this.props.identifier;\n }\n }, {\n key: 'render',\n value: function render() {\n var _this2 = this;\n\n var props = Object.keys(this.props).reduce(function (memo, key) {\n return DISQUS_CONFIG.some(function (config) {\n return config === key;\n }) ? memo : _extends({}, memo, _defineProperty({}, key, _this2.props[key]));\n }, {});\n return _react2.default.createElement('div', props, _react2.default.createElement('div', {\n id: 'disqus_thread'\n }));\n }\n }, {\n key: 'addDisqusScript',\n value: function addDisqusScript() {\n if (__disqusAdded) {\n return;\n }\n\n var child = this.disqus = document.createElement('script');\n var parent = document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0];\n child.async = true;\n child.type = 'text/javascript';\n child.src = '//' + this.props.shortname + '.disqus.com/embed.js';\n parent.appendChild(child);\n __disqusAdded = true;\n }\n }, {\n key: 'loadDisqus',\n value: function loadDisqus() {\n var _this3 = this;\n\n var props = {}; // Extract Disqus props that were supplied to this component\n\n DISQUS_CONFIG.forEach(function (prop) {\n // prop \"shortname\" is only necessary for loading the script, not for the config itself\n if (prop !== 'shortname' && !!_this3.props[prop]) {\n props[prop] = _this3.props[prop];\n }\n }); // If Disqus has already been added, reset it\n\n if (typeof DISQUS !== 'undefined') {\n DISQUS.reset({\n reload: true,\n config: function config() {\n copyProps(this, props); // Disqus needs hashbang URL, see https://help.disqus.com/customer/portal/articles/472107\n\n this.page.url = this.page.url.replace(/#/, '') + '#!newthread';\n }\n });\n } else {\n // Otherwise add Disqus to the page\n window.disqus_config = function () {\n copyProps(this, props);\n };\n\n this.addDisqusScript();\n }\n }\n }]);\n\n return DisqusThread;\n}(_react2.default.Component);\n\nDisqusThread.displayName = 'DisqusThread';\nDisqusThread.propTypes = {\n id: _propTypes2.default.string,\n\n /**\n * `shortname` tells the Disqus service your forum's shortname,\n * which is the unique identifier for your website as registered\n * on Disqus. If undefined , the Disqus embed will not load.\n */\n shortname: _propTypes2.default.string.isRequired,\n\n /**\n * `identifier` tells the Disqus service how to identify the\n * current page. When the Disqus embed is loaded, the identifier\n * is used to look up the correct thread. If disqus_identifier\n * is undefined, the page's URL will be used. The URL can be\n * unreliable, such as when renaming an article slug or changing\n * domains, so we recommend using your own unique way of\n * identifying a thread.\n */\n identifier: _propTypes2.default.string,\n\n /**\n * `title` tells the Disqus service the title of the current page.\n * This is used when creating the thread on Disqus for the first time.\n * If undefined, Disqus will use the <title> attribute of the page.\n * If that attribute could not be used, Disqus will use the URL of the page.\n */\n title: _propTypes2.default.string,\n\n /**\n * `url` tells the Disqus service the URL of the current page.\n * If undefined, Disqus will take the window.location.href.\n * This URL is used to look up or create a thread if disqus_identifier\n * is undefined. In addition, this URL is always saved when a thread is\n * being created so that Disqus knows what page a thread belongs to.\n */\n url: _propTypes2.default.string,\n\n /**\n * `category_id` tells the Disqus service the category to be used for\n * the current page. This is used when creating the thread on Disqus\n * for the first time.\n */\n category_id: _propTypes2.default.string,\n\n /**\n * `onNewComment` function accepts one parameter `comment` which is a\n * JavaScript object with comment `id` and `text`. This allows you to track\n * user comments and replies and run a script after a comment is posted.\n */\n onNewComment: _propTypes2.default.func,\n\n /**\n * `language` tells the Disqus service which language should be used.\n * Please refer to https://www.transifex.com/disqus/disqus/ on which languages can be used\n * If undefined, English is used as default one\n */\n language: _propTypes2.default.string\n};\nDisqusThread.defaultProps = {\n url: typeof window === 'undefined' ? null : window.location.href\n};\nexports.default = DisqusThread;","import React from 'react'\n\nimport './index.scss'\n\nexport const Hr = () => <hr className=\"custom-hr\" />\n","import React from 'react'\n\nexport const PostTitle = ({ title }) => <h1>{title}</h1>\n","import React from 'react'\n\nimport './index.scss'\n\nexport const PostDate = ({ date }) => {\n return <p className=\"post-date\">{date}</p>\n}\n","import React from 'react'\nimport { className } from '../../constants/className'\n\nexport const PostContainer = ({ html }) => (\n <div\n className={className.post_content}\n dangerouslySetInnerHTML={{ __html: html }}\n />\n)\n","import React from 'react'\n\nimport './index.scss'\n\nexport const FacebookIcon = ({ onClick }) => (\n <a\n className=\"resp-sharing-button__link\"\n href=\"#\"\n target=\"_blank\"\n rel=\"noopener\"\n aria-label=\"Share on Facebook\"\n onClick={onClick}\n >\n <div className=\"resp-sharing-button resp-sharing-button--facebook resp-sharing-button--large\">\n <div\n aria-hidden=\"true\"\n className=\"resp-sharing-button__icon resp-sharing-button__icon--solid\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M18.77 7.46H14.5v-1.9c0-.9.6-1.1 1-1.1h3V.5h-4.33C10.24.5 9.5 3.44 9.5 5.32v2.15h-3v4h3v12h5v-12h3.85l.42-4z\" />\n </svg>\n </div>\n <span className=\"service-label\">Share on Facebook</span>\n </div>\n </a>\n)\n","import React from 'react'\n\nimport './index.scss'\n\nexport const TwitterIcon = ({ onClick }) => (\n <a\n className=\"resp-sharing-button__link\"\n href=\"#\"\n rel=\"noopener\"\n aria-label=\"Share on Twitter\"\n onClick={onClick}\n >\n <div className=\"resp-sharing-button resp-sharing-button--twitter resp-sharing-button--large\">\n <div\n aria-hidden=\"true\"\n className=\"resp-sharing-button__icon resp-sharing-button__icon--solid\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path d=\"M23.44 4.83c-.8.37-1.5.38-2.22.02.93-.56.98-.96 1.32-2.02-.88.52-1.86.9-2.9 1.1-.82-.88-2-1.43-3.3-1.43-2.5 0-4.55 2.04-4.55 4.54 0 .36.03.7.1 1.04-3.77-.2-7.12-2-9.36-4.75-.4.67-.6 1.45-.6 2.3 0 1.56.8 2.95 2 3.77-.74-.03-1.44-.23-2.05-.57v.06c0 2.2 1.56 4.03 3.64 4.44-.67.2-1.37.2-2.06.08.58 1.8 2.26 3.12 4.25 3.16C5.78 18.1 3.37 18.74 1 18.46c2 1.3 4.4 2.04 6.97 2.04 8.35 0 12.92-6.92 12.92-12.93 0-.2 0-.4-.02-.6.9-.63 1.96-1.22 2.56-2.14z\" />\n </svg>\n </div>\n <span className=\"service-label\">Share on Twitter</span>\n </div>\n </a>\n)\n","import React from 'react'\nimport { FacebookIcon } from './facebook-icon'\nimport { TwitterIcon } from './twitter-icon'\nimport { shareToTwitter, shareToFacebook } from '../../utils/share'\n\nimport './index.scss'\n\nexport const SocialShare = ({ title, author }) => {\n const text = `Recommend on \"${title}\" written by @${author}`\n\n const onClickTwitterIcon = e => {\n e.preventDefault()\n\n return shareToTwitter(window.location.href, text)\n }\n\n const onClickFacebookIcon = e => {\n e.preventDefault()\n return shareToFacebook(window.location.href, text)\n }\n\n return (\n <div className=\"social-share\">\n <FacebookIcon onClick={onClickFacebookIcon} />\n <TwitterIcon onClick={onClickTwitterIcon} />\n </div>\n )\n}\n","export const shareToFacebook = (href, text) => {\n window.FB.ui({\n method: 'share',\n mobile_iframe: true,\n href,\n quote: text,\n })\n}\n\nexport const shareToTwitter = (href, text) => {\n window.open(\n `https://twitter.com/share?url=${encodeURI(encodeURI(href))}&text=${text}`,\n 'sharer',\n 'toolbar=0,status=0,width=626,height=436'\n )\n}\n","import React from 'react'\n\nimport './index.scss'\n\nexport const SponsorButton = ({ sponsorId }) => (\n <div className=\"sponsor-button\">\n <a\n className=\"bmc-button\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n href={`https://www.buymeacoffee.com/${sponsorId}`}\n >\n <img\n src=\"https://www.buymeacoffee.com/assets/img/BMC-btn-logo.svg\"\n alt=\"Buy me a coffee\"\n />\n <span>Buy me a coffee</span>\n </a>\n </div>\n)\n","import React from 'react'\nimport { Link } from 'gatsby'\n\nimport './index.scss'\n\nexport const PostNavigator = ({ pageContext }) => {\n const { previous, next } = pageContext\n\n return (\n <ul className=\"post-navigator\">\n <li>\n {previous && (\n <Link to={previous.fields.slug} rel=\"prev\">\n โ {previous.frontmatter.title}\n </Link>\n )}\n </li>\n <li>\n {next && (\n <Link to={next.fields.slug} rel=\"next\">\n {next.frontmatter.title} โ\n </Link>\n )}\n </li>\n </ul>\n )\n}\n","export default function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return self;\n}","import React, { Component } from 'react'\nimport ReactDisqusComments from 'react-disqus-comments'\n\nexport class Disqus extends Component {\n constructor(props) {\n super(props)\n this.state = { toasts: [] }\n this.notifyAboutComment = this.notifyAboutComment.bind(this)\n this.onSnackbarDismiss = this.onSnackbarDismiss.bind(this)\n }\n\n onSnackbarDismiss() {\n const [, ...toasts] = this.state.toasts\n this.setState({ toasts })\n }\n\n notifyAboutComment() {\n const toasts = this.state.toasts.slice()\n toasts.push({ text: 'New comment available!!' })\n this.setState({ toasts })\n }\n\n render() {\n const { post, shortName, siteUrl, slug } = this.props\n const url = siteUrl + slug\n\n return (\n <ReactDisqusComments\n shortname={shortName}\n identifier={post.frontmatter.title}\n title={post.frontmatter.title}\n url={url}\n category_id={post.frontmatter.category_id}\n onNewComment={this.notifyAboutComment}\n />\n )\n }\n}\n","import React, { useEffect } from 'react'\n\nimport * as Dom from '../../utils/dom'\nimport { className } from '../../constants/className'\nimport { useScrollEvent } from '../../hooks/useScrollEvent'\nimport * as EventManager from '../../utils/event-manager'\n\nimport './index.scss'\n\n// TOC ์ฝ์ ์ฃผ์ ํ์\n// @copyright\n// https://blueshw.github.io/2020/05/30/table-of-contents/\n// https://whywhyy.me/blog/2020/06/10/%EA%B3%A0%EC%98%A4%EA%B8%89%20%EB%AA%A9%EC%B0%A8(Table%20of%20Contents)%EC%9D%84%20%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EC%9E%90#%EB%AA%A9%ED%91%9C\nconst HEADER_OFFSET_Y = 180\n\nfunction getHeaderElements() {\n const headerSelectors = `.${className.post_content} > h2, h3, h4, h5, h6`\n return Array.from(Dom.getElements(headerSelectors))\n}\n\nfunction getElementTopPos(element) {\n const currentoffsetY = window.pageYOffset\n const { top } = element.getBoundingClientRect()\n\n return top + currentoffsetY\n}\n\nfunction toggleTOCContent(tocContent) {\n if (tocContent) {\n const isOpen = Dom.togleClass(tocContent, 'open')\n\n // TOC๋ฅผ ์ต์๋จ์ ์ค๊ฒํ๊ธฐ์ํด ์ต์๋จ์ ์์นํด์ ธ์๋ Element๋ค์ z-index๋ฅผ ๋ฎ์ถฐ์ผ ํจ.\n const headerElementList = getHeaderElements()\n const postTopestElementList = headerElementList.concat(\n Array.from(Dom.getElements('.' + className.gatsby_plugin.post_img))\n )\n\n const guidedZIndex = isOpen ? -1 : 'auto'\n\n postTopestElementList.forEach(postTopestElement => {\n postTopestElement.style.zIndex = guidedZIndex\n })\n\n const isDisplay = isOpen ? 'none' : 'block'\n const themeSwitch = Dom.getElement(`.${className.theme_switch}`)\n themeSwitch.style.display = isDisplay\n const authorContent = Dom.getElement(`.${className.author_name_content}`)\n const postNavigator = Dom.getElement(`.${className.post_navigator}`)\n\n const footerElements = [authorContent, postNavigator]\n\n for (const footerElement of footerElements) {\n // footerElement.style.display = isDisplay\n }\n }\n}\n\nfunction onClickTOCOpen(e) {\n const tocContent = e.target.nextSibling\n toggleTOCContent(tocContent)\n}\n\nfunction onClickTOCClose(e) {\n const tocContent = e.currentTarget.parentNode\n toggleTOCContent(tocContent)\n}\n\nfunction getTOCHrefPullPath(headerID) {\n return `${window.location.pathname}#${encodeURI(headerID)}`\n}\n\nexport const TableOfContents = ({ toc }) => {\n const onScroll = () => {\n const currentoffsetY = window.pageYOffset\n const headerElements = getHeaderElements()\n for (const headerElement of headerElements) {\n if (!!headerElement.id === false) continue // id๊ฐ ์์ผ๋ฉด ํจ์ค(markdown์์ ์๋ชป ์ ์ ๊ฒ)\n const headerElementTop = getElementTopPos(headerElement)\n const href = getTOCHrefPullPath(headerElement.id)\n const tocLinkElement = Dom.getElement(`a[href=\"${href}\"]`)\n\n if (currentoffsetY >= headerElementTop - HEADER_OFFSET_Y) {\n headerElement && headerElement.classList.add('toc-header-active')\n tocLinkElement && tocLinkElement.classList.add('toc-active')\n } else {\n headerElement && headerElement.classList.remove('toc-header-active')\n tocLinkElement && tocLinkElement.classList.remove('toc-active')\n }\n }\n }\n\n useScrollEvent(() => {\n return EventManager.toFit(onScroll, {})()\n })\n\n useEffect(() => {\n const headerElements = getHeaderElements()\n\n headerElements.forEach(headerElement => {\n headerElement.classList.add('toc-header') // active ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ์ํด ์ฌ์ ์ ํด๋์ค ์ถ๊ฐ\n\n const headerElementTop = getElementTopPos(headerElement)\n const tocLinkElement = Dom.getElement(\n `a[href=\"${getTOCHrefPullPath(headerElement.id)}\"]`\n )\n\n if (tocLinkElement)\n tocLinkElement.addEventListener('click', e => {\n e.preventDefault()\n window.scroll({ top: headerElementTop, behavior: 'smooth' })\n })\n })\n })\n\n return (\n <div className=\"toc-wrapper\">\n <div className=\"toc-open-btn\" onClick={onClickTOCOpen}></div>\n <div className=\"toc-content\">\n <div className=\"toc-close-btn\" onClick={onClickTOCClose}>\n <span className=\"toc-close-icon\"></span>\n </div>\n <div className=\"toc\" dangerouslySetInnerHTML={{ __html: toc }} />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { useEffect } from 'react'\nimport { useScrollEvent } from '../../hooks/useScrollEvent'\nimport { ScrollIndicatorMini } from './scroll-indicator-mini'\nimport * as Dom from '../../utils/dom'\nimport * as EventManager from '../../utils/event-manager'\n\nimport './index.scss'\n\nconst INDICATOR_CLSNAME = 'data-indicator'\n\nfunction viewScrollPercent() {\n const scrollPercentage = Dom.getScrollPercent()\n const scrollNumber = Math.floor(scrollPercentage / 10)\n\n const indicatorElements = Dom.getElements(`li[data-indicator]`)\n\n for (let i = 0; i < indicatorElements.length; i++) {\n const indicatorElement = indicatorElements[i]\n if (i === scrollNumber) {\n indicatorElement.classList.add('active')\n const contentElement = indicatorElement.querySelector('a')\n contentElement.textContent = `${scrollPercentage}%`\n } else {\n indicatorElement.removeAttribute('class')\n }\n }\n}\n\nexport const ScrollerIndicator = ({ isFixed }) => {\n const onScroll = () => {\n viewScrollPercent()\n }\n\n useScrollEvent(() => {\n return EventManager.toFit(onScroll, {})()\n })\n\n function onClickScrollIndicator(e) {\n e.preventDefault()\n const scrollPercentage = e.target.parentNode.getAttribute(INDICATOR_CLSNAME)\n const scrollArea = Dom.getScrollArea()\n const destScrollTop = (scrollArea * scrollPercentage) / 100\n\n window.scroll({ top: destScrollTop, behavior: 'smooth' })\n }\n\n function init() {\n const scrollIndicator = Dom.getElement('.scroll-indicator')\n const ul = Dom.createElement('ul')\n\n //build the scroll nav\n for (let i = 0; i < 11; i++) {\n const basePercentage = i * 10\n const li = document.createElement('li')\n const a = document.createElement('a')\n\n li.setAttribute(INDICATOR_CLSNAME, basePercentage)\n\n a.textContent = basePercentage\n a.addEventListener('click', onClickScrollIndicator)\n\n li.appendChild(a)\n ul.appendChild(li)\n }\n\n scrollIndicator.appendChild(ul)\n }\n\n useEffect(() => {\n init()\n viewScrollPercent()\n }, [])\n\n return (\n <div className=\"scroll-indicator-wrapper\">\n <ScrollIndicatorMini />\n <div className=\"scroll-indicator\"></div>\n </div>\n )\n}\n","import React from 'react'\n\nimport './index.scss'\n\nexport const TopStickyContainer = ({ children }) => {\n return <div className=\"top-sticky-container\">{children}</div>\n}\n","import React, { useEffect } from 'react'\nimport { graphql } from 'gatsby'\n\nimport * as Elements from '../components/elements'\nimport { Layout } from '../layout'\nimport { SEO } from '../components/seo'\nimport { PostTitle } from '../components/post-title'\nimport { PostDate } from '../components/post-date'\nimport { PostContainer } from '../components/post-container'\nimport { SocialShare } from '../components/social-share'\nimport { SponsorButton } from '../components/sponsor-button'\nimport { Bio } from '../components/bio'\nimport { PostNavigator } from '../components/post-navigator'\nimport { Disqus } from '../components/disqus'\nimport { Utterances } from '../components/utterances'\nimport { TableOfContents } from '../components/table-of-contents'\nimport { ScrollerIndicator } from '../components/scroll-indicator'\nimport * as ScrollManager from '../utils/scroll'\nimport { rhythm } from '../utils/typography'\n\nimport '../styles/code.scss'\nimport 'katex/dist/katex.min.css'\nimport { TopStickyContainer } from '../components/top-sticky-container'\n\nexport default ({ data, pageContext, location }) => {\n useEffect(() => {\n ScrollManager.init()\n return () => ScrollManager.destroy()\n }, [])\n\n const post = data.markdownRemark\n const metaData = data.site.siteMetadata\n const { title, comment, siteUrl, author, sponsor } = metaData\n const { disqusShortName, utterances } = comment\n const { frontmatter, html, tableOfContents, excerpt } = post\n const { title: postTitle, date } = frontmatter\n\n return (\n <Layout location={location} title={title}>\n <TopStickyContainer>\n <ScrollerIndicator />\n <TableOfContents toc={tableOfContents} />\n </TopStickyContainer>\n\n <div\n style={{\n marginLeft: `auto`,\n marginRight: `auto`,\n maxWidth: rhythm(28),\n padding: `${rhythm(1.5)} ${rhythm(3 / 4)} ${rhythm(1)} ${rhythm(\n 3 / 4\n )}`,\n }}\n >\n <SEO title={postTitle} description={excerpt} />\n <PostTitle title={postTitle} />\n <PostDate date={date} />\n <PostContainer html={html} />\n <SocialShare title={postTitle} author={author} />\n {!!sponsor.buyMeACoffeeId && (\n <SponsorButton sponsorId={sponsor.buyMeACoffeeId} />\n )}\n <Elements.Hr />\n <Bio />\n <PostNavigator pageContext={pageContext} />\n {!!disqusShortName && (\n <Disqus\n post={post}\n shortName={disqusShortName}\n siteUrl={siteUrl}\n slug={pageContext.slug}\n />\n )}\n {/* {!!utterances && <Utterances repo={utterances} />} */}\n </div>\n </Layout>\n )\n}\n\nexport const pageQuery = graphql`\n query BlogPostBySlug($slug: String!) {\n site {\n siteMetadata {\n title\n author\n siteUrl\n comment {\n utterances\n }\n sponsor {\n buyMeACoffeeId\n }\n }\n }\n markdownRemark(fields: { slug: { eq: $slug } }) {\n id\n excerpt(pruneLength: 280)\n html\n tableOfContents\n frontmatter {\n title\n date(formatString: \"MMMM DD, YYYY\")\n }\n }\n }\n`\n"],"sourceRoot":""}