{"version":3,"sources":["webpack:///./src/components/common/JumboDivider.tsx","webpack:///./src/components/common/Jumbotron.js","webpack:///./src/util/index.js","webpack:///./src/components/common/Col.tsx","webpack:///./src/components/common/ScrollToTopOnMount.tsx","webpack:///./src/views/BlogsPage/BlogsPage.js","webpack:///./src/views/BlogsPage/index.js","webpack:///./src/pages/blog.js"],"names":["JumboDivider","props","style","height","color","backgroundColor","Jumbotron","className","cn","containerClassName","children","parseQueryParams","queryString","query","pairs","substr","split","i","length","pair","decodeURIComponent","debounce","func","wait","immediate","timeout","context","this","args","arguments","later","apply","callNow","clearTimeout","setTimeout","classNames","idx","name","trim","sizes","value","hide","show","orders","order","Col","anyProps","width","maxWidth","size","forEach","sizeType","s","findIndex","orderType","align","justify","textAlign","grow","flexGrow","hideIdx","ScrollToTopOnMount","componentDidMount","window","scrollTo","render","Component","Blog","blog","xs12","m6","l4","Link","to","slug","fluid","image","alt","title","src","authorIcon","author","readingTime","snippet","BlogsPage","withTranslate","translate","blogs","SEO","description","path","NavBar","Row","map","key","matchLocale","locale","DEFAULT_LOCALE","item","Blogs","location","data","pageContext","Layout","allBlogsJson","edges","edge","node","childImageSharp","original","taglineImage","find","text"],"mappings":"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","file":"component---src-pages-blog-js-a8632310ee7dbc5c93a8.js","sourcesContent":["import React from \"react\";\n\nexport interface JumboDividerProps {\n color?: string,\n height?: string,\n}\n\nconst JumboDivider: React.FunctionComponent = function (props) {\n let style: React.CSSProperties = {\n height: \"3em\",\n };\n if (props.color) {\n style.backgroundColor = props.color;\n }\n if (props.height) {\n style.height = props.height;\n }\n return (\n
\n
\n )\n}\n\nexport default JumboDivider;\n","import React from \"react\";\nimport { cn } from \"../../util\";\n\nconst Jumbotron = function (props) {\n let style = { ...props.style }\n if (props.color) {\n style.backgroundColor = props.color;\n }\n let className = \"jumbotron\";\n if (props.className) {\n className += \" \" + props.className;\n }\n return (\n
\n
\n {props.children}\n
\n
\n );\n};\n\nexport default Jumbotron;\n","\nexport const parseQueryParams = function (queryString) {\n let query = {};\n if (!queryString) return query;\n let pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');\n for (let i = 0; i < pairs.length; i++) {\n let pair = pairs[i].split('=');\n query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');\n }\n return query;\n}\n\n// Returns a function, that, as long as it continues to be invoked, will not\n// be triggered. The function will be called after it stops being called for\n// N milliseconds. If `immediate` is passed, trigger the function on the\n// leading edge, instead of the trailing.\nexport function debounce(func, wait, immediate) {\n let timeout;\n return function () {\n let context = this, args = arguments;\n let later = function () {\n timeout = null;\n if (!immediate) func.apply(context, args);\n };\n let callNow = immediate && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n if (callNow) func.apply(context, args);\n };\n};\n\n/**\n * Combine classNames from multiple sources into a single string.\n * @param {...any} classNames Any number of strings of classNames, nulls or undefined\n */\nexport const cn = function (...classNames) {\n let className = \"\";\n for (let idx in classNames) {\n const name = classNames[idx];\n if (name) {\n className += ` ${name}`;\n }\n }\n return className.trim();\n}\n","import React, { CSSProperties } from 'react';\n\nexport interface ColProps {\n width?: string | number,\n size?: number,\n xs?: boolean,\n s?: boolean,\n m?: boolean,\n l?: boolean,\n xl?: boolean,\n\n xs1?: boolean, xs2?: boolean, xs3?: boolean, xs4?: boolean, xs5?: boolean, xs6?: boolean,\n xs7?: boolean, xs8?: boolean, xs9?: boolean, xs10?: boolean, xs11?: boolean, xs12?: boolean,\n s1?: boolean, s2?: boolean, s3?: boolean, s4?: boolean, s5?: boolean, s6?: boolean,\n s7?: boolean, s8?: boolean, s9?: boolean, s10?: boolean, s11?: boolean, s12?: boolean,\n m1?: boolean, m2?: boolean, m3?: boolean, m4?: boolean, m5?: boolean, m6?: boolean,\n m7?: boolean, m8?: boolean, m9?: boolean, m10?: boolean, m11?: boolean, m12?: boolean,\n l1?: boolean, l2?: boolean, l3?: boolean, l4?: boolean, l5?: boolean, l6?: boolean,\n l7?: boolean, l8?: boolean, l9?: boolean, l10?: boolean, l11?: boolean, l12?: boolean,\n xl1?: boolean, xl2?: boolean, xl3?: boolean, xl4?: boolean, xl5?: boolean, xl6?: boolean,\n xl7?: boolean, xl8?: boolean, xl9?: boolean, xl10?: boolean, xl11?: boolean, xl12?: boolean,\n\n hideXs?: boolean,\n hideS?: boolean,\n hideM?: boolean,\n hideL?: boolean,\n\n orderXs?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12,\n orderS?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12,\n orderM?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12,\n orderL?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12,\n orderXl?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12,\n\n align?: \"top\" | \"center\" | \"bottom\",\n justify?: \"left\" | \"center\" | \"right\",\n className?: string,\n style?: CSSProperties,\n grow?: number,\n}\n\nconst sizesExtraSmall = [\n \"xs1\", \"xs2\", \"xs3\", \"xs4\", \"xs5\", \"xs6\",\n \"xs7\", \"xs8\", \"xs9\", \"xs10\", \"xs11\", \"xs12\",\n];\nconst sizesSmall = [\n \"s1\", \"s2\", \"s3\", \"s4\", \"s5\", \"s6\",\n \"s7\", \"s8\", \"s9\", \"s10\", \"s11\", \"s12\",\n];\nconst sizesMedium = [\n \"m1\", \"m2\", \"m3\", \"m4\", \"m5\", \"m6\",\n \"m7\", \"m8\", \"m9\", \"m10\", \"m11\", \"m12\",\n];\nconst sizesLarge = [\n \"l1\", \"l2\", \"l3\", \"l4\", \"l5\", \"l6\",\n \"l7\", \"l8\", \"l9\", \"l10\", \"l11\", \"l12\",\n];\nconst sizesExtraLarge = [\n \"xl1\", \"xl2\", \"xl3\", \"xl4\", \"xl5\", \"xl6\",\n \"xl7\", \"xl8\", \"xl9\", \"xl10\", \"xl11\", \"xl12\",\n];\nconst sizes = [\n { name: \"xs\", value: \"\", sizes: sizesExtraSmall },\n { name: \"s\", value: \"-sm\", sizes: sizesSmall },\n { name: \"m\", value: \"-md\", sizes: sizesMedium },\n { name: \"l\", value: \"-lg\", sizes: sizesLarge },\n { name: \"xl\", value: \"-xl\", sizes: sizesExtraLarge },\n];\nconst hide = [\n { name: \"hideXs\", hide: \"d-none\", show: \"\" },\n { name: \"hideS\", hide: \"d-sm-none\", show: \"d-sm-block\" },\n { name: \"hideM\", hide: \"d-md-none\", show: \"d-md-block\" },\n { name: \"hideL\", hide: \"d-lg-none\", show: \"d-lg-block\" },\n];\nconst orders = [\n { name: \"orderXs\", order: \"order-\" },\n { name: \"orderS\", order: \"order-sm-\" },\n { name: \"orderM\", order: \"order-md-\" },\n { name: \"orderL\", order: \"order-lg-\" },\n { name: \"orderXl\", order: \"order-xl-\" },\n];\n\nconst Col: React.FunctionComponent = function (props) {\n const anyProps: any = props;\n let style = props.style || {};\n let className = \"col\";\n if (typeof props.width === \"string\") {\n style.maxWidth = props.width;\n } else if (typeof props.width === \"number\") {\n style.maxWidth = props.width + \"px\";\n } else if (typeof props.size === \"number\" && props.size > 0 && props.size <= 12) {\n className += \" col-\" + props.size;\n } else {\n sizes.forEach((sizeType) => {\n if (typeof anyProps[sizeType.name] === \"boolean\") {\n className += \" col\" + sizeType.value;\n } else {\n let s = sizeType.sizes.findIndex((size) => (size in props && typeof anyProps[size] === \"boolean\"));\n if (s >= 0) {\n className += \" col\" + sizeType.value + \"-\" + (s + 1);\n }\n }\n });\n }\n orders.forEach((orderType) => {\n if (typeof anyProps[orderType.name] === \"number\") {\n className += ` ${orderType.order}${anyProps[orderType.name]}`\n }\n });\n if (props.align) {\n switch (props.align) {\n case \"top\": className += \" align-self-start\"; break;\n case \"center\": className += \" align-self-center\"; break;\n case \"bottom\": className += \" align-self-end\"; break;\n }\n }\n if (props.justify) {\n switch (props.justify) {\n case \"left\": style.textAlign = \"start\"; break;\n case \"center\": style.textAlign = \"center\"; break;\n case \"right\": style.textAlign = \"end\"; break;\n }\n }\n if (typeof props.grow === \"number\") {\n style.flexGrow = props.grow;\n }\n let hideIdx = hide.findIndex((hide) => (hide.name in props && (props as any)[hide.name]));\n if (hideIdx >= 0) {\n className += \" d-none\";\n if (hideIdx + 1 < hide.length) {\n className += \" \" + hide[hideIdx + 1].show;\n }\n }\n if (props.className) {\n className += \" \" + props.className;\n }\n return (\n
\n {props.children}\n
\n )\n}\n\nexport default Col;\n","import { Component } from \"react\";\n\nclass ScrollToTopOnMount extends Component {\n componentDidMount() {\n window.scrollTo(0, 0);\n }\n render() {\n return null;\n }\n}\n\nexport default ScrollToTopOnMount;\n","import React from \"react\";\nimport Image from \"gatsby-image\";\n\nimport { withTranslate } from \"../../components/translate\";\nimport Row from \"../../components/common/Row\";\nimport Col from \"../../components/common/Col\";\nimport ScrollToTopOnMount from \"../../components/common/ScrollToTopOnMount\";\nimport NavBar from \"../../components/common/NavBar\";\nimport Jumbotron from '../../components/common/Jumbotron';\n\nimport \"./BlogsPage.css\";\nimport Link from \"../../components/common/Link\";\nimport JumboDivider from \"../../components/common/JumboDivider\";\nimport SEO from \"../../components/SEO\";\n\nconst Blog = function ({ blog }) {\n return (\n \n \n
\n \n
\n
\n \n {blog.author}{blog.readingTime} min\n
\n

{blog.title}

\n

{blog.snippet}

\n
\n
\n \n \n )\n}\n\nconst BlogsPage = withTranslate(function ({ translate, blogs }) {\n return (\n
\n \n \n \n
\n
\n

\n {translate(\"blogs.tagline.title\")}\n

\n

\n {translate(\"blogs.tagline.subtitle\")}\n

\n
\n
\n \n \n \n {blogs.map((blog) => ())}\n \n \n
\n )\n});\n\nexport default BlogsPage;\n","\nimport BlogsPage from \"./BlogsPage\";\n\nexport default BlogsPage;\n","import React from \"react\"\nimport { graphql } from \"gatsby\";\n\nimport Layout from \"../components/Layout\"\nimport BlogsPage from \"../views/BlogsPage\"\nimport { DEFAULT_LOCALE } from \"../translations\";\n\nexport const query = graphql`\n{\n allBlogsJson(sort: { fields: date, order: DESC }) {\n edges {\n node {\n slug\n date\n taglineImage {\n childImageSharp {\n fluid(maxWidth: 350, quality: 80) {\n ...GatsbyImageSharpFluid\n }\n }\n }\n authorIcon {\n childImageSharp {\n original {\n src\n }\n }\n }\n author\n readingTime\n title {\n locale\n text\n }\n snippet {\n locale\n text\n }\n }\n }\n }\n}\n`;\n\nconst matchLocale = function (locale) {\n if (!locale) {\n locale = DEFAULT_LOCALE;\n }\n return (item) => (item.locale === locale);\n}\n\nconst Blogs = ({ location, data, pageContext: { locale } }) => (\n \n ({\n slug: edge.node.slug,\n authorIcon: edge.node.authorIcon.childImageSharp.original.src,\n author: edge.node.author,\n readingTime: edge.node.readingTime,\n image: edge.node.taglineImage.childImageSharp.fluid,\n title: edge.node.title.find(matchLocale(locale)).text,\n snippet: edge.node.snippet.find(matchLocale(locale)).text,\n }))}\n />\n \n);\n\nexport default Blogs;\n"],"sourceRoot":""}