From e32ec1d502f7243b0cdeeb3d20e98b4c41f5fb01 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Tue, 13 Apr 2021 23:08:03 +0100 Subject: [PATCH 01/26] Improve layout inner spacing --- src/pages/index.js | 13 ++++++++++--- src/pages/studies/index.js | 5 +++-- src/styles/content-block.js | 10 +++++----- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/pages/index.js b/src/pages/index.js index ca000b3..8fb54db 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -7,8 +7,9 @@ import { shade } from 'polished'; import { Link } from '../styles/clean/link'; import { - media, glsp, + media, + multiply, stylizeFunction, themeVal, visuallyHidden @@ -47,7 +48,10 @@ const Intro = styled.section` display: grid; grid-gap: ${glsp(2)}; align-content: center; - padding: ${glsp(themeVal('layout.gap.xsmall'))}; + padding: ${glsp( + multiply(themeVal('layout.gap.xsmall'), 2), + themeVal('layout.gap.xsmall') + )}; height: 100%; max-width: 56rem; margin: 0 auto; @@ -55,7 +59,10 @@ const Intro = styled.section` ${media.mediumUp` grid-gap: ${glsp(4)}; - padding: ${glsp(themeVal('layout.gap.medium'))}; + padding: ${glsp( + multiply(themeVal('layout.gap.medium'), 2), + themeVal('layout.gap.medium') + )}; `} `; diff --git a/src/pages/studies/index.js b/src/pages/studies/index.js index e2904ec..153fe8a 100644 --- a/src/pages/studies/index.js +++ b/src/pages/studies/index.js @@ -6,6 +6,7 @@ import styled from 'styled-components'; import { glsp, media, + multiply, themeVal, visuallyHidden } from '@devseed-ui/theme-provider'; @@ -38,11 +39,11 @@ const StudiesSection = styled(UniversalGridder).attrs({ largeUp: ['full-start', 'full-end'] } })` - padding: ${glsp(themeVal('layout.gap.xsmall'), 0)}; + padding: ${glsp(multiply(themeVal('layout.gap.xsmall'), 2), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.xsmall'))}; ${media.mediumUp` - padding: ${glsp(themeVal('layout.gap.medium'), 0)}; + padding: ${glsp(multiply(themeVal('layout.gap.medium'), 2), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.medium'))}; `} `; diff --git a/src/styles/content-block.js b/src/styles/content-block.js index 51c1a9a..f831e64 100644 --- a/src/styles/content-block.js +++ b/src/styles/content-block.js @@ -1,6 +1,6 @@ import styled, { css } from 'styled-components'; -import { glsp, media, themeVal } from '@devseed-ui/theme-provider'; +import { glsp, media, multiply, themeVal } from '@devseed-ui/theme-provider'; import UniversalGridder from './universal-gridder'; import Prose from './typography/prose'; @@ -47,21 +47,21 @@ export const ContentBlock = styled(UniversalGridder).attrs({ largeUp: ['full-start', 'full-end'] } })` - padding: ${glsp(themeVal('layout.gap.xsmall'), 0)}; + padding: ${glsp(multiply(themeVal('layout.gap.xsmall'), 2), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.xsmall'))}; ${media.mediumUp` - padding: ${glsp(themeVal('layout.gap.medium'), 0)}; + padding: ${glsp(multiply(themeVal('layout.gap.medium'), 2), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.medium'))}; `} ${media.largeUp` - padding: ${glsp(themeVal('layout.gap.large'), 0)}; + padding: ${glsp(multiply(themeVal('layout.gap.large'), 2), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.large'))}; `} ${media.xlargeUp` - padding: ${glsp(themeVal('layout.gap.xlarge'), 0)}; + padding: ${glsp(multiply(themeVal('layout.gap.xlarge'), 2), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.xlarge'))}; `} From dc175a2b2cd25b20e1c81fb86d30d6fcc6bb47b1 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Wed, 14 Apr 2021 11:43:00 +0100 Subject: [PATCH 02/26] Tweak panel toggle help text --- src/templates/study-single/carto.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/templates/study-single/carto.js b/src/templates/study-single/carto.js index 6512e6c..37af789 100644 --- a/src/templates/study-single/carto.js +++ b/src/templates/study-single/carto.js @@ -194,7 +194,7 @@ function StudySingleCarto(props) { useIcon={ isPanelRevealed ? 'shrink-to-left' : 'expand-from-left' } - title='Show/hide prime panel' + title='Show/hide panel' hideText onClick={() => setPanelRevealed((v) => !v)} > From b7f45f840b6393c6c69584bcee097d8bf1872048 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Wed, 14 Apr 2021 12:57:36 +0100 Subject: [PATCH 03/26] Normalize content-block inner spacing --- src/pages/studies/index.js | 38 ++++--------------------------------- src/styles/content-block.js | 11 ++++++++--- 2 files changed, 12 insertions(+), 37 deletions(-) diff --git a/src/pages/studies/index.js b/src/pages/studies/index.js index 153fe8a..c033738 100644 --- a/src/pages/studies/index.js +++ b/src/pages/studies/index.js @@ -3,15 +3,9 @@ import T from 'prop-types'; import { graphql } from 'gatsby'; import styled from 'styled-components'; -import { - glsp, - media, - multiply, - themeVal, - visuallyHidden -} from '@devseed-ui/theme-provider'; +import { glsp, media, themeVal } from '@devseed-ui/theme-provider'; import Layout from '../../components/layout'; -import UniversalGridder from '../../styles/universal-gridder'; +import { ContentBlock } from '../../styles/content-block'; import { Inpage, @@ -31,29 +25,6 @@ import { CardMediaThumb } from '../../styles/card'; -const StudiesSection = styled(UniversalGridder).attrs({ - as: 'div', - grid: { - smallUp: ['full-start', 'full-end'], - mediumUp: ['full-start', 'full-end'], - largeUp: ['full-start', 'full-end'] - } -})` - padding: ${glsp(multiply(themeVal('layout.gap.xsmall'), 2), 0)}; - grid-row-gap: ${glsp(themeVal('layout.gap.xsmall'))}; - - ${media.mediumUp` - padding: ${glsp(multiply(themeVal('layout.gap.medium'), 2), 0)}; - grid-row-gap: ${glsp(themeVal('layout.gap.medium'))}; - `} -`; - -const StudiesTitle = styled.h1` - ${visuallyHidden()} - grid-column: content-start / content-end; - margin: 0; -`; - const StudiesList = styled.ul` grid-column: content-start / content-end; display: grid; @@ -90,8 +61,7 @@ export default function Studies({ data }) { - - List of studies + {studies.map((node) => (
  • @@ -139,7 +109,7 @@ export default function Studies({ data }) {
  • ))}
    -
    +
    diff --git a/src/styles/content-block.js b/src/styles/content-block.js index f831e64..987e364 100644 --- a/src/styles/content-block.js +++ b/src/styles/content-block.js @@ -47,16 +47,21 @@ export const ContentBlock = styled(UniversalGridder).attrs({ largeUp: ['full-start', 'full-end'] } })` - padding: ${glsp(multiply(themeVal('layout.gap.xsmall'), 2), 0)}; + padding: ${glsp(themeVal('layout.gap.xsmall'), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.xsmall'))}; + ${media.smallUp` + padding: ${glsp(themeVal('layout.gap.small'), 0)}; + grid-row-gap: ${glsp(themeVal('layout.gap.small'))}; + `} + ${media.mediumUp` - padding: ${glsp(multiply(themeVal('layout.gap.medium'), 2), 0)}; + padding: ${glsp(themeVal('layout.gap.medium'), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.medium'))}; `} ${media.largeUp` - padding: ${glsp(multiply(themeVal('layout.gap.large'), 2), 0)}; + padding: ${glsp(themeVal('layout.gap.large'), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.large'))}; `} From 3fe0136642b687c6cf4d22fbde3457adb2b0eef1 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Tue, 20 Apr 2021 20:39:27 +0100 Subject: [PATCH 04/26] Tweak donut chart max width --- src/templates/study-single/summary.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/templates/study-single/summary.js b/src/templates/study-single/summary.js index 3f4d114..15a5b53 100644 --- a/src/templates/study-single/summary.js +++ b/src/templates/study-single/summary.js @@ -11,8 +11,10 @@ import Prose from '../../styles/typography/prose'; import DetailsList from '../../styles/typography/details-list'; const DonutChartWrapper = styled.div` + margin-left: auto; + margin-right: auto; max-width: 20rem; - height: 15rem; + height: 14rem; svg { * { From 7728d48c0e2a02bcbff230190ccabb28a33ed182 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Tue, 20 Apr 2021 20:40:00 +0100 Subject: [PATCH 05/26] Include welcome illustration --- src/media/layout/ds-logo-pos.svg | 1 - src/media/layout/welcome-illu.svg | 130 ++++++++++++++++++++++++++++++ src/pages/index.js | 55 ++++++++++++- 3 files changed, 182 insertions(+), 4 deletions(-) delete mode 100644 src/media/layout/ds-logo-pos.svg create mode 100644 src/media/layout/welcome-illu.svg diff --git a/src/media/layout/ds-logo-pos.svg b/src/media/layout/ds-logo-pos.svg deleted file mode 100644 index f3c056b..0000000 --- a/src/media/layout/ds-logo-pos.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/src/media/layout/welcome-illu.svg b/src/media/layout/welcome-illu.svg new file mode 100644 index 0000000..ca2033c --- /dev/null +++ b/src/media/layout/welcome-illu.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/index.js b/src/pages/index.js index 8fb54db..7692f6e 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -28,6 +28,7 @@ import { InpageBody } from '../styles/inpage'; +import welcomeIllu from '../media/layout/welcome-illu.svg'; import logoEsmapUrl from '../media/content/logos/logo-esmap--white.png'; import logoWbUrl from '../media/content/logos/logo-wb--white.png'; @@ -44,7 +45,14 @@ const HomeInpageHeader = styled(InpageHeader)` overflow: hidden; `; +const HomeInpageBody = styled(InpageBody)` + position: relative; + overflow: hidden; +`; + const Intro = styled.section` + position: relative; + z-index: 20; display: grid; grid-gap: ${glsp(2)}; align-content: center; @@ -166,7 +174,11 @@ const CreditsList = styled.dl` display: inline-flex; width: auto; max-width: 100%; - max-height: 2rem; + max-height: 1.75rem; + + ${media.smallUp` + max-height: 2rem; + `} ${media.mediumUp` max-height: 2.5rem; @@ -174,6 +186,33 @@ const CreditsList = styled.dl` } `; +const HomeIllu = styled.figure` + position: absolute; + top: 50%; + left: 50%; + z-index: 10; + transform: translate(-50%, -50%); + + ${media.mediumUp` + transform: translate(-25%, -50%); + `} +`; + +const HomeIlluInner = styled.div` + opacity: 16%; + width: 544px; + transition: all 0.32s ease-in-out; + + ${media.xlargeUp` + width: 640px; + `} + + img { + width: 100%; + height: auto; + } +`; + const Home = ({ data, location }) => { const { title } = data.site.siteMetadata; @@ -185,7 +224,7 @@ const Home = ({ data, location }) => { Welcome - + @@ -248,7 +287,17 @@ const Home = ({ data, location }) => { - + + + Welcome illustration + + + ); From 3d72d6ffda113e58be8d0d6b8635d4d33ed7479e Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Tue, 20 Apr 2021 20:58:29 +0100 Subject: [PATCH 06/26] Improve welcome cta display on small screens --- src/pages/index.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/pages/index.js b/src/pages/index.js index 7692f6e..7d8530c 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -130,6 +130,19 @@ const IntroActions = styled.div` > * { grid-row: 1; + display: inline-flex; + align-items: center; + justify-content: center; + + ${media.smallDown` + line-height: 1; + height: 2.25rem; + padding: ${glsp(0, 1)}; + `} + + ${media.smallUp` + min-width: 12rem; + `} ${media.mediumUp` min-width: 14rem; From a31f021e54d803ee52388a8fc94c5b232fa956d8 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Tue, 20 Apr 2021 21:13:46 +0100 Subject: [PATCH 07/26] Tweak welcome illustration reveal --- src/pages/index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/index.js b/src/pages/index.js index 7d8530c..56c9f24 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -15,8 +15,8 @@ import { visuallyHidden } from '@devseed-ui/theme-provider'; +import { reveal } from '@devseed-ui/animation'; import { Heading } from '@devseed-ui/typography'; - import { Button } from '../styles/button'; import Layout from '../components/layout'; @@ -205,6 +205,7 @@ const HomeIllu = styled.figure` left: 50%; z-index: 10; transform: translate(-50%, -50%); + animation: ${reveal} 2s ease 0s 1; ${media.mediumUp` transform: translate(-25%, -50%); From a472872fae3dc2e3c1e734c10772ca990d6f19c6 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Tue, 20 Apr 2021 21:54:39 +0100 Subject: [PATCH 08/26] Include updated meta images --- src/media/meta/android-chrome.png | Bin 0 -> 3153 bytes src/media/meta/apple-touch-icon.png | Bin 0 -> 3081 bytes src/media/meta/default-meta-image.png | Bin 0 -> 29145 bytes src/media/meta/favicon.png | Bin 0 -> 2152 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 src/media/meta/android-chrome.png create mode 100755 src/media/meta/apple-touch-icon.png create mode 100755 src/media/meta/default-meta-image.png create mode 100755 src/media/meta/favicon.png diff --git a/src/media/meta/android-chrome.png b/src/media/meta/android-chrome.png new file mode 100755 index 0000000000000000000000000000000000000000..72412f0611f31e2de7f888867b1e3f16aa0a13b2 GIT binary patch literal 3153 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 literal 0 HcmV?d00001 diff --git a/src/media/meta/apple-touch-icon.png b/src/media/meta/apple-touch-icon.png new file mode 100755 index 0000000000000000000000000000000000000000..d35bbe47d344840c0fc956cc707044f4843c449f GIT binary patch literal 3081 zcmV+k4EFPhP)Px#IZ#YgMMrQ;-G-I{9O?*C4AZ}8B z{_yed=j;3Xa=_#J`|Ic5pDV}TpF{Er@}Ivw^U;wrwjSoM%PEd8G1&jUFDE&^n`r+% z4RfHbWBqkG(eYL0;N?`u&)I~d3CPI?IuG^t*`U9Jy1Sh2_;)_(i1P7uKIpIWiF6d| zQ$k-(czmEg&>!dz^auI_eN5S-;vv^-z;G?BR_VBfGQS;q!Gvdwwaz&r!l2>2 zJPYiNP8iqTc+wVj^LA)lDFz3IRnfN$KQQ5QZO@S3r9S<2to`MbSlxHwFQX9BSjT z@u#OX^`BcOVbpK{K|3=FNLrG9NsYw>ID|h~Vqm*J^c24vifO~-YvgP1t{d-sEs%Y@ z^j>m~-S2sKXs--No^J-A%{1f08C0jW_do!=bwkBNLj~e zcW5h}2@%eQ@Tw_0V2g7FI-CnMGi0BR+i!rzK~Q5GRFk8^GPTSgb)hyjCK>#C8uods zcmp&Hf|@;gtkODU7ewenW@{4@s_d8djeAeTK~S6aLqTEKUX@@u+3;Cpmp!3pP6d>2N1+{ZE}>J)HVnJ4NzMpplRwElVPWoo z76}YiVAb+i+le$JeOwQ7Cygxj)!9pQosUI1fPylivyYQnc70-TLt7x1kn6 z7Mb>FBoOaQj|W{=~+K*1U(PeXWUAGgmAa71H^I{4|aRjhJmnhCN9%FdT`+r zwo2A?)K!V~M+8qRo_{qYM{2+k}GDiE>(V+z?t8iQtOEVYS5o znPoL?CW@%c))Q?8oo|L3Rd231&EWdXKM1!7_!7DDN+aZmWGuOD`C_3f-dz4o zIIQ9c>Qj`}1urodaGK1tD==*fT@&lLQh!PoRN7CcNH{eG79C#89=q-9h-OV@a2(w) z!OLL9VCr|GPv!@aVlox(^`7pj*iJ@*8T50$n$t*~bl74Qs|Y9C$bPLeLRq4rq7a8$ zO9Xcn^ygZ)YP?N$MoiWGnEil6L_tp3u0SokJY~ts zuQr%+Yg6u~$crVax!bdQ+d{`7HS6#^2umsi#H3k>jzuMp3%U2C6E=jNl7$4bO5kCX zVm9WvkYPn;1n(^4ZV0_(ik2udgRB*>V?@nbRw=i4mY%nTM$zN}B?hSCZA1mnBz-6b z|GqeJ%l>Ioqk=Tp#K`3YM5q?0Yfc0v&3QWoLQf*jDz3fuq;exp zF_>r{&Wmljkim;os^JtX$b1t)^UK|%8OTkc7bAiYc8PpW-UR2_b6%uq?uWYDw_P$a zu1bed3_v8Ikt@w60BLW@#NC?seN5dKS&I9C16@rdJvgfYS>3ypERH`6^xT#?wA79o^_u92!OLNw7twD8y?)NWL9KQi2fF5Ef{etTSmjkq zt2megiARb8QidbMe@0fPYpuE!G?t@4kL;8>@V+K=gSTOIA8I&>`6$q;_G5(B;DRF5 zmMDJ|XwwRe$%-poXSf5z(c>+JJ6Ob0U?ddlpjyqeW~<3P+JdkL^jzvKoYNz#x*$^n z!xK^M9?-tVg{0S<$&w>+AgQDI>i;S__vJG@%F+|gea~E9RSl-$idTa>;)uI4i7kNRq zicQ7eruRVmYaON*Yi5^yRC zXL=X(Bs-YAYWU!#@ua7m&zk$@KxTU{kIi)$>48A?#094*EsaN=AhxhqkExeT1h29;OHIPWIQr za$YM(s~IG1D`p2fm( zqxzPM*g&5t2`7i+d!d)im-us zKznXm^VF{?hIR390en|yjTCBX3t3%R>|Q#9@am=lZ){Q#HV#VW&ei7FXbK5ZFZye@ zG`jsD@|!kpt>hqFh6&S@^-1rE7N1lw#~xEJ(NlIO8FPBEj9-2aWXTik62*-`9f zQ=0V5d^tGu#iej1SQYDXRm*O+$LxO4Gf-})hrC{U!yRUK++Y}Zzew6-L&8@;r@2UF zvx-gkY29-x=do1|tDsML zv#?X%mhF@`z&quw2G4m@$5Y-u^OQF#J?AZ9&w2CRQ{LwIoHvv{=dHU>dXw~1-H!f0 X+F&S{XCYeP00000NkvXXu0mjfNwMzZ literal 0 HcmV?d00001 diff --git a/src/media/meta/default-meta-image.png b/src/media/meta/default-meta-image.png new file mode 100755 index 0000000000000000000000000000000000000000..0d0715e9d3d88724f02cf7c8e6b0f8c7497474af GIT binary patch literal 29145 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 Date: Tue, 20 Apr 2021 22:00:01 +0100 Subject: [PATCH 09/26] Refine meta images --- src/media/meta/android-chrome.png | Bin 3153 -> 1394 bytes src/media/meta/apple-touch-icon.png | Bin 3081 -> 1320 bytes src/media/meta/favicon.png | Bin 2152 -> 800 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/media/meta/android-chrome.png b/src/media/meta/android-chrome.png index 72412f0611f31e2de7f888867b1e3f16aa0a13b2..207cfa47857fdd32e010c47988ca954046439407 100755 GIT binary patch delta 1346 zcmV-I1-<&w81f2`L4P(-OjJcja735igB6xxvM_rep*KH zJ%))v;a@QgUy46Y9kZAYwJ`J@yXbe7u*@C9n3vc0XIcJ>;86!--!YB;o(EIMHl|wx z;#>ZEBVt?uw<;KC&VYFoOUF7E-Yw|bhI-zBUd+4!Gk-wGJQ|<@8lV9hpaB}70UDqI z8lVEe>by4Av3~>vue6m?Zc^I73=l4#{Zj6Cn3WH}-M;&w_*Vf7!0MIxTJmRT1^_RA z3spT}weojCSnCF8`Dbj_Xsx_=)Rq{4lc2a-l=69^1Pb1NT5GN~bE%qw040;+ z!3o6xVUrl)iUBlA`K2!f@Hpj18!VuJV37d23;^5%{eKvy3_xR*Uv5PJO5#N*0C0%q z$LdE#i3G;XVo@T2G24(Rk-(TEfhdx|_lez_72qU#_^ben4=~&TC_QOWfX)dp1OSYl zv@Aen1ZWBXLQh&2fKUaZ*f@sN5tRlcZ^xGgByY!`26!Ss>R?bFkeJ9NCv(r$v11NM zOXSmlKz|2FO61dkl@O4U$mdsNlz@apJ`dPP1&$tINdeJ`d>&wAl~qs+z#h9iM*#2{ zvUqh~X=5SleZa;RsX!_9ymYaFc3dEPqe|uqz)B6YJFRm8R7V3?a|r?w0DXfRVP*k6 zBeOXGo(_O~$Z=*&z&okB{GZKVag2DEqCU+oLU z09zcy+!s_q2{2&;`oj8hCDle)TwU#GH- z8GjadK9}Wu05X~1gH#SFev~q9B-;d0Ax~K zCqU6id1#_Xav6u*; z`ex~sYU4=*l!Bin1PuFaDH#jf1iHn3IL}EGWB8l;c5W5hRx@`F=&z{bU1l#@-(~b|equw|}6}01eOp4bT7$&;Sk401eOpT;o6Z57F%Z$vFFe z^SnS97XarfxK@A=Bio*|A8!CLFwNt65RX_`3OnXSykcP3 ziuyt9V&s;|^E8TM4Aac1_=ET!<1+R2Bj&lEmfhF?2hG^RFP5rTVE_OC07*qoM6N<$ Eg530MlmGw# delta 3119 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 JPDHLkV1l`6?NtB( diff --git a/src/media/meta/apple-touch-icon.png b/src/media/meta/apple-touch-icon.png index d35bbe47d344840c0fc956cc707044f4843c449f..1961091ba18bccaa36e1d39f5dc22284de18968e 100755 GIT binary patch delta 1271 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 delta 2110 zcmV-E2*LND2IvrwL4Q9`OjJcja7N*U?RkA~<{(t{(eQI{ho81KhH?u>@ zf@G_lBgq^Ne_i+M`BdwA_!rmhvM$B9)O1YX+2-A$NNX}FS__3tM1zfkb=_1 zh6f+8n3%kIU5rP&Nv03q$ddaBwhOT?rAq`ghrP?w|}jM=a>}BhBCHZNajgaVhG#P$> zGSvVN8NkLz1SnyGJqb3A;NUIL>iGo)q5*8vYJUnxWTWm)nGiOo2D!9HtfRk3M1FlO z&-8mmfu`j$L!B7En!7ax`Kge6`r4DSVC_s*bX{4NufpO)WzcO0<3@@>-q!moT$v@~ zD4FSHPpS#vpwo`;PVt%Li@wtnE)Z*k=8=E`z;B_?)I9USBmUJe-k+Z;Frf*cKE&pu zS$}ZbK!ymgaq9K&dZ>d$pm?bWWvT$mylP@GFzJF;BN_g3^p!pzRX9H(S9FA#J;}10 ztwQyNNf*`ZBa7YN9ew0)4SDqOXz&npD=^7-VcD{qZ#&eqp=#_mBi(Ngh)^Ef$Xlso zGp=PyX3Z7LL%rcK5)To$#?iQ3&d1+sx_@raIlnT7IjVTcT7(z#TCIRNxYO}+UTJ^M zLB9W(%X39NwnP~RJ+0L&(KkhNz7NG(l?Jt&ApejR%m0FM6r&~gFiLF#AXZ#ZEvpa3 zHpJ}o6Hl9ZA07)vwoT{>!p|;^+=IX0n=5dehv?T?vC4Yf% zlmQFc7ut_q-7#-4X;m~#iDuhM(5Y{vHdfl2Pa)=Np%L%DG-%Ue9yaBU#MKA(W&y}Qo}$YC ziW!$hWk2ljc*<6wKp1UX&LL5W=6}^(BX#6O{-YB6(RQb(Rj!+TgiH00VH>*o<=y6R zr67a{F6J~Vj^VH*Rw*_@FNaF3=J%34`z}Q+o8;hMf8w9Ocb8q@Z zgY@m64fbxyI!&;Y&V8uB8h@CEPKVE~RcsE>Ya$p!iyR7dgg=txTVAj@qDqL`b;uEg zgNeo>EcvBI@X1w_%?D4`N?mty<>Ei^j`0=^7CthZJ zx6kC?Z{l6D6JeVAml@2Vji3{LIvu`Z_b!g1m-jfj|NQBId+jh$mVatv!=h!7gcqhy z6JfD(n9{j);s>4=DfhURKU5H<91buI9to?XR>pGovjO^1_`Mg{qQPl5P4TM6+t~89 zL)TeInZQEnlQs0_6Re&Xbau(>t~{gVv-BiWyON^U9uAfg0~bcNgWJiyJWHJ?N**Sl zkhYDhF5yjdQ^9-5Tz@0KoprYo=l+V@wryM?YRy3BT4-zWZE`-&Ewi?5uFRA9&c`R= z)*U%PouAgyU~QYWf>uwvdfZyQ^mKak>omht)911dN(}b2R;>dk7Eba#<RZkCqZO(s7f;h*1y+*e+zOn;Y|Il;BJ{}1FkxD z7LZy$Iz6|DHStBoDm@MZ-Op^hy}-S~6!oYHfgwZ)Ti#+y^`&Y2&zwo%oD_r5CJn$( z4sX+dx3;vGG<^$2$6G#b^V^4Gq6_l{>_u!aH)lJd?FB%ZOoGnuuklWDtO7A*Hy`4p zxobMdw*P$lqJK4!t6PK2H1{y5yDuLU!8aMv7M|f0VdD@yQRw4>KjKY{UfLxExCp=$ zTE2K3zk;1g*-TO}-B0XO4BxE%h$Ri#M~*uVY@`FyS| o2LTa|hktXewaAY|UM#Kt1Gdca#exQ?8vp Date: Wed, 21 Apr 2021 11:50:46 +0100 Subject: [PATCH 10/26] Move meta images to static folder --- src/media/meta/android-chrome.png | Bin 1394 -> 0 bytes src/media/meta/apple-touch-icon.png | Bin 1320 -> 0 bytes src/media/meta/default-meta-image.png | Bin 29145 -> 0 bytes src/media/meta/favicon.png | Bin 800 -> 0 bytes static/meta/android-chrome.png | Bin 2150 -> 1394 bytes static/meta/apple-touch-icon.png | Bin 2049 -> 1320 bytes static/meta/default-meta-image.png | Bin 39636 -> 29145 bytes static/meta/favicon.png | Bin 1277 -> 800 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100755 src/media/meta/android-chrome.png delete mode 100755 src/media/meta/apple-touch-icon.png delete mode 100755 src/media/meta/default-meta-image.png delete mode 100755 src/media/meta/favicon.png mode change 100644 => 100755 static/meta/android-chrome.png mode change 100644 => 100755 static/meta/apple-touch-icon.png mode change 100644 => 100755 static/meta/default-meta-image.png mode change 100644 => 100755 static/meta/favicon.png diff --git a/src/media/meta/android-chrome.png b/src/media/meta/android-chrome.png deleted file mode 100755 index 207cfa47857fdd32e010c47988ca954046439407..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1394 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 literal 2150 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE4M+yv$zcaljKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(;pU;#6N4N~Z9ZF!1;f&GG~i(^Oy z+7yxw!U4sx%S~|(??ep*=%=y@L%l$-`BL=i{s+sI-|3{pYE=_f8K{N@6HNu z{rIE&x*uw-f6PDkTj>s4WB)`4>)p|B-`tC}l`MaES9^DRZGSu0h5N7fch0}99%J)n z@(w;G_nrgCK7IW0Y{Psuc9tLCcK=HKBf9^JRC-^8=e}5uGb#aIHt(}y;^MXY)t!Tx zp4k3>S7!6*gTKW^4RA!{kz|C zPuTxqn|9?Hd$q&W;Y{M+&sE)DU(a#H{!69s{?FItuAhBr>bXGn*V?6zKUUg_ysBq< za{s60pUE9N-uNh-ubTJsO~fb3d-wl!On>V&?@3YI+`M3xTmFq__3gT^uB)$PZm;L! zlm8)n!upTR@7R6Yj_=pwRVffDMpqH788wB8yJ=y4)RuRV31M|TE-%9pd=zIlSRPcvCF9`3`{flymfmSm@?*g z%oK89xSY6hsh|Txudrq?6GwuT&Q=p9js=BEsa_0>KJ81VxiK)B_$?W=Y%~~06UZ>g zXA8Q8*8A=b+k zzAik=#^8;cDu<5Bg!KK^GwD3n^#!1-^(*+wE7#nR~S3cY9rGMbo-%pF&?wG!CV+9*#d%lLPn(@=2S0{H| zzL)zX^`1h4PeSthHQz;V`!|2j2URM&Z+~22>savY@79>62KL5pXWoBaI(3J^zVGM5 ze%mvCYW~;e|L8T(v*UXl541YWd%5n|)02ni-(ALXLc8wQ#y_*BZRxg=@lx1hDRAS2 z@!ox5a`h3<8WoR@9JdNo_ab06fG{#!QISpK(PpCR`&yZX~p-k&`Ab|;tC=+`szOnIzm Tm$!QYsE+q^^>bP0l+XkKyn9du diff --git a/static/meta/apple-touch-icon.png b/static/meta/apple-touch-icon.png old mode 100644 new mode 100755 index c28d4f75ae2557c695d907d6fd0b79743391a23f..1961091ba18bccaa36e1d39f5dc22284de18968e GIT binary patch delta 1312 zcmV+*1>gFC5U2`}8Gi!+000UT_5c6?00d`2O+f$vv5yPOe}(^*n*Ykp|E8<| zxV-;wcK>2&|NdMwtN;K23UpFVQvm<}|HBvtkL5mO6!Fgh0DlB}Nkl-^8HPtp*LhrIm$8iVbsFB|GIt7o#C&-n zPqSnY^RBfoqht}|Q)6Ej$t0HRqn+89Z|d*1o<_+i#(Te>C99afItMTFy@N1o=&z=p z7H;Te8m^LETz~oXj;();{LtgD@Ix;=(UM`D=o5XSPxOgC(OsffV}n+P4LVxywD<}Y z8KC3Vyy7YJ+Be#GxAT6hyG5_J1{S}B>lAIprwCo5SM?Dsd|dlO2l00(?Sl8#(D`9# zBS4|_=C=mh4?}B_9or9Z;r0`3WwaL<5v!sjidmSdXn%);wl&cf$BdB7)6r2OpT#6aYo`$cM#(AkD>A)M9I`cp?S z5$Ivb(Fz}}Iid@*UL&-lMr#6eS=JlsC%p2k*9u*f^%Bs50xdj8bV&jk8cc}ATf^

    ThK)Xt2RCHd>%Q&1v{YM5zSR|35 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 D5)KHJ diff --git a/static/meta/favicon.png b/static/meta/favicon.png old mode 100644 new mode 100755 index ed73a48e7dbcd90ac4790acfe5a2dc7f4436f20c..04dcb443d4969e282479ebc582a2734595192a66 GIT binary patch delta 788 zcmV+v1MB?#37`g$8Gi!+007lShYA1y00d`2O+f$vv5yP?tj|9yx*UuO(OzwfSD-E08yzst6TC>2erbC3k7WdwImImQ-S_u)(L`d zVb}fD>?U_J@900Kvk-nQ{n{+V-G}5hQ&|MAk4-}?zg&5qtU;eM`_0xS2tp?qJ^*UA z6asvf)JVba_Y~m_=$$!BQ}LCkwCLjSS*Z)4#qpd)A74C>l};@RLdgJ&d z1c+n?9zk49Fpkv7B-lp;JCk7Og~BBmwFRC_(6y15vX@AziwU}4S1J&W79qHEw38sX zbMz)caO3DKL-4s|7#V#1-(k6s<>T}_QjJTYM17?ZzJJS_moG3&c}}Pjk2Z$2N~+Q8+%gVh;YWpO0v!DQ=s|_uH$pIZ|ea zL(k1I+1YR&e@>1lyBW6_e@2cx1%E;Y@E!@ z#ol;MFMo<>fg+Nkxe%EI!#PoN2}W+VT!LZ6Gpn7z-Q8}KR!B5XJ(FPASpt(_ypZ8J z0Wkv|Q)VMX6hip-qkRi2%IPDFny1ta#8xsqKA)6z%_1)-VYhg*K8E((#}aZPBK3Hm z{HK77qC+o%nsZH~QedO^j~-QqJa*SSRZaJoV1FaZa~xk#O`O6V5PA=ss&}KA?Q}}2 zI)6^)a{dT%0}~OOG~o1j9x*i~&i`$P*h^H1^d`Gu)}>i7{s+Sftsgo;@_+x;oD-E= zdjuy+V6609Gpa}8k4Db2W5u70oRw2MwZM*o1bGGi5vtLsH5UFJi6Ea-d;z&Y0}>nW S@C^q50000@Ci;uuoF z_;#*+#?=6cqx+>7u3sOuy~&0}*5%;AwHE@fb2Tk4DJ&4$wS((Z#>-nvA3V9R)Pk#N zbN0g7O$#hErYyg(_J8z+iv2$>J^T9i<;p#m8!Q_q?RoO#&Xe*j!c6 znHkafOcU?=rEIq_%;Wa=kAtgeZYTbM^J5@Uz_>-tj*`5PV8E+=Jn03>#J@*4Ai%B ze__4VaQDO5z%uq9)%zZZ3l>hFyVdx6SX2GOx_@cXg-h)=?YLuo=W*VIA=$Y0j~-`nz+kldOpVPcG|2b8#fX)y?hcrRm!NO6p3WoSw|DZ

    `s2CHsvGA{q-xml8LFGH=V;gs@g=kDB0 zzt6b1boOVV)lX&pwnmi!h0a@XA9#K1*rQ3^R}Tf;yJ_`$&zefH2KiG*cIY0tnN`^y zI&)h1?KPW)`^pc0oDzEN-e%LQQ|;4?&Mf`$ba&k9+bMNlcYnVq`@nt^ulSpN+<&(( zdnj12%ron<>yLN$1RK^@{MD-YFy+yrUCQi6b26{aT&L6Cul{xyQ$gc$k>4wK7Z%3l zyZb%4zsziRWqReOQ|D!^=P~{~_2|xg?zjfKx~*qdysMe$^ZzMF>E-*M|Auas|55Wk znE6EO*)*$3SLgSq?zkPgLpoCTQN$$E>mfz&4*#ropAv1i?eSsmf32_OBRTr*(|I2y TO1#tN2NgY@u6{1-oD!M Date: Fri, 23 Apr 2021 10:41:18 +0100 Subject: [PATCH 11/26] Allow configuration of popover attributes Fix #40 --- docs/README.md | 47 ++++++++- docs/media/popup-label-val.png | Bin 0 -> 15280 bytes gatsby-node.js | 8 ++ schema/validate.js | 6 ++ src/components/study-map/mb-map.js | 9 +- src/components/study-map/popover.js | 90 ++++++++++++++--- src/templates/study-single/index.js | 8 +- src/utils/inline-filter-processor.js | 139 +++++++++++++++++++++++++++ 8 files changed, 290 insertions(+), 17 deletions(-) create mode 100644 docs/media/popup-label-val.png create mode 100644 src/utils/inline-filter-processor.js diff --git a/docs/README.md b/docs/README.md index 5768315..148ae7a 100644 --- a/docs/README.md +++ b/docs/README.md @@ -42,8 +42,13 @@ The main information and metadata of each study is managed through a `yml` file, | layers[].legendData.dashed | `boolean` | Use a dashed line. Applies to `line` | | layers[].legendData.icon | `string` | The basename of the icon, without file extension. Applies to `symbol` | | layers[].legendData.min | `string` | Minimum value printed on the x-axis. Applies to `gradient` | -| layers[].legendData.max | `string` | Maximum value printed on the x-axis. Applies to `gradient` -| layers[].legendData.stops | `array` | An array with RGB colors that indicate the stops. Applies to `gradient` +| layers[].legendData.max | `string` | Maximum value printed on the x-axis. Applies to `gradient` | +| layers[].legendData.stops | `array` | An array with RGB colors that indicate the stops. Applies to `gradient` | +| layers[].displayData | `array` | Configuration for the data to be displayed on the popover | +| layers[].displayData[].label | `string` | A static label for the popover. Exclusive with `labelProp` | +| layers[].displayData[].value | `string` | A static value for the popover. Exclusive with `valueProp` | +| layers[].displayData[].labelProp | `string` | A dynamic label for the popover. Exclusive with `label` | +| layers[].displayData[].valueProp | `string` | A dynamic value for the popover. Exclusive with `value` | ## Map configuration The map of each study is configured using a `json` file that follows the Mapbox Style specification. For a full example, please see [`kenya-mb.json`](/content/study/posts/kenya-mb.json). @@ -255,10 +260,46 @@ legendData: [To top](#managing-studies) # Popups -The popups in the application show all the attributes that are available in the source data. To adjust the label or the value, you can update the original GeoJSON or Vector Tiles. +By default, the popups in the application show all the attributes that are available in the source data. This can be customized by specifying a `displayData` list on the layer configuration. ![](media/popup.png) +## Customizing popup data +It is possible to extract data from the features the map layer and display it on a popover. +For each layer you can specify a `label:value` pair using a syntax expression. + +![](media/popup-label-val.png) +_The label property will always be displayed in uppercase format._ + +There are 2 properties to get a label and a value. + - When using `label` the value is assumed static and will be displayed as is. + - When using `labelProp` the value will be extracted from the feature data and computed. + +These two properties are mutually exclusive. Use one or the other, not both at the same time. The same is true for `value` and `valueProp`. + +To allow some processing of labels and values it is possible to use a simple inline piping syntax to define functions (and respective arguments) to apply to a value. +The feature property name is always the first element to appear and subsequent functions are separated using pipes `|` and arguments are separated using colons `:` + +Example: +``` +road_length|round:2|suffix:km +``` +In this example the system would get the value of the property `road_length` from the selected feature, `round` it to `2` decimal digits, and then add a `suffix` of `km`. + +The available functions are: +``` +sum : value +subtract : value +multiply : value +divide : value +prefix : value +suffix : value +capitalize +toUpperCase +toLowerCase +round : decimal_digits +``` + # Troubleshooting ## Map shows an unexpected layer If the map loads with a layer that can't be managed through the layer switcher, it's likely that you added a layer in the Mapbox Style that isn't referenced in the layer configuration of the `yml`. This is by design. It allows you to overlay a contextual layer on the map that the user don't have control over. A use case could be a layer that adds a disputed border. diff --git a/docs/media/popup-label-val.png b/docs/media/popup-label-val.png new file mode 100644 index 0000000000000000000000000000000000000000..052cfb617d2debdb7485c89a426c518525530164 GIT binary patch literal 15280 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

    oKy-oJ1K3Hs_9 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 F{{c>2I%WU> literal 0 HcmV?d00001 diff --git a/gatsby-node.js b/gatsby-node.js index 22c0ed5..17da045 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -6,6 +6,13 @@ exports.createSchemaCustomization = ({ actions, schema }) => { const typeDefs = [ ` + type DisplayDataEntry { + value: String + label: String + valueProp: String + labelProp: String + } + type LayerLegend { type: String min: String @@ -30,6 +37,7 @@ exports.createSchemaCustomization = ({ actions, schema }) => { info: String source: PanelLayerSource legendData: LayerLegend + displayData: [DisplayDataEntry] } type ChartDefinition { diff --git a/schema/validate.js b/schema/validate.js index 6333c1a..5d1d2d7 100644 --- a/schema/validate.js +++ b/schema/validate.js @@ -78,6 +78,12 @@ const studySchema = new Schema({ min: { type: String }, max: { type: String }, stops: [{ type: String, match: /^#[0-9a-fA-F]{6}$/ }] + }, + displayData: { + value: { type: String }, + label: { type: String }, + valueProp: { type: String }, + labelProp: { type: String } } } ] diff --git a/src/components/study-map/mb-map.js b/src/components/study-map/mb-map.js index 8c3482c..e41e1c0 100644 --- a/src/components/study-map/mb-map.js +++ b/src/components/study-map/mb-map.js @@ -11,7 +11,7 @@ import T from 'prop-types'; import styled from 'styled-components'; import mapboxgl from 'mapbox-gl'; -import Popover from './popover'; +import Popover, { computePopoverProperties } from './popover'; import { diffArrayById } from '../../utils/array'; import { graphql, useStaticQuery } from 'gatsby'; @@ -145,10 +145,15 @@ function MbMapBase(props, ref) { const panelLayer = layersState.find( (l) => l.mbLayer === feature.layer.id ); + if (panelLayer) { + const popoverProperties = computePopoverProperties( + panelLayer, + feature + ); setPopoverData({ title: panelLayer.name, - properties: feature.properties + properties: popoverProperties }); setPopoverCoords([e.lngLat.lng, e.lngLat.lat]); } diff --git a/src/components/study-map/popover.js b/src/components/study-map/popover.js index c9e13dc..96c90d9 100644 --- a/src/components/study-map/popover.js +++ b/src/components/study-map/popover.js @@ -6,6 +6,7 @@ import { headingAlt } from '@devseed-ui/typography'; import ShadowScrollbar from '@devseed-ui/shadow-scrollbar'; import MBPopover from '../mb-popover'; +import { computeFinalPropValue } from '../../utils/inline-filter-processor'; const WideMBPopover = styled(MBPopover)` width: 18rem; @@ -79,18 +80,11 @@ export default function Popover(props) { {data.properties ? ( - {Object.keys(data.properties).map((k) => { - const v = data.properties[k]; + {data.properties.map(({ id, label, value }) => { return ( - -

    {k}
    -
    - {v - ? typeof v === 'string' - ? v.trim() || 'n/a' - : v || 'n/a' - : 'n/a'} -
    + +
    {label}
    +
    {value}
    ); })} @@ -110,3 +104,77 @@ Popover.propTypes = { lngLat: T.array, onClose: T.func }; + +/** + * Prepares the list of properties to display on the popover taking into account + * the display data settings defined in the panel layer. + * + * @param {object} panelLayer The panel layer definition + * @param {object} feature The map feature as returned by mapbox + * @returns array + */ +export function computePopoverProperties(panelLayer, feature) { + const { displayData } = panelLayer; + + // If there's no data config, return all feature values. + if (!displayData?.length) { + return Object.keys(feature.properties).map((k) => { + const v = feature.properties[k]; + return { + id: k, + label: k, + value: v + ? typeof v === 'string' + ? v.trim() || 'n/a' + : v || 'n/a' + : 'n/a' + }; + }); + } + + return displayData + .map((d, idx) => { + // To compute the label and the corresponding value we look at the keys of + // each displayData object. + // If there is a `label` property we assume that is it. If there is a + // `labelProp` that means that we need to get the value from the feature + // properties and compute it's value. + // The same is valid for the `value` but the keys are `value` and + // `valueProp`respectively. + + // Compute the label value. + let label; + // If there is a static label it has priority. + if (d.label) { + label = d.label; + // Compute dynamic if it exists. + } else if (d.labelProp) { + label = computeFinalPropValue(d.labelProp, feature.properties); + } else { + // eslint-disable-next-line + console.error( + `Label not found for layer [${panelLayer.id}] - displayData index ${idx}` + ); + return null; + } + + // Compute the value value. + let value; + // If there is a static value it has priority. + if (d.value) { + value = d.value; + // Compute dynamic if it exists. + } else if (d.valueProp) { + value = computeFinalPropValue(d.valueProp, feature.properties); + } else { + // eslint-disable-next-line + console.error( + `Value not found for layer [${panelLayer.id}] - displayData index ${idx}` + ); + return null; + } + + return { id: idx, label, value }; + }) + .filter(Boolean); +} diff --git a/src/templates/study-single/index.js b/src/templates/study-single/index.js index 0c96454..d07d1cd 100644 --- a/src/templates/study-single/index.js +++ b/src/templates/study-single/index.js @@ -39,7 +39,7 @@ const LinkToHub = styled(Link)` position: relative; &::before { - ${collecticon('chevron-left--small')}; + ${collecticon('chevron-left--small')} position: absolute; left: 0; transform: translate(calc((100% + ${glsp(0.25)}) * -1), 0); @@ -295,6 +295,12 @@ export const pageQuery = graphql` icon dashed } + displayData { + value + label + valueProp + labelProp + } } } site { diff --git a/src/utils/inline-filter-processor.js b/src/utils/inline-filter-processor.js new file mode 100644 index 0000000..3a26ae1 --- /dev/null +++ b/src/utils/inline-filter-processor.js @@ -0,0 +1,139 @@ +import get from 'lodash.get'; +import { round } from './format'; + +/** + * List of valid function for the inline syntax. + */ +const fnsMappings = { + sum: (v, v2) => Number(v) + Number(v2), + subtract: (v, v2) => Number(v) - Number(v2), + multiply: (v, v2) => Number(v) * Number(v2), + divide: (v, v2) => Number(v) / Number(v2), + prefix: (v, p) => p + v, + suffix: (v, s) => v + s, + capitalize: (v) => v.charAt(0).toUpperCase() + v.slice(1), + toUpperCase: (v) => v.toUpperCase(), + toLowerCase: (v) => v.toLowerCase(), + round, + roundSafe: (v, roundDec, errVal = 'N/A') => { + const rounded = round(v, roundDec); + return isNaN(rounded) ? errVal : rounded; + }, + percent: (v, roundDec, errVal = 'N/A') => { + const rounded = round(v, roundDec); + return isNaN(rounded) ? errVal : rounded + '%'; + }, + _error: (v, name) => { + // eslint-disable-next-line + console.error( + 'parsePropSyntax: Function', + name, + 'is not valid. Execution skipped.' + ); + return v; + } +}; + +/** + * Parses the input string into a syntax tree. + * Function are separated by pipes (|) and parameters by colons (:) + * The first piece must always be the path to the value and the subsequent + * functions to apply must be specified in the allowed list. + * Functions are always applied in order of specification. + * If a function does not exist it will be ignored and an error printed. + * + * @example + * Processing: + * Input string: prop_value|round:2|suffix:% + * Result: + * { + * accessor: 'prop_value' + * fns: [ + * { + * name: 'round' + * args: [2] + * }, + * { + * name: 'suffix' + * args: ['%'] + * } + * ] + * } + * + * @param {string} str String to parse + * + * @returns {object} Syntax tree structure + */ +export function computeSyntaxTree(str) { + const [prop, ...fnStrings] = str.split('|'); + + return { + accessor: prop, + fns: fnStrings.map((str) => { + const [fn, ...args] = str.split(':'); + if (!fnsMappings[fn]) { + return { + name: '_error', + args: [fn, ...args] + }; + } + return { name: fn, args }; + }) + }; +} + +/** + * Applies a syntax tree to a source object returning the resulting value. + * + * @example + * Source: + * { + * prop_value: 3.141592, + * another: 'foobar' + * } + * + * Syntax tree: + * { + * accessor: 'prop_value' + * fns: [ + * { + * name: 'round' + * args: [2] + * }, + * { + * name: 'suffix' + * args: ['%'] + * } + * ] + * } + * + * Steps according to syntax tree: + * - Get value from source using accessor prop_value + * => 3.141592 + * - Apply function round with args [2] + * => 3.14 + * - Apply function suffix with args [%] + * => 3.14% + * + * @see computeSyntaxTree() + * + * @param {object} source Source object + * @param {object} syntaxTree Syntax tree as returned by computeSyntaxTree + */ +export function applySyntaxTree(source, syntaxTree) { + const value = get(source, syntaxTree.accessor); + return syntaxTree.fns.reduce((v, fn) => { + return fnsMappings[fn.name](v, ...fn.args); + }, value); +} + +/** + * Computes a the final value of a syntax property string against a values object + * + * @param {string} propString Prop string to process + * @param {object} values Source object + */ +export function computeFinalPropValue(propString, values) { + const syntaxTree = computeSyntaxTree(propString); + return applySyntaxTree(values, syntaxTree); +} From c3664b918ad0070a9c79cdcc1088cfab6a2f7a8e Mon Sep 17 00:00:00 2001 From: Daniel da Silva Date: Fri, 23 Apr 2021 11:39:38 +0100 Subject: [PATCH 12/26] Improve docs --- docs/README.md | 16 +++++++++++++--- src/utils/inline-filter-processor.js | 11 ++++++++--- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 148ae7a..9c0c43c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -195,7 +195,7 @@ charts: ## Big number The big number consists of a title (`name`), a `value` and an optional `unit`. -![](media/big-number.png) +![](media/big-number.png) _Big number with and without the `unit`_ Configuration: @@ -268,7 +268,7 @@ By default, the popups in the application show all the attributes that are avail It is possible to extract data from the features the map layer and display it on a popover. For each layer you can specify a `label:value` pair using a syntax expression. -![](media/popup-label-val.png) +![](media/popup-label-val.png) _The label property will always be displayed in uppercase format._ There are 2 properties to get a label and a value. @@ -282,7 +282,7 @@ The feature property name is always the first element to appear and subsequent f Example: ``` -road_length|round:2|suffix:km +Length_km|round:2|suffix:km ``` In this example the system would get the value of the property `road_length` from the selected feature, `round` it to `2` decimal digits, and then add a `suffix` of `km`. @@ -300,6 +300,16 @@ toLowerCase round : decimal_digits ``` +Configuration: + +```yml +displayData: + - label: A static label + value: Static value + - label: Length + valueProp: Length_km|round:2|suffix:km +``` + # Troubleshooting ## Map shows an unexpected layer If the map loads with a layer that can't be managed through the layer switcher, it's likely that you added a layer in the Mapbox Style that isn't referenced in the layer configuration of the `yml`. This is by design. It allows you to overlay a contextual layer on the map that the user don't have control over. A use case could be a layer that adds a disputed border. diff --git a/src/utils/inline-filter-processor.js b/src/utils/inline-filter-processor.js index 3a26ae1..6bc3324 100644 --- a/src/utils/inline-filter-processor.js +++ b/src/utils/inline-filter-processor.js @@ -1,6 +1,11 @@ import get from 'lodash.get'; import { round } from './format'; +const numOrUndef = (val) => + typeof val === 'undefined' ? undefined : Number(val); + +const cleanRound = (v, roundDec) => round(numOrUndef(v), numOrUndef(roundDec)); + /** * List of valid function for the inline syntax. */ @@ -14,13 +19,13 @@ const fnsMappings = { capitalize: (v) => v.charAt(0).toUpperCase() + v.slice(1), toUpperCase: (v) => v.toUpperCase(), toLowerCase: (v) => v.toLowerCase(), - round, + round: cleanRound, roundSafe: (v, roundDec, errVal = 'N/A') => { - const rounded = round(v, roundDec); + const rounded = cleanRound(v, roundDec); return isNaN(rounded) ? errVal : rounded; }, percent: (v, roundDec, errVal = 'N/A') => { - const rounded = round(v, roundDec); + const rounded = cleanRound(v, roundDec); return isNaN(rounded) ? errVal : rounded + '%'; }, _error: (v, name) => { From cdbb6da45c9eaaf870bb94270022ea16ad4f3c17 Mon Sep 17 00:00:00 2001 From: Daniel da Silva Date: Fri, 23 Apr 2021 11:49:00 +0100 Subject: [PATCH 13/26] Clarify popover documentation --- docs/README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/README.md b/docs/README.md index 9c0c43c..16d54b4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -267,6 +267,7 @@ By default, the popups in the application show all the attributes that are avail ## Customizing popup data It is possible to extract data from the features the map layer and display it on a popover. For each layer you can specify a `label:value` pair using a syntax expression. +Once a customization is defined, only the specified options will be displayed. ![](media/popup-label-val.png) _The label property will always be displayed in uppercase format._ @@ -313,3 +314,6 @@ displayData: # Troubleshooting ## Map shows an unexpected layer If the map loads with a layer that can't be managed through the layer switcher, it's likely that you added a layer in the Mapbox Style that isn't referenced in the layer configuration of the `yml`. This is by design. It allows you to overlay a contextual layer on the map that the user don't have control over. A use case could be a layer that adds a disputed border. + +## Popover doesn't show a value after customization +If no value is displayed double check that the property name is correct. Some times it is a matter of an uppercase letter. From 289d23ce93d3ba6eafc435a64fea867526d8f50a Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Fri, 23 Apr 2021 10:44:01 +0100 Subject: [PATCH 14/26] Update meta site details --- gatsby-config.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/gatsby-config.js b/gatsby-config.js index 97ba211..1f04801 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -10,10 +10,11 @@ module.exports = { }, siteMetadata: { title: `Africa Electrification Platform`, + shortTitle: `AEP`, author: { - name: `Development Seed` + name: `ESMAP / World Bank Group` }, - description: `Africa Electrification Platform - geospatial analysis for an energy secure future.`, + description: `Explore electrification planning activities in the Africa Region, interact with country data and explore different scenario results. The program is funded by ESMAP at the World Bank.`, siteUrl, social: { twitter: '' From d105bb828536056c7802a84d83c5c757c4f1d6bd Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Fri, 23 Apr 2021 10:44:21 +0100 Subject: [PATCH 15/26] Update welcome page content --- src/pages/index.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pages/index.js b/src/pages/index.js index 56c9f24..ba32f50 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,6 +1,6 @@ import React from 'react'; import T from 'prop-types'; -import { graphql } from 'gatsby'; +import { useStaticQuery, graphql } from 'gatsby'; import styled from 'styled-components'; import { shade } from 'polished'; @@ -229,6 +229,7 @@ const HomeIlluInner = styled.div` const Home = ({ data, location }) => { const { title } = data.site.siteMetadata; + const { description } = data.site.siteMetadata; return ( @@ -246,11 +247,7 @@ const Home = ({ data, location }) => { {title} -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Integer massa nibh, pulvinar nec neque et, sollicitudin mattis - ante. Nulla id scelerisque nisi, dapibus consectetur metus. -

    +

    {description}

    @@ -329,6 +326,7 @@ export const pageQuery = graphql` site { siteMetadata { title + description } } } From 955bc7afb2ff23de9a9902495094fea7fbc650c4 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Fri, 23 Apr 2021 11:03:19 +0100 Subject: [PATCH 16/26] Include site short title in page header --- src/components/page-header.js | 16 +++++++++++++--- src/pages/index.js | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/page-header.js b/src/components/page-header.js index 40f880f..e47a069 100644 --- a/src/components/page-header.js +++ b/src/components/page-header.js @@ -1,4 +1,5 @@ import React from 'react'; +import { useStaticQuery, graphql } from 'gatsby'; import styled from 'styled-components'; import { glsp, media, themeVal } from '@devseed-ui/theme-provider'; import { reveal } from '@devseed-ui/animation'; @@ -108,15 +109,24 @@ const pageMainNavLinks = [ } ]; -function PageHeader() { +const PageHeader = () => { const { mediumUp } = useBreakpoints(); + const data = useStaticQuery(graphql` + query { + site { + siteMetadata { + shortTitle + } + } + } + `); return ( - AEP + {data.site.siteMetadata.shortTitle} @@ -149,6 +159,6 @@ function PageHeader() { ); -} +}; export default PageHeader; diff --git a/src/pages/index.js b/src/pages/index.js index ba32f50..0e922b0 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -1,6 +1,6 @@ import React from 'react'; import T from 'prop-types'; -import { useStaticQuery, graphql } from 'gatsby'; +import { graphql } from 'gatsby'; import styled from 'styled-components'; import { shade } from 'polished'; From 5d33ba7f05673c3ba791762c22df9d5368c169bb Mon Sep 17 00:00:00 2001 From: Daniel da Silva Date: Fri, 23 Apr 2021 12:18:47 +0100 Subject: [PATCH 17/26] Add page content type from markdown --- content/page/media/.gitkeep | 0 content/page/posts/about.md | 7 + content/page/posts/support.md | 6 + content/page/posts/toolkit.md | 6 + gatsby-config.js | 3 +- gatsby-node.js | 33 +- package.json | 1 + src/components/page-layout.js | 38 +++ src/pages/about/index.js | 167 +++++----- src/pages/support/index.js | 53 ++-- src/pages/toolkit/index.js | 50 ++- yarn.lock | 574 +++++++++++++++++++++++++++++++++- 12 files changed, 762 insertions(+), 176 deletions(-) create mode 100644 content/page/media/.gitkeep create mode 100644 content/page/posts/about.md create mode 100644 content/page/posts/support.md create mode 100644 content/page/posts/toolkit.md create mode 100644 src/components/page-layout.js diff --git a/content/page/media/.gitkeep b/content/page/media/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/content/page/posts/about.md b/content/page/posts/about.md new file mode 100644 index 0000000..042a4f0 --- /dev/null +++ b/content/page/posts/about.md @@ -0,0 +1,7 @@ +--- +title: About +--- +## The tool + +Pandas are really sweet. +Here's a video of a panda eating sweets. \ No newline at end of file diff --git a/content/page/posts/support.md b/content/page/posts/support.md new file mode 100644 index 0000000..5503108 --- /dev/null +++ b/content/page/posts/support.md @@ -0,0 +1,6 @@ +--- +title: Support +--- +## Supporting countries + +More information about the type of support GEPAR provides to partner countries. diff --git a/content/page/posts/toolkit.md b/content/page/posts/toolkit.md new file mode 100644 index 0000000..d5c32bb --- /dev/null +++ b/content/page/posts/toolkit.md @@ -0,0 +1,6 @@ +--- +title: Toolkit +--- +## Agricultural Toolkit + +More information about the agricultural toolkit. diff --git a/gatsby-config.js b/gatsby-config.js index 1f04801..bc143f1 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -1,4 +1,4 @@ -const contentTypes = ['study']; +const contentTypes = ['study', 'page']; const siteUrl = process.env.SITE_URL || 'http://localhost:9000'; @@ -58,6 +58,7 @@ module.exports = { ], [] ), + `gatsby-transformer-remark`, { resolve: 'gatsby-transformer-yaml-full', options: { diff --git a/gatsby-node.js b/gatsby-node.js index 17da045..8b1c908 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -159,24 +159,25 @@ exports.createPages = async ({ graphql, actions }) => { exports.onCreateNode = async ({ node, actions, getNode }) => { const { createNodeField } = actions; - if (node.internal.type === 'PostsYaml') { + if ( + node.internal.type === 'PostsYaml' || + node.internal.type === `MarkdownRemark` + ) { const parentNode = getNode(node.parent); const collection = parentNode.sourceInstanceName; - if (collection === 'study') { - const fileName = getNode(node.parent).name; - - createNodeField({ - node, - name: 'collection', - value: collection - }); - - createNodeField({ - node, - name: 'slug', - value: fileName - }); - } + const fileName = getNode(node.parent).name; + + createNodeField({ + node, + name: 'collection', + value: collection + }); + + createNodeField({ + node, + name: 'slug', + value: fileName + }); } }; diff --git a/package.json b/package.json index 9f8f883..135fa64 100644 --- a/package.json +++ b/package.json @@ -75,6 +75,7 @@ "gatsby-plugin-sharp": "^2.14.3", "gatsby-plugin-styled-components": "^3.10.0", "gatsby-source-filesystem": "^2.11.1", + "gatsby-transformer-remark": "^4.0.0", "gatsby-transformer-sharp": "^2.12.0", "gatsby-transformer-yaml-full": "^0.4.1", "gatsby-yaml-full-markdown": "^0.4.1", diff --git a/src/components/page-layout.js b/src/components/page-layout.js new file mode 100644 index 0000000..c657bbf --- /dev/null +++ b/src/components/page-layout.js @@ -0,0 +1,38 @@ +import React from 'react'; +import T from 'prop-types'; + +import Layout from './layout'; +import { + Inpage, + InpageHeader, + InpageTitle, + InpageHeadline, + InpageBody +} from '../styles/inpage'; +import { ContentBlock } from '../styles/content-block'; + +function PageLayout(props) { + const { metaTitle, title, children } = props; + return ( + + + + + {title} + + + + {children} + + + + ); +} + +export default PageLayout; + +PageLayout.propTypes = { + title: T.string, + metaTitle: T.string, + children: T.node +}; diff --git a/src/pages/about/index.js b/src/pages/about/index.js index f251765..abf2ef0 100644 --- a/src/pages/about/index.js +++ b/src/pages/about/index.js @@ -1,23 +1,17 @@ import React from 'react'; +import T from 'prop-types'; +import { graphql } from 'gatsby'; import styled from 'styled-components'; import { media, themeVal, visuallyHidden } from '@devseed-ui/theme-provider'; -import Layout from '../../components/layout'; -import { - Inpage, - InpageHeader, - InpageTitle, - InpageHeadline, - InpageBody -} from '../../styles/inpage'; +import PageLayout from '../../components/page-layout'; import Dl from '../../styles/typography/definition-list'; +import Prose from '../../styles/typography/prose'; import logoEsmapUrl from '../../media/content/logos/logo-esmap.png'; import logoWbUrl from '../../media/content/logos/logo-wbg.png'; import logoDevseedUrl from '../../media/content/logos/logo-devseed.png'; import logoDerilinxUrl from '../../media/content/logos/logo-derilinx.png'; -import { ContentBlock } from '../../styles/content-block'; -import Prose from '../../styles/typography/prose'; const LogoList = styled(Dl)` display: grid; @@ -80,88 +74,81 @@ const LogoList = styled(Dl)` } `; -function About() { +function About({ data }) { + const post = data.markdownRemark; return ( - - - - - About - - - - - -

    The tool

    -

    - Lorem ipsum dolor sit amet, consectetur adipiscing elit. - Pellentesque sapien justo, dignissim a mi eu, faucibus faucibus - lectus. Nunc nisl neque, dignissim non velit id, sagittis - fermentum nulla. Morbi vehicula, ante et varius luctus, purus - lacus commodo metus, vel ornare elit dolor a lorem. Proin vel - nunc non enim interdum sagittis a ut mauris. Vivamus ut - hendrerit sapien. Integer convallis semper ornare. Nam non - pellentesque justo. -

    - -

    Credits

    - -
    Partners
    -
    - - WBG Logo - World Bank Group - -
    -
    - - ESMAP Logo - ESMAP - -
    -
    Developed by
    -
    - - DevSeedLogo - Development Seed - -
    -
    - - Derilinx Logo - Derilinx - -
    -
    -
    -
    -
    -
    -
    + + + +

    Credits

    + +
    Partners
    +
    + + WBG Logo + World Bank Group + +
    +
    + + ESMAP Logo + ESMAP + +
    +
    Developed by
    +
    + + DevSeedLogo + Development Seed + +
    +
    + + Derilinx Logo + Derilinx + +
    +
    +
    +
    ); } export default About; + +About.propTypes = { + data: T.object +}; + +export const query = graphql` + query { + markdownRemark( + fields: { collection: { eq: "page" }, slug: { eq: "about" } } + ) { + html + } + } +`; diff --git a/src/pages/support/index.js b/src/pages/support/index.js index aaf5224..9aec25f 100644 --- a/src/pages/support/index.js +++ b/src/pages/support/index.js @@ -1,40 +1,31 @@ import React from 'react'; +import T from 'prop-types'; +import { graphql } from 'gatsby'; -import Layout from '../../components/layout'; -import { - Inpage, - InpageHeader, - InpageTitle, - InpageHeadline, - InpageBody -} from '../../styles/inpage'; - -import { ContentBlock } from '../../styles/content-block'; +import PageLayout from '../../components/page-layout'; import Prose from '../../styles/typography/prose'; -function Support() { +function Support({ data }) { + const post = data.markdownRemark; return ( - - - - - Project Support - - - - - -

    Supporting countries

    -

    - More information about the type of support GEPAR provides to - partner countries. -

    -
    -
    -
    -
    -
    + + + ); } export default Support; + +Support.propTypes = { + data: T.object +}; + +export const query = graphql` + query { + markdownRemark( + fields: { collection: { eq: "page" }, slug: { eq: "support" } } + ) { + html + } + } +`; diff --git a/src/pages/toolkit/index.js b/src/pages/toolkit/index.js index 70bfeb3..0dd12f4 100644 --- a/src/pages/toolkit/index.js +++ b/src/pages/toolkit/index.js @@ -1,37 +1,31 @@ import React from 'react'; +import T from 'prop-types'; +import { graphql } from 'gatsby'; -import Layout from '../../components/layout'; -import { - Inpage, - InpageHeader, - InpageTitle, - InpageHeadline, - InpageBody -} from '../../styles/inpage'; - -import { ContentBlock } from '../../styles/content-block'; +import PageLayout from '../../components/page-layout'; import Prose from '../../styles/typography/prose'; -function Toolkit() { +function Toolkit({ data }) { + const post = data.markdownRemark; return ( - - - - - Agricultural Toolkit - - - - - -

    Agricultural Toolkit

    -

    More information about the agricultural toolkit.

    -
    -
    -
    -
    -
    + + + ); } export default Toolkit; + +Toolkit.propTypes = { + data: T.object +}; + +export const query = graphql` + query { + markdownRemark( + fields: { collection: { eq: "page" }, slug: { eq: "toolkit" } } + ) { + html + } + } +`; diff --git a/yarn.lock b/yarn.lock index f51f9be..556d064 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2038,6 +2038,13 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/hast@^2.0.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.1.tgz#b16872f2a6144c7025f296fb9636a667ebb79cd9" + integrity sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q== + dependencies: + "@types/unist" "*" + "@types/http-cache-semantics@*": version "4.0.0" resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz#9140779736aa2655635ee756e2467d787cfe8a2a" @@ -2092,7 +2099,7 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== -"@types/mdast@^3.0.0": +"@types/mdast@^3.0.0", "@types/mdast@^3.0.3": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb" integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw== @@ -2144,6 +2151,11 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + "@types/prop-types@*": version "15.7.3" resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" @@ -2203,7 +2215,7 @@ resolved "https://registry.yarnpkg.com/@types/tmp/-/tmp-0.0.33.tgz#1073c4bc824754ae3d10cfab88ab0237ba964e4d" integrity sha1-EHPEvIJHVK49EM+riKsCN7qWTk0= -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== @@ -2716,6 +2728,11 @@ array-includes@^3.1.1, array-includes@^3.1.2: get-intrinsic "^1.1.1" is-string "^1.0.5" +array-iterate@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.4.tgz#add1522e9dd9749bb41152d08b845bd08d6af8b7" + integrity sha512-sNRaPGh9nnmdC8Zf+pT3UqP8rnWj5Hf9wiFGsX3wUQ2yVSIhO2ShFwCoceIPpB41QF6i2OEmrHmCo36xronCVA== + array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" @@ -4012,6 +4029,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + command-exists@^1.2.4: version "1.2.9" resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" @@ -4463,6 +4485,11 @@ css-select@^2.0.0, css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" +css-selector-parser@^1.0.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" + integrity sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g== + css-selector-tokenizer@^0.7.0: version "0.7.3" resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz#735f26186e67c749aaf275783405cf0661fae8f1" @@ -5143,6 +5170,15 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" +dom-serializer@^1.0.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.1.tgz#d845a1565d7c041a95e5dab62184ab41e3a519be" + integrity sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + entities "^2.0.0" + dom-walk@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" @@ -5163,6 +5199,11 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== +domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -5170,6 +5211,20 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-3.3.0.tgz#6db7ea46e4617eb15cf875df68b2b8524ce0037a" + integrity sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA== + dependencies: + domelementtype "^2.0.1" + +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== + dependencies: + domelementtype "^2.2.0" + domutils@^1.5.1, domutils@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" @@ -5178,6 +5233,15 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^2.0.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" + integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + dot-prop@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -5288,6 +5352,11 @@ elliptic@^6.5.3: minimalistic-assert "^1.0.1" minimalistic-crypto-utils "^1.0.1" +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + emoji-regex@^7.0.1: version "7.0.3" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" @@ -6069,7 +6138,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0: +extend@^3.0.0, extend@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== @@ -6256,7 +6325,7 @@ file-type@^12.0.0: resolved "https://registry.yarnpkg.com/file-type/-/file-type-12.4.2.tgz#a344ea5664a1d01447ee7fb1b635f72feb6169d9" integrity sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg== -file-type@^16.0.0: +file-type@^16.0.0, file-type@^16.2.0: version "16.3.0" resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.3.0.tgz#f03af91db30f92cc9a0b335c0644c46101522f6d" integrity sha512-ZA0hV64611vJT42ltw0T9IDwHApQuxRdrmQZWTeDmeAUtZBBVSQW3nSQqhhW1cAgpXgqcJvm410BYHXJQ9AymA== @@ -6659,6 +6728,20 @@ gatsby-core-utils@^1.10.1: tmp "^0.2.1" xdg-basedir "^4.0.0" +gatsby-core-utils@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/gatsby-core-utils/-/gatsby-core-utils-2.3.0.tgz#ea42960a9b384959a96d897d580237f84cadbbd8" + integrity sha512-M7RlR6jL2dtkUu4AoKBoQaPTsbpByzWHc7HBgeYdwzuqbk4VuMe6K76pFDvFSNj0+LvVhWoRGHO7OEtpfb2bEA== + dependencies: + ci-info "2.0.0" + configstore "^5.0.1" + file-type "^16.2.0" + fs-extra "^8.1.0" + node-object-hash "^2.0.0" + proper-lockfile "^4.1.1" + tmp "^0.2.1" + xdg-basedir "^4.0.0" + gatsby-graphiql-explorer@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/gatsby-graphiql-explorer/-/gatsby-graphiql-explorer-0.11.0.tgz#2fe20ddb756180cf3a86defb2f24326ba0c9b062" @@ -6904,6 +6987,33 @@ gatsby-telemetry@^1.10.1: node-fetch "^2.6.1" uuid "3.4.0" +gatsby-transformer-remark@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/gatsby-transformer-remark/-/gatsby-transformer-remark-4.0.0.tgz#3dcfc1786d69206768a84eae28ad49facfa108ec" + integrity sha512-qD8SuvfIvTeQ8QCu8ehY4hMy9P5EAaRZB49k+dm5YXTnF+IskmOStjUVeNnzGz4lfYmLJz7k4u9x+qQflW0gfQ== + dependencies: + "@babel/runtime" "^7.12.5" + gatsby-core-utils "^2.3.0" + gray-matter "^4.0.2" + hast-util-raw "^6.0.2" + hast-util-to-html "^7.1.2" + lodash "^4.17.21" + mdast-util-to-hast "^10.2.0" + mdast-util-to-string "^2.0.0" + mdast-util-toc "^5.1.0" + remark "^13.0.0" + remark-gfm "^1.0.0" + remark-parse "^9.0.0" + remark-retext "^4.0.0" + remark-stringify "^9.0.1" + retext-english "^3.0.4" + sanitize-html "^1.27.5" + underscore.string "^3.3.5" + unified "^9.2.1" + unist-util-remove-position "^3.0.0" + unist-util-select "^3.0.4" + unist-util-visit "^2.0.3" + gatsby-transformer-sharp@^2.12.0: version "2.12.1" resolved "https://registry.yarnpkg.com/gatsby-transformer-sharp/-/gatsby-transformer-sharp-2.12.1.tgz#f55f1e91600c707d9c81386ef308cd2edbb6d16b" @@ -7205,6 +7315,13 @@ github-from-package@0.0.0: resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= +github-slugger@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" + integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + gl-matrix@^3.2.1: version "3.3.0" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.3.0.tgz#232eef60b1c8b30a28cbbe75b2caf6c48fd6358b" @@ -7522,6 +7639,16 @@ graphql@^14.6.0: dependencies: iterall "^1.2.2" +gray-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.2.tgz#9aa379e3acaf421193fce7d2a28cebd4518ac454" + integrity sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw== + dependencies: + js-yaml "^3.11.0" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + grid-index@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" @@ -7675,6 +7802,101 @@ hasha@^5.2.0: is-stream "^2.0.0" type-fest "^0.8.0" +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-is-element@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz#3b3ed5159a2707c6137b48637fbfe068e175a425" + integrity sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ== + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@^6.0.2: + version "6.1.0" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.1.0.tgz#e16a3c2642f65cc7c480c165400a40d604ab75d0" + integrity sha512-5FoZLDHBpka20OlZZ4I/+RBw5piVQ8iI1doEvffQhx5CbCyTtP8UCq8Tw6NmTAMtXgsQxmhW7Ly8OdFre5/YMQ== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-html@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-7.1.2.tgz#db677f0ee483658cea0eecc9dec30aba42b67111" + integrity sha512-pu73bvORzdF6XZgwl9eID/0RjBb/jtRfoGRRSykpR1+o9rCdiAHpgkSukZsQBRlIqMg6ylAcd7F0F7myJUb09Q== + dependencies: + ccount "^1.0.0" + comma-separated-tokens "^1.0.0" + hast-util-is-element "^1.0.0" + hast-util-whitespace "^1.0.0" + html-void-elements "^1.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + stringify-entities "^3.0.1" + unist-util-is "^4.0.0" + xtend "^4.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-whitespace@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" + integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + hex-color-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" @@ -7768,6 +7990,11 @@ html-tags@^3.1.0: resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.1.0.tgz#7b5e6f7e665e9fb41f30007ed9e0d41e97fb2140" integrity sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg== +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + htmlparser2@^3.10.0, htmlparser2@^3.10.1: version "3.10.1" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" @@ -7780,6 +8007,16 @@ htmlparser2@^3.10.0, htmlparser2@^3.10.1: inherits "^2.0.1" readable-stream "^3.1.1" +htmlparser2@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-4.1.0.tgz#9a4ef161f2e4625ebf7dfbe6c0a2f52d18a59e78" + integrity sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q== + dependencies: + domelementtype "^2.0.1" + domhandler "^3.0.0" + domutils "^2.0.0" + entities "^2.0.0" + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -8827,7 +9064,7 @@ js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= -js-yaml@^3.13.1: +js-yaml@^3.11.0, js-yaml@^3.13.1: version "3.14.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== @@ -9468,6 +9705,22 @@ mdast-util-compact@^2.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-find-and-replace@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mdast-util-find-and-replace/-/mdast-util-find-and-replace-1.1.1.tgz#b7db1e873f96f66588c321f1363069abf607d1b5" + integrity sha512-9cKl33Y21lyckGzpSmEQnIDjEfeeWelN5s1kUW1LwdB0Fkuq2u+4GdqcGEygYxJE8GVqCl0741bYXHgamfWAZA== + dependencies: + escape-string-regexp "^4.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + mdast-util-from-markdown@^0.8.0: version "0.8.5" resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c" @@ -9479,7 +9732,63 @@ mdast-util-from-markdown@^0.8.0: parse-entities "^2.0.0" unist-util-stringify-position "^2.0.0" -mdast-util-to-markdown@^0.6.0: +mdast-util-gfm-autolink-literal@^0.1.0: + version "0.1.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-0.1.3.tgz#9c4ff399c5ddd2ece40bd3b13e5447d84e385fb7" + integrity sha512-GjmLjWrXg1wqMIO9+ZsRik/s7PLwTaeCHVB7vRxUwLntZc8mzmTsLVr6HW1yLokcnhfURsn5zmSVdi3/xWWu1A== + dependencies: + ccount "^1.0.0" + mdast-util-find-and-replace "^1.1.0" + micromark "^2.11.3" + +mdast-util-gfm-strikethrough@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-0.2.3.tgz#45eea337b7fff0755a291844fbea79996c322890" + integrity sha512-5OQLXpt6qdbttcDG/UxYY7Yjj3e8P7X16LzvpX8pIQPYJ/C2Z1qFGMmcw+1PZMUM3Z8wt8NRfYTvCni93mgsgA== + dependencies: + mdast-util-to-markdown "^0.6.0" + +mdast-util-gfm-table@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-table/-/mdast-util-gfm-table-0.1.6.tgz#af05aeadc8e5ee004eeddfb324b2ad8c029b6ecf" + integrity sha512-j4yDxQ66AJSBwGkbpFEp9uG/LS1tZV3P33fN1gkyRB2LoRL+RR3f76m0HPHaby6F4Z5xr9Fv1URmATlRRUIpRQ== + dependencies: + markdown-table "^2.0.0" + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm-task-list-item@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-0.1.6.tgz#70c885e6b9f543ddd7e6b41f9703ee55b084af10" + integrity sha512-/d51FFIfPsSmCIRNp7E6pozM9z1GYPIkSy1urQ8s/o4TC22BZ7DqfHFWiqBD23bc7J3vV1Fc9O4QIHBlfuit8A== + dependencies: + mdast-util-to-markdown "~0.6.0" + +mdast-util-gfm@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/mdast-util-gfm/-/mdast-util-gfm-0.1.2.tgz#8ecddafe57d266540f6881f5c57ff19725bd351c" + integrity sha512-NNkhDx/qYcuOWB7xHUGWZYVXvjPFFd6afg6/e2g+SV4r9q5XUcCbV4Wfa3DLYIiD+xAEZc6K4MGaE/m0KDcPwQ== + dependencies: + mdast-util-gfm-autolink-literal "^0.1.0" + mdast-util-gfm-strikethrough "^0.2.0" + mdast-util-gfm-table "^0.1.0" + mdast-util-gfm-task-list-item "^0.1.0" + mdast-util-to-markdown "^0.6.1" + +mdast-util-to-hast@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.2.0.tgz#61875526a017d8857b71abc9333942700b2d3604" + integrity sha512-JoPBfJ3gBnHZ18icCwHR50orC9kNH81tiR1gs01D8Q5YpV6adHNO9nKNuFBCJQ941/32PT1a63UF/DitmS3amQ== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-markdown@^0.6.0, mdast-util-to-markdown@^0.6.1, mdast-util-to-markdown@~0.6.0: version "0.6.5" resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe" integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ== @@ -9491,11 +9800,34 @@ mdast-util-to-markdown@^0.6.0: repeat-string "^1.0.0" zwitch "^1.0.0" +mdast-util-to-nlcst@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-nlcst/-/mdast-util-to-nlcst-4.0.1.tgz#ff8b5339c960b38209273fa8bf4dd7a9498f8636" + integrity sha512-Y4ffygj85MTt70STKnEquw6k73jYWJBaYcb4ITAKgSNokZF7fH8rEHZ1GsRY/JaxqUevMaEnsDmkVv5Z9uVRdg== + dependencies: + nlcst-to-string "^2.0.0" + repeat-string "^1.0.0" + unist-util-position "^3.0.0" + vfile-location "^3.1.0" + mdast-util-to-string@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdast-util-toc@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-5.1.0.tgz#3af0f9c9a764b993538af03f1f79f4e3cec22736" + integrity sha512-csimbRIVkiqc+PpFeKDGQ/Ck2N4f9FYH3zzBMMJzcxoKL8m+cM0n94xXm0I9eaxHnKdY9n145SGTdyJC7i273g== + dependencies: + "@types/mdast" "^3.0.3" + "@types/unist" "^2.0.3" + extend "^3.0.2" + github-slugger "^1.2.1" + mdast-util-to-string "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit "^2.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -9506,6 +9838,11 @@ mdn-data@2.0.4: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + meant@^1.0.1, meant@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/meant/-/meant-1.0.3.tgz#67769af9de1d158773e928ae82c456114903554c" @@ -9600,7 +9937,52 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromark@~2.11.0: +micromark-extension-gfm-autolink-literal@~0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-0.5.7.tgz#53866c1f0c7ef940ae7ca1f72c6faef8fed9f204" + integrity sha512-ePiDGH0/lhcngCe8FtH4ARFoxKTUelMp4L7Gg2pujYD5CSMb9PbblnyL+AAMud/SNMyusbS2XDSiPIRcQoNFAw== + dependencies: + micromark "~2.11.3" + +micromark-extension-gfm-strikethrough@~0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-0.6.5.tgz#96cb83356ff87bf31670eefb7ad7bba73e6514d1" + integrity sha512-PpOKlgokpQRwUesRwWEp+fHjGGkZEejj83k9gU5iXCbDG+XBA92BqnRKYJdfqfkrRcZRgGuPuXb7DaK/DmxOhw== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-table@~0.4.0: + version "0.4.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-table/-/micromark-extension-gfm-table-0.4.3.tgz#4d49f1ce0ca84996c853880b9446698947f1802b" + integrity sha512-hVGvESPq0fk6ALWtomcwmgLvH8ZSVpcPjzi0AjPclB9FsVRgMtGZkUcpE0zgjOCFAznKepF4z3hX8z6e3HODdA== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm-tagfilter@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-0.3.0.tgz#d9f26a65adee984c9ccdd7e182220493562841ad" + integrity sha512-9GU0xBatryXifL//FJH+tAZ6i240xQuFrSL7mYi8f4oZSbc+NvXjkrHemeYP0+L4ZUT+Ptz3b95zhUZnMtoi/Q== + +micromark-extension-gfm-task-list-item@~0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-0.3.3.tgz#d90c755f2533ed55a718129cee11257f136283b8" + integrity sha512-0zvM5iSLKrc/NQl84pZSjGo66aTGd57C1idmlWmE87lkMcXrTxg1uXa/nXomxJytoje9trP0NDLvw4bZ/Z/XCQ== + dependencies: + micromark "~2.11.0" + +micromark-extension-gfm@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/micromark-extension-gfm/-/micromark-extension-gfm-0.3.3.tgz#36d1a4c089ca8bdfd978c9bd2bf1a0cb24e2acfe" + integrity sha512-oVN4zv5/tAIA+l3GbMi7lWeYpJ14oQyJ3uEim20ktYFAcfX1x3LNlFGGlmrZHt7u9YlKExmyJdDGaTt6cMSR/A== + dependencies: + micromark "~2.11.0" + micromark-extension-gfm-autolink-literal "~0.5.0" + micromark-extension-gfm-strikethrough "~0.6.5" + micromark-extension-gfm-table "~0.4.0" + micromark-extension-gfm-tagfilter "~0.3.0" + micromark-extension-gfm-task-list-item "~0.3.0" + +micromark@^2.11.3, micromark@~2.11.0, micromark@~2.11.3: version "2.11.4" resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a" integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA== @@ -9981,6 +10363,11 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +nlcst-to-string@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/nlcst-to-string/-/nlcst-to-string-2.0.4.tgz#9315dfab80882bbfd86ddf1b706f53622dc400cc" + integrity sha512-3x3jwTd6UPG7vi5k4GEzvxJ5rDA7hVUIRNHPblKuMVP9Z3xmlsd9cgLcpAMkc5uPOBna82EeshROFhsPkbnTZg== + no-case@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" @@ -10147,6 +10534,11 @@ normalize-url@^4.1.0: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== +not@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/not/-/not-0.1.0.tgz#c9691c1746c55dcfbe54cbd8bd4ff041bc2b519d" + integrity sha1-yWkcF0bFXc++VMvYvU/wQbwrUZ0= + npm-conf@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" @@ -10186,6 +10578,13 @@ nth-check@^1.0.2: dependencies: boolbase "~1.0.0" +nth-check@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== + dependencies: + boolbase "^1.0.0" + null-loader@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/null-loader/-/null-loader-3.0.0.tgz#3e2b6c663c5bda8c73a54357d8fa0708dc61b245" @@ -10677,6 +11076,16 @@ parse-bmfont-xml@^1.1.4: xml-parse-from-string "^1.0.0" xml2js "^0.4.5" +parse-english@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/parse-english/-/parse-english-4.2.0.tgz#037b68f34d1a1bdf3d33668b87791bdfc1f01e1e" + integrity sha512-jw5N6wZUZViIw3VLG/FUSeL3vDhfw5Q2g4E3nYC69Mm5ANbh9ZWd+eligQbeUoyObZM8neynTn3l14e09pjEWg== + dependencies: + nlcst-to-string "^2.0.0" + parse-latin "^4.0.0" + unist-util-modify-children "^2.0.0" + unist-util-visit-children "^1.0.0" + parse-entities@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" @@ -10731,6 +11140,15 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" +parse-latin@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/parse-latin/-/parse-latin-4.3.0.tgz#1a70fc5601743baa06c5f12253c334fc94b4a917" + integrity sha512-TYKL+K98dcAWoCw/Ac1yrPviU8Trk+/gmjQVaoWEFDZmVD4KRg6c/80xKqNNFQObo2mTONgF8trzAf2UTwKafw== + dependencies: + nlcst-to-string "^2.0.0" + unist-util-modify-children "^2.0.0" + unist-util-visit-children "^1.0.0" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -10746,6 +11164,11 @@ parse-path@^4.0.0: qs "^6.9.4" query-string "^6.13.8" +parse-srcset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-srcset/-/parse-srcset-1.0.2.tgz#f2bd221f6cc970a938d88556abc589caaaa2bde1" + integrity sha1-8r0iH2zJcKk42IVWq8WJyqqiveE= + parse-url@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.2.tgz#856a3be1fcdf78dc93fc8b3791f169072d898b59" @@ -10756,6 +11179,11 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parseqs@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5" @@ -11592,6 +12020,13 @@ proper-lockfile@^4.1.1: retry "^0.12.0" signal-exit "^3.0.2" +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -12232,6 +12667,14 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" +remark-gfm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/remark-gfm/-/remark-gfm-1.0.0.tgz#9213643001be3f277da6256464d56fd28c3b3c0d" + integrity sha512-KfexHJCiqvrdBZVbQ6RopMZGwaXz6wFJEfByIuEwGf0arvITHjiKKZ1dpXujjH9KZdm1//XJQwgfnJ3lmXaDPA== + dependencies: + mdast-util-gfm "^0.1.0" + micromark-extension-gfm "^0.3.0" + remark-mdx@^2.0.0-next.4: version "2.0.0-next.8" resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-2.0.0-next.8.tgz#db1c3cbc606ea0d01526242199bb134d99020363" @@ -12282,6 +12725,13 @@ remark-parse@^9.0.0: dependencies: mdast-util-from-markdown "^0.8.0" +remark-retext@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-retext/-/remark-retext-4.0.0.tgz#255ed98ac3e0a68da5c6ba4f172299b8d062bb28" + integrity sha512-cYCchalpf25bTtfXF24ribYvqytPKq0TiEhqQDBHvVEEsApebwruPWP1cTcvTFBidmpXyqzycm+y8ng7Kmvc8Q== + dependencies: + mdast-util-to-nlcst "^4.0.0" + remark-stringify@^8.1.0: version "8.1.1" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-8.1.1.tgz#e2a9dc7a7bf44e46a155ec78996db896780d8ce5" @@ -12302,7 +12752,7 @@ remark-stringify@^8.1.0: unherit "^1.0.4" xtend "^4.0.1" -remark-stringify@^9.0.0: +remark-stringify@^9.0.0, remark-stringify@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894" integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg== @@ -12487,6 +12937,14 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== +retext-english@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/retext-english/-/retext-english-3.0.4.tgz#f978828d51fbcee842bc3807a45b7f709822ea8d" + integrity sha512-yr1PgaBDde+25aJXrnt3p1jvT8FVLVat2Bx8XeAWX13KXo8OT+3nWGU3HWxM4YFJvmfqvJYJZG2d7xxaO774gw== + dependencies: + parse-english "^4.0.0" + unherit "^1.0.4" + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -12601,6 +13059,16 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sanitize-html@^1.27.5: + version "1.27.5" + resolved "https://registry.yarnpkg.com/sanitize-html/-/sanitize-html-1.27.5.tgz#6c8149462adb23e360e1bb71cc0bae7f08c823c7" + integrity sha512-M4M5iXDAUEcZKLXkmk90zSYWEtk5NH3JmojQxKxV371fnMh+x9t1rqdmXaGoyEHw3z/X/8vnFhKjGL5xFGOJ3A== + dependencies: + htmlparser2 "^4.1.0" + lodash "^4.17.15" + parse-srcset "^1.0.2" + postcss "^7.0.27" + sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -12640,6 +13108,14 @@ schema-utils@^2.6.5, schema-utils@^2.6.6: ajv "^6.12.4" ajv-keywords "^3.5.2" +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + seek-bzip@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.6.tgz#35c4171f55a680916b52a07859ecf3b5857f21c4" @@ -13129,6 +13605,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + spdx-correct@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" @@ -13195,6 +13676,11 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" +sprintf-js@^1.0.3: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -13465,6 +13951,11 @@ strip-ansi@^6.0.0: dependencies: ansi-regex "^5.0.0" +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -14232,6 +14723,14 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= +underscore.string@^3.3.5: + version "3.3.5" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-3.3.5.tgz#fc2ad255b8bd309e239cbc5816fd23a9b7ea4023" + integrity sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg== + dependencies: + sprintf-js "^1.0.3" + util-deprecate "^1.0.2" + unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -14274,7 +14773,7 @@ unified@^8.4.2: trough "^1.0.0" vfile "^4.0.0" -unified@^9.1.0: +unified@^9.1.0, unified@^9.2.1: version "9.2.1" resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3" integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA== @@ -14327,6 +14826,11 @@ unique-string@^2.0.0: dependencies: crypto-random-string "^2.0.0" +unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + unist-util-find-all-after@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-3.0.2.tgz#fdfecd14c5b7aea5e9ef38d5e0d5f774eeb561f6" @@ -14334,6 +14838,11 @@ unist-util-find-all-after@^3.0.2: dependencies: unist-util-is "^4.0.0" +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + unist-util-is@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" @@ -14344,6 +14853,18 @@ unist-util-is@^4.0.0: resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== +unist-util-modify-children@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-2.0.0.tgz#9c9c30d4e32502aabb3fde10d7872a17c86801e2" + integrity sha512-HGrj7JQo9DwZt8XFsX8UD4gGqOsIlCih9opG6Y+N11XqkBGKzHo8cvDi+MfQQgiZ7zXRUiQREYHhjOBHERTMdg== + dependencies: + array-iterate "^1.0.0" + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + unist-util-remove-position@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" @@ -14351,6 +14872,13 @@ unist-util-remove-position@^1.0.0: dependencies: unist-util-visit "^1.1.0" +unist-util-remove-position@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-3.0.0.tgz#4cd19e82c8e665f462b6acfcfd0a8353235a88e9" + integrity sha512-17kIOuolVuK16LMb9KyMJlqdfCtlfQY5FjY3Sdo9iC7F5wqdXhNjMq0PBvMpkVNNnAmHxXssUW+rZ9T2zbP0Rg== + dependencies: + unist-util-visit "^2.0.0" + unist-util-remove@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.0.1.tgz#fa13c424ff8e964f3aa20d1098b9a690c6bfaa39" @@ -14358,6 +14886,17 @@ unist-util-remove@^2.0.0: dependencies: unist-util-is "^4.0.0" +unist-util-select@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/unist-util-select/-/unist-util-select-3.0.4.tgz#702c9dc1db1b2bbbfe27f796fce99e43f25edc60" + integrity sha512-xf1zCu4okgPqGLdhCDpRnjwBNyv3EqjiXRUbz2SdK1+qnLMB7uXXajfzuBvvbHoQ+JLyp4AEbFCGndmc6S72sw== + dependencies: + css-selector-parser "^1.0.0" + not "^0.1.0" + nth-check "^2.0.0" + unist-util-is "^4.0.0" + zwitch "^1.0.0" + unist-util-stringify-position@^2.0.0, unist-util-stringify-position@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" @@ -14365,6 +14904,11 @@ unist-util-stringify-position@^2.0.0, unist-util-stringify-position@^2.0.3: dependencies: "@types/unist" "^2.0.2" +unist-util-visit-children@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-visit-children/-/unist-util-visit-children-1.1.4.tgz#e8a087e58a33a2815f76ea1901c15dec2cb4b432" + integrity sha512-sA/nXwYRCQVRwZU2/tQWUqJ9JSFM1X3x7JIOsIgSzrFHcfVt6NkzDtKzyxg2cZWkCwGF9CO8x4QNZRJRMK8FeQ== + unist-util-visit-parents@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" @@ -14387,7 +14931,7 @@ unist-util-visit@^1.1.0: dependencies: unist-util-visit-parents "^2.0.0" -unist-util-visit@^2.0.0, unist-util-visit@^2.0.2: +unist-util-visit@^2.0.0, unist-util-visit@^2.0.2, unist-util-visit@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== @@ -14631,6 +15175,11 @@ vfile-location@^2.0.0: resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== +vfile-location@^3.1.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + vfile-message@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" @@ -14695,6 +15244,11 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + webpack-dev-middleware@^3.7.2: version "3.7.3" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" From b9aba764be8f6d588176a69fb1c0bbace00ad796 Mon Sep 17 00:00:00 2001 From: Daniel da Silva Date: Fri, 23 Apr 2021 12:40:06 +0100 Subject: [PATCH 18/26] Add markdown image support --- gatsby-config.js | 16 ++++++++- package.json | 1 + yarn.lock | 85 ++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 95 insertions(+), 7 deletions(-) diff --git a/gatsby-config.js b/gatsby-config.js index bc143f1..66548ab 100644 --- a/gatsby-config.js +++ b/gatsby-config.js @@ -58,7 +58,21 @@ module.exports = { ], [] ), - `gatsby-transformer-remark`, + { + resolve: `gatsby-transformer-remark`, + options: { + plugins: [ + { + resolve: `gatsby-remark-images`, + options: { + linkImagesToOriginal: false, + showCaptions: ['title'], + maxWidth: 1280 + } + } + ] + } + }, { resolve: 'gatsby-transformer-yaml-full', options: { diff --git a/package.json b/package.json index 135fa64..b9410c7 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "gatsby-plugin-react-helmet": "^3.10.0", "gatsby-plugin-sharp": "^2.14.3", "gatsby-plugin-styled-components": "^3.10.0", + "gatsby-remark-images": "^5.0.0", "gatsby-source-filesystem": "^2.11.1", "gatsby-transformer-remark": "^4.0.0", "gatsby-transformer-sharp": "^2.12.0", diff --git a/yarn.lock b/yarn.lock index 556d064..37cf41e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3788,6 +3788,29 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +cheerio-select@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.4.0.tgz#3a16f21e37a2ef0f211d6d1aa4eff054bb22cdc9" + integrity sha512-sobR3Yqz27L553Qa7cK6rtJlMDbiKPdNywtR95Sj/YgfpLfy0u6CGJuaBKe5YE/vTc23SCRKxWSdlon/w6I/Ew== + dependencies: + css-select "^4.1.2" + css-what "^5.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils "^2.6.0" + +cheerio@^1.0.0-rc.3: + version "1.0.0-rc.6" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.6.tgz#a5ae81ab483aeefa1280c325543c601145506240" + integrity sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw== + dependencies: + cheerio-select "^1.3.0" + dom-serializer "^1.3.1" + domhandler "^4.1.0" + htmlparser2 "^6.1.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -4485,6 +4508,17 @@ css-select@^2.0.0, css-select@^2.0.2: domutils "^1.7.0" nth-check "^1.0.2" +css-select@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.1.2.tgz#8b52b6714ed3a80d8221ec971c543f3b12653286" + integrity sha512-nu5ye2Hg/4ISq4XqdLY2bEatAcLIdt3OYGFc9Tm9n7VSlFBcfRv0gBNksHRgSdUDQGtN3XrZ94ztW+NfzkFSUw== + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + css-selector-parser@^1.0.0: version "1.4.1" resolved "https://registry.yarnpkg.com/css-selector-parser/-/css-selector-parser-1.4.1.tgz#03f9cb8a81c3e5ab2c51684557d5aaf6d2569759" @@ -4528,6 +4562,11 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css-what@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.0.0.tgz#f0bf4f8bac07582722346ab243f6a35b512cfc47" + integrity sha512-qxyKHQvgKwzwDWC/rGbT821eJalfupxYW2qbSJSAtdSTimsr/MlaGONoNLllaUPZWf8QnbcKM/kPVYUQuEKAFA== + csscolorparser@~1.0.2, csscolorparser@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" @@ -5170,7 +5209,7 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" -dom-serializer@^1.0.1: +dom-serializer@^1.0.1, dom-serializer@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.1.tgz#d845a1565d7c041a95e5dab62184ab41e3a519be" integrity sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q== @@ -5218,7 +5257,7 @@ domhandler@^3.0.0: dependencies: domelementtype "^2.0.1" -domhandler@^4.0.0, domhandler@^4.2.0: +domhandler@^4.0.0, domhandler@^4.1.0, domhandler@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" integrity sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA== @@ -5233,7 +5272,7 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" -domutils@^2.0.0: +domutils@^2.0.0, domutils@^2.5.2, domutils@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" integrity sha512-y0BezHuy4MDYxh6OvolXYsH+1EMGmFbwv5FKW7ovwMG6zTPWqNPq3WF9ayZssFq+UlKdffGLbOEaghNdaOm1WA== @@ -6948,6 +6987,23 @@ gatsby-recipes@^0.9.2: xstate "^4.9.1" yoga-layout-prebuilt "^1.9.6" +gatsby-remark-images@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/gatsby-remark-images/-/gatsby-remark-images-5.0.0.tgz#310f3bdfb37028dc83078da13dfee511440746d8" + integrity sha512-LdNGmcouSdVtmbffcRgL7eZgSl4ZcIcK36d+szjhrnjvKwqsX3G3epkKyqqcbptos8V5MhnNU0hng454+0QWfQ== + dependencies: + "@babel/runtime" "^7.12.5" + chalk "^4.1.0" + cheerio "^1.0.0-rc.3" + gatsby-core-utils "^2.3.0" + is-relative-url "^3.0.0" + lodash "^4.17.21" + mdast-util-definitions "^4.0.0" + potrace "^2.1.8" + query-string "^6.13.3" + unist-util-select "^3.0.4" + unist-util-visit-parents "^3.1.1" + gatsby-source-filesystem@^2.11.1: version "2.11.1" resolved "https://registry.yarnpkg.com/gatsby-source-filesystem/-/gatsby-source-filesystem-2.11.1.tgz#c90f49c096c4bdafd8e68462966b3a6e21fd746b" @@ -8017,6 +8073,16 @@ htmlparser2@^4.1.0: domutils "^2.0.0" entities "^2.0.0" +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" @@ -11179,7 +11245,14 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@^6.0.0: +parse5-htmlparser2-tree-adapter@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@^6.0.0, parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -12159,7 +12232,7 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^6.13.1, query-string@^6.13.8: +query-string@^6.13.1, query-string@^6.13.3, query-string@^6.13.8: version "6.14.1" resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a" integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw== @@ -14916,7 +14989,7 @@ unist-util-visit-parents@^2.0.0: dependencies: unist-util-is "^3.0.0" -unist-util-visit-parents@^3.0.0: +unist-util-visit-parents@^3.0.0, unist-util-visit-parents@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== From 726cb3e29a310f4354aabe898b453ec70c5f7ec7 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Fri, 23 Apr 2021 15:07:42 +0100 Subject: [PATCH 19/26] Include About page content --- content/page/posts/about.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/content/page/posts/about.md b/content/page/posts/about.md index 042a4f0..16b54e8 100644 --- a/content/page/posts/about.md +++ b/content/page/posts/about.md @@ -3,5 +3,17 @@ title: About --- ## The tool -Pandas are really sweet. -Here's a video of a panda eating sweets. \ No newline at end of file +Access to electricity remains a global development challenge with about 759 million people lacking access to electricity in 2019. Inadequate electricity services also pose a major impediment to reducing extreme poverty and boosting shared prosperity in Sub-Saharan Africa (SSA), where 570 million people and tens of millions of small and medium enterprises had no access to electricity. + +For this large share of the world population, welfare, health, and economic development are negatively impacted: children are unable to study at night; businesses, markets and health clinics have constrained operating hours and struggle to offer basic services; and productivity and competitiveness of African firms is impeded, to name just a few. Addressing the energy access challenge has become a global priority. + +In light of the close linkage between energy access and poverty alleviation, Sustainable Development Goal 7 was established to ensure universal access to affordable, reliable and modern energy services by 2030. This is particularly ambitious for Africa, which accounts for three-quarters of the global population without access. However, geospatial electrification planning has emerged as a critical tool to help countries think about how best to provide electricity access to those without it. + +Aligned with SDG 7 and with funding from the Energy Sector Management Assistance Program, the World Bank established the Geospatial Electrification Planning in the Africa Region program to support external client governments and internal task teams in the area of electrification planning for improved policy and decision-making. + +### Geospatial Electrification Planning in the Africa Region (GEPAR) is an ESMAP-funded program that aims to: + +- Support countries in the execution of geospatial analysis to inform policy, the development of national electrification strategies and plans as well as to provide analytical underpinnings for specific operations (project identification and scoping) +- Improve upon existing geospatial planning approaches by ensuring that demand generated by the agricultural sector is incorporated into the analysis +- Help countries think about evolving priorities, including electrification of health facilities in response to COVID-19, and climate resilience and adaptation +- Build capacity of clients - in the area of electrification planning, rapid infrastructure mapping, and more From 15c350178c710bad01b4527a8c2dc0ba9db9b198 Mon Sep 17 00:00:00 2001 From: Ricardo Mestre Date: Fri, 23 Apr 2021 15:17:37 +0100 Subject: [PATCH 20/26] Include Support page content --- content/page/posts/support.md | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/content/page/posts/support.md b/content/page/posts/support.md index 5503108..9078b25 100644 --- a/content/page/posts/support.md +++ b/content/page/posts/support.md @@ -1,6 +1,18 @@ --- title: Support --- -## Supporting countries +## What is geospatial electrification planning? -More information about the type of support GEPAR provides to partner countries. +Geospatial electrification planning has become the best-practice approach to determining how best to electrify people, using which technologies, and at what cost. This planning approach establishes high-resolution geospatial data systems to provide: + +- Long-term electricity demand forecasts +- Cost estimates of electricity supply options such as grid, mini-grid, and stand-alone systems to reach the potential consumers +- Algorithmic, least-cost optimization of grid and off-grid systems, including a roll-out plan with phased investments *over time* to achieve universal electricity access or a given electrification target + +## How geospatial electrification planning is used by the Africa Region of the EEXGP? + +- To help inform operations (eg. Estimate potential and scope for access interventions or help with project design) +- To help countries think about critical elements of and inform National Electrification Strategies +- To promote transparency and rationality in Government planning and decision-making + +For guidance or advice, please [contact our team](mailto:AFR_Energy_Geospatial_Team@worldbank.org). From faae81fbdd8bda163c78f56c22a6714fc559bbf0 Mon Sep 17 00:00:00 2001 From: Daniel da Silva Date: Fri, 23 Apr 2021 14:23:33 +0100 Subject: [PATCH 21/26] Add markdown support for study content --- content/study/posts/congo.md | 7 +++++++ content/study/posts/kenya.md | 14 ++++++++++++++ content/study/posts/kenya.yml | 3 +-- gatsby-node.js | 3 +-- schema/validate.js | 3 +-- src/styles/content-block.js | 3 +++ src/templates/study-single/index.js | 7 +++++-- src/templates/study-single/summary.js | 14 +++++++------- 8 files changed, 39 insertions(+), 15 deletions(-) create mode 100644 content/study/posts/congo.md create mode 100644 content/study/posts/kenya.md diff --git a/content/study/posts/congo.md b/content/study/posts/congo.md new file mode 100644 index 0000000..f7d5c86 --- /dev/null +++ b/content/study/posts/congo.md @@ -0,0 +1,7 @@ +## Scope + +To be determined... + +## Description + +To be determined... \ No newline at end of file diff --git a/content/study/posts/kenya.md b/content/study/posts/kenya.md new file mode 100644 index 0000000..835d9bf --- /dev/null +++ b/content/study/posts/kenya.md @@ -0,0 +1,14 @@ +## Scope + +National Least-cost geospatial plan identifying least-cost supply solutions and investment requirements to achieve universal electricity access by 2022 and maintain through 2027. + +## Description + +The geospatial electrification planning platform populated with the latest available census data, satellite imagery, consumption estimates as well as capital and operating cost data was used to evaluate expansion options. + +The data used for this report was collected/provided in 2016 and projected over succeeding years to evaluate connection expansion by technology including: +- expansion of medium voltage service (grid expansion); +- connection of consumers in close proximity to existing KPLC service (grid densification/intensification); +- expansion of mini-grid service; and off-grid stand-alone solar home system service. + +For the target year 2022, the geospatial planning projects indicate that the following connection thresholds can be met. \ No newline at end of file diff --git a/content/study/posts/kenya.yml b/content/study/posts/kenya.yml index e070a4c..7d36ba6 100644 --- a/content/study/posts/kenya.yml +++ b/content/study/posts/kenya.yml @@ -6,8 +6,7 @@ country: Kenya study: consultant: NRECA period: 2017-2018 - scope: National Least-cost geospatial plan identifying least-cost supply solutions and investment requirements to achieve universal electricity access by 2022 and maintain through 2027. - summary: The geospatial electrification planning platform populated with the latest available census data, satellite imagery, consumption estimates as well as capital and operating cost data was used to evaluate expansion options. The data used for this report was collected/provided in 2016 and projected over succeeding years to evaluate connection expansion by technology including expansion of medium voltage service (grid expansion); connection of consumers in close proximity to existing KPLC service (grid densification/intensification); expansion of mini-grid service; and off-grid stand-alone solar home system service. For the target year 2022, the geospatial planning projects indicate that the following connection thresholds can be met. + content: ./kenya.md charts: - name: Modelled Electricity demand (GWh/year) type: donut diff --git a/gatsby-node.js b/gatsby-node.js index 8b1c908..8679ca8 100644 --- a/gatsby-node.js +++ b/gatsby-node.js @@ -55,8 +55,7 @@ exports.createSchemaCustomization = ({ actions, schema }) => { type StudyInfo { consultant: String period: String - scope: String - summary: String + content: File @fileByRelativePath } `, schema.buildObjectType({ diff --git a/schema/validate.js b/schema/validate.js index 5d1d2d7..d1e195c 100644 --- a/schema/validate.js +++ b/schema/validate.js @@ -27,8 +27,7 @@ const studySchema = new Schema({ study: { consultant: { type: String, required: true }, period: { required: true }, - scope: { type: String, required: true }, - summary: { type: String, required: true } + content: { type: String, use: { studyFileExists }, required: true } }, platform: { title: { type: String }, diff --git a/src/styles/content-block.js b/src/styles/content-block.js index 987e364..400ec6f 100644 --- a/src/styles/content-block.js +++ b/src/styles/content-block.js @@ -49,6 +49,8 @@ export const ContentBlock = styled(UniversalGridder).attrs({ })` padding: ${glsp(themeVal('layout.gap.xsmall'), 0)}; grid-row-gap: ${glsp(themeVal('layout.gap.xsmall'))}; + grid-template-rows: min-content; + grid-auto-rows: 1fr; ${media.smallUp` padding: ${glsp(themeVal('layout.gap.small'), 0)}; @@ -78,6 +80,7 @@ export const Aside = styled.aside` ${media.largeUp` grid-column: content-9 / span 4; + grid-row: 1 / span 2; `} ${media.xlargeUp` diff --git a/src/templates/study-single/index.js b/src/templates/study-single/index.js index d07d1cd..b477cbf 100644 --- a/src/templates/study-single/index.js +++ b/src/templates/study-single/index.js @@ -261,8 +261,11 @@ export const pageQuery = graphql` study { consultant period - scope - summary + content { + childMarkdownRemark { + html + } + } } platform { title diff --git a/src/templates/study-single/summary.js b/src/templates/study-single/summary.js index 15a5b53..1006c8d 100644 --- a/src/templates/study-single/summary.js +++ b/src/templates/study-single/summary.js @@ -88,7 +88,7 @@ function StudySingleSummary(props) { study: { title, country, - study: { consultant, period, scope, summary }, + study: { consultant, period, content }, platform, layers, charts @@ -142,11 +142,12 @@ function StudySingleSummary(props) { )} -

    Scope

    -

    {scope}

    -

    Description

    -

    {summary}

    + {content && ( + + )}