{"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:///./src/components/disqus/index.jsx","webpack:///./src/components/utterances/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","_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","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","Disqus","state","toasts","notifyAboutComment","bind","onSnackbarDismiss","setState","slice","push","render","post","shortName","siteUrl","Utterances","repo","rootElm","React","createRef","useEffect","isDarkTheme","Dom","THEME","DARK","utterances","utterancesConfig","branch","theme","label","crossorigin","configKey","setAttribute","current","ref","pageQuery","data","ScrollManager","markdownRemark","metaData","site","siteMetadata","comment","sponsor","disqusShortName","postTitle","description","excerpt","buyMeACoffeeId"],"mappings":"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","file":"component---src-templates-blog-post-js-86e46f66290b6aa04eae.js","sourcesContent":["'use strict';\n\nmodule.exports = require('./components/DisqusThread');","'use strict';\n\nrequire(\"core-js/modules/es6.regexp.replace\");\n\nrequire(\"core-js/modules/es6.array.for-each\");\n\nrequire(\"core-js/modules/es6.array.some\");\n\nrequire(\"core-js/modules/web.dom.iterable\");\n\nrequire(\"core-js/modules/es6.array.iterator\");\n\nrequire(\"core-js/modules/es6.object.to-string\");\n\nrequire(\"core-js/modules/es6.object.keys\");\n\nrequire(\"core-js/modules/es6.array.reduce\");\n\nrequire(\"core-js/modules/es6.array.index-of\");\n\nrequire(\"core-js/modules/es6.object.set-prototype-of\");\n\nrequire(\"core-js/modules/es6.object.create\");\n\nrequire(\"core-js/modules/es6.object.assign\");\n\nrequire(\"core-js/modules/es6.object.define-property\");\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 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'\n\nexport const PostContainer = ({ html }) => (\n <div dangerouslySetInnerHTML={{ __html: html }} />\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=\"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","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 { THEME } from '../../constants'\n\nconst src = 'https://utteranc.es/client.js'\nconst branch = 'master'\nconst DARK_THEME = 'photon-dark'\nconst LIGHT_THEME = 'github-light'\n\nexport const Utterances = ({ repo }) => {\n const rootElm = React.createRef()\n\n useEffect(() => {\n const isDarkTheme = Dom.hasClassOfBody(THEME.DARK)\n const utterances = document.createElement('script')\n const utterancesConfig = {\n src,\n repo,\n branch,\n theme: isDarkTheme ? DARK_THEME : LIGHT_THEME,\n label: 'comment',\n async: true,\n 'issue-term': 'pathname',\n crossorigin: 'anonymous',\n }\n\n Object.keys(utterancesConfig).forEach(configKey => {\n utterances.setAttribute(configKey, utterancesConfig[configKey])\n })\n rootElm.current.appendChild(utterances)\n }, [])\n\n return <div className=\"utterances\" ref={rootElm} />\n}\n","import React, { useEffect } from 'react'\nimport { graphql } from 'gatsby'\n\nimport * as Elements from '../components/elements'\nimport { Layout } from '../layout'\nimport { Head } from '../components/head'\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 * as ScrollManager from '../utils/scroll'\n\nimport '../styles/code.scss'\nimport 'katex/dist/katex.min.css'\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 { title: postTitle, date } = post.frontmatter\n\n return (\n <Layout location={location} title={title}>\n <Head title={postTitle} description={post.excerpt} />\n <PostTitle title={postTitle} />\n <PostDate date={date} />\n <PostContainer html={post.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 </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 disqusShortName\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 frontmatter {\n title\n date(formatString: \"MMMM DD, YYYY\")\n }\n }\n }\n`\n"],"sourceRoot":""}