From bd88c18fd0fe99441c25b2a9c345cf03e94a379f Mon Sep 17 00:00:00 2001 From: Oscar Date: Mon, 9 Mar 2020 23:47:06 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=84=20Add=20Detail=20Pages=20for=20Def?= =?UTF-8?q?initions=20(#75)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix: untrack definitions in dist * feat(detail pages): update item link * feat(detail pages): add layout * feat(detail pages): render whole definition content * feat(detail pages): remove definitons from homepage * 🧹 def list component * feat(layout): render site footer in all pages * feat(detail pages): rename definition root class && move css into partials * chore: abstract further css into own files * feat(detail pages): update headling level of definition content * feat(styles): set box sizing * feat(styles): add margin bottom utility * feat(styles): selection * feat(components): sub page header own component * feat(detail pages): add sections * feat(style): mian headline * feat(page layout): rename page content grid * feat(page layout): add wide content class * feat(detail pages): set document title * feat(detail pages): set uniform document title for docs and definitions * feat(page title): add comment * feat(detail pages): add meta description * feat(detail pages): wrap def header in article tag * chore: set up ava * feat(filters): move permalink function into file, add test * chore: rename _temp to _util, remove creation script * feat(detail pages): helper function to find additional definitions * chore: move helpers to single directory * feat(detail pages): create shortcode for further definition navigation * feat(detail pages): fix find defs function * feat(detail pages): shortcode for browse nav markup * chore: fix collection mock data * feat(detail pages): render browse nav * feat(detail pages): style browse nav, style improvements * feat(detail pages): test redirect * feat(detail pages): client side redirect * feat(homepage): set title * 💅 * feat(detail pages): incorporate design changes * feat(detail pages): hide browse headlines * feat(detail pages): label lists * feat(footer): add aria label * feat(detail pages): redice heading level in md * feat(detail pages): spacing in browse nav * feat(detail pages): reduce line height * feat(detail pages): set max width w/o breaking homepage * feat(detail pages): replace in-definition definition links * 🧹 * feat(detail pages): recover spacing utility * 🧹 * chore(packages): update ava * config: specify nvm version * 💅 * 💅 --- .eleventy.js | 12 +- .nvmrc | 1 + .../components/definition-content.njk | 32 ++ 11ty/_includes/components/definition.njk | 29 - 11ty/_includes/components/defintions-list.njk | 5 - 11ty/_includes/components/sub-page-header.njk | 4 + 11ty/_includes/layouts/base.njk | 22 +- 11ty/_includes/layouts/definition.njk | 19 + .../layouts/{page.njk => documentation.njk} | 10 +- 11ty/_includes/layouts/index.njk | 34 +- 11ty/definitions/ableism.md | 4 +- 11ty/definitions/barbaric.md | 21 +- 11ty/definitions/biromantic.md | 6 +- 11ty/definitions/bisexual.md | 6 +- 11ty/definitions/cisgender.md | 2 +- 11ty/definitions/crazy.md | 6 +- 11ty/definitions/definitions.json | 3 + .../definitions/english-as-second-language.md | 4 +- 11ty/definitions/fatphobia.md | 4 +- 11ty/definitions/gaslighting.md | 2 +- 11ty/definitions/hysterical.md | 18 +- 11ty/definitions/minorities.md | 4 +- 11ty/definitions/minoritised.md | 4 +- 11ty/definitions/non-binary.md | 4 +- .../obsessive-compulsive-disorder.md | 6 +- 11ty/definitions/ok-hand.md | 6 +- 11ty/definitions/performative-allyship.md | 2 +- 11ty/definitions/polyamory.md | 2 +- 11ty/definitions/spaz.md | 6 +- 11ty/definitions/transgender.md | 2 +- 11ty/definitions/white-fragility.md | 2 +- .../definitions/women-and-people-of-colour.md | 6 +- 11ty/documentation/documentation.json | 2 +- 11ty/documentation/examples/examples.json | 2 +- 11ty/documentation/examples/flagged-word.md | 8 +- .../__tests__/definitionPermalink.spec.js | 7 + .../findDefinitionContentNextItems.spec.js | 122 +++++ 11ty/helpers/definitionPermalink.js | 3 + .../helpers/findDefinitionContentNextItems.js | 31 ++ ...renderDefinitionContentNextEntries.spec.js | 67 +++ .../renderDefinitionContentNextEntries.js | 42 ++ _util/_mocks/testCollection.json | 44 ++ .../create-empty-definitions-min.js | 0 {_temp => _util}/create-empty-definitions.js | 0 {_temp => _util}/undefined-words.json | 0 assets/css/base.scss | 37 +- assets/css/base/_a.scss | 16 + assets/css/base/_base.scss | 37 +- assets/css/base/_helpers.scss | 18 +- assets/css/base/_selection.scss | 4 + assets/css/base/_typography.scss | 66 +++ assets/css/base/_universal-selector.scss | 11 + assets/css/components/_flag.scss | 2 +- assets/css/components/_lists.scss | 39 +- assets/css/layouts/_pages.scss | 38 ++ .../css/structures/_definition-content.scss | 129 +++++ .../structures/_definition-navigation.scss | 33 ++ assets/css/structures/_grid.scss | 5 - assets/css/utilities/_spacing.scss | 7 - bin/create-definitions | 5 - dist/definitions/bierasure/index.html | 0 dist/definitions/colonialism/index.html | 0 dist/definitions/intersectionality/index.html | 0 dist/definitions/psychopath/index.html | 0 netlify.toml | 7 + package-lock.json | 516 +++++++++++------- package.json | 2 +- 67 files changed, 1155 insertions(+), 433 deletions(-) create mode 100644 .nvmrc create mode 100644 11ty/_includes/components/definition-content.njk delete mode 100644 11ty/_includes/components/definition.njk delete mode 100644 11ty/_includes/components/defintions-list.njk create mode 100644 11ty/_includes/components/sub-page-header.njk create mode 100644 11ty/_includes/layouts/definition.njk rename 11ty/_includes/layouts/{page.njk => documentation.njk} (61%) create mode 100644 11ty/definitions/definitions.json create mode 100644 11ty/helpers/__tests__/definitionPermalink.spec.js create mode 100644 11ty/helpers/__tests__/findDefinitionContentNextItems.spec.js create mode 100644 11ty/helpers/definitionPermalink.js create mode 100644 11ty/helpers/findDefinitionContentNextItems.js create mode 100644 11ty/shortcodes/__tests__/renderDefinitionContentNextEntries.spec.js create mode 100644 11ty/shortcodes/renderDefinitionContentNextEntries.js create mode 100644 _util/_mocks/testCollection.json rename {_temp => _util}/create-empty-definitions-min.js (100%) rename {_temp => _util}/create-empty-definitions.js (100%) rename {_temp => _util}/undefined-words.json (100%) create mode 100644 assets/css/base/_a.scss create mode 100644 assets/css/base/_selection.scss create mode 100644 assets/css/base/_universal-selector.scss create mode 100644 assets/css/layouts/_pages.scss create mode 100644 assets/css/structures/_definition-content.scss create mode 100644 assets/css/structures/_definition-navigation.scss delete mode 100644 assets/css/utilities/_spacing.scss delete mode 100755 bin/create-definitions delete mode 100644 dist/definitions/bierasure/index.html delete mode 100644 dist/definitions/colonialism/index.html delete mode 100644 dist/definitions/intersectionality/index.html delete mode 100644 dist/definitions/psychopath/index.html diff --git a/.eleventy.js b/.eleventy.js index 3667dcf9..3eabd905 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -1,5 +1,6 @@ +const definitionPermalink = require('./11ty/helpers/definitionPermalink'); +const renderDefinitionContentNextEntries = require('./11ty/shortcodes/renderDefinitionContentNextEntries'); const findExistingDefinition = require('./11ty/filters/helpers/findExistingDefinition'); -const definitionPermalink = require('./11ty/filters/definitionPermalink'); module.exports = function(config) { // Add a filter using the Config API @@ -68,12 +69,17 @@ module.exports = function(config) { const sep = flag.text && info.text ? '—' : ''; const text = flag.text ? [info.text, flag.text].join(sep) : info.text; - return `

${text}

`; + return `

${text}

`; } - return '

'; + return '

'; }); + config.addShortcode( + 'renderDefinitionContentNextEntries', + renderDefinitionContentNextEntries + ); + // NOTE (ovlb): this will not be remembered as the best code i’ve written. if anyone seeing this has a better solution then the following to achieve sub groups of the definitions: i am happy to get rid of it config.addCollection('tableOfContent', (collection) => { const allItems = collection diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000..48082f72 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +12 diff --git a/11ty/_includes/components/definition-content.njk b/11ty/_includes/components/definition-content.njk new file mode 100644 index 00000000..76fe73bb --- /dev/null +++ b/11ty/_includes/components/definition-content.njk @@ -0,0 +1,32 @@ +
+
+

Speech

+

{{ speech }}

+
+
+ {{ content | safe }} + {#

{{ alt_words }}

#} +
+ {%- if alt_words -%} +
+

Alt Words

+
    + {% for word in alt_words %} +
  • {{ word | linkIfExistsInCollection(collections.definedWords) | safe }}
  • + {% endfor %} +
+
+ {% endif %} + {%- if reading -%} +
+

Further Reading

+ +
+ {% endif %} +
diff --git a/11ty/_includes/components/definition.njk b/11ty/_includes/components/definition.njk deleted file mode 100644 index e62bb7fb..00000000 --- a/11ty/_includes/components/definition.njk +++ /dev/null @@ -1,29 +0,0 @@ -
- {% definitionFlag definition.data.flag %} -

- {{ definition.data.title}} - {{ definition.data.speech}} -

-
- {{ definition.templateContent | safe }} - {#

{{ definition.data.alt_words }}

#} - {%- if definition.data.alt_words -%} -

Alt Words

-
    - {% for word in definition.data.alt_words %} -
  • {{ word | linkIfExistsInCollection(collections.definedWords) | safe }}
  • - {% endfor %} -
- {% endif %} - {%- if definition.data.reading -%} -

Further Reading

-
    - {% for link in definition.data.reading %} -
  • - {{ link.text }} -
  • - {% endfor %} -
- {% endif %} -
-
diff --git a/11ty/_includes/components/defintions-list.njk b/11ty/_includes/components/defintions-list.njk deleted file mode 100644 index 1cbb4885..00000000 --- a/11ty/_includes/components/defintions-list.njk +++ /dev/null @@ -1,5 +0,0 @@ -
- {% for definition in collections.definedWords %} - {% include 'components/definition.njk' %} - {% endfor %} -
diff --git a/11ty/_includes/components/sub-page-header.njk b/11ty/_includes/components/sub-page-header.njk new file mode 100644 index 00000000..811224aa --- /dev/null +++ b/11ty/_includes/components/sub-page-header.njk @@ -0,0 +1,4 @@ +
+ Self-Defined +

A modern dictionary about us.
We define our words, but they don't define us.

+
diff --git a/11ty/_includes/layouts/base.njk b/11ty/_includes/layouts/base.njk index a90dab14..254d7691 100644 --- a/11ty/_includes/layouts/base.njk +++ b/11ty/_includes/layouts/base.njk @@ -4,12 +4,28 @@ - {{ renderData.title or title or metadata.title }} - + {# Use title with path, or append a space to the page title to avoid collpasing with the meta title #} + {% set pageTitle = titleWithPath or title + ' ' or '' %} + {{ pageTitle + metadata.title }} + {% block content %}{% endblock content %} + + {% block pageScript %} + {% endblock pageScript %} - \ No newline at end of file + diff --git a/11ty/_includes/layouts/definition.njk b/11ty/_includes/layouts/definition.njk new file mode 100644 index 00000000..5a7a5b97 --- /dev/null +++ b/11ty/_includes/layouts/definition.njk @@ -0,0 +1,19 @@ +{% extends 'layouts/base.njk' %} +{% set pageType = 'Definition' %} +{% set titleWithPath = title + ' « Definitions « ' %} +{% set description = 'The definition of ' + title + ' in Self-Defined, a modern dictionary about us.'%} + +{% block content %} +
+ {% include 'components/sub-page-header.njk' %} +
+
+
+ {% definitionFlag flag %} +

{{ title }}

+
+ {% include 'components/definition-content.njk' %} + {% renderDefinitionContentNextEntries title, slug, collections.definedWords %} +
+
+{% endblock %} diff --git a/11ty/_includes/layouts/page.njk b/11ty/_includes/layouts/documentation.njk similarity index 61% rename from 11ty/_includes/layouts/page.njk rename to 11ty/_includes/layouts/documentation.njk index 44734a79..bffc7aa1 100644 --- a/11ty/_includes/layouts/page.njk +++ b/11ty/_includes/layouts/documentation.njk @@ -1,12 +1,10 @@ {% extends 'layouts/base.njk' %} {% set pageType = 'Page' %} +{% set titleWithPath = title + ' « Documentation « ' %} {% block content %} -
-
- Self-Defined -

A modern dictionary about us.
We define our words, but they don't define us.

-
+
+ {% include 'components/sub-page-header.njk' %}
{%- if parent -%}
@@ -16,4 +14,4 @@

{{ title }}

{{ content | safe }}
-{% endblock %} + {% endblock %} diff --git a/11ty/_includes/layouts/index.njk b/11ty/_includes/layouts/index.njk index 99559b3e..c6ae1bb6 100644 --- a/11ty/_includes/layouts/index.njk +++ b/11ty/_includes/layouts/index.njk @@ -1,19 +1,31 @@ {% extends 'layouts/base.njk' %} +{% set titleWithPath = 'Home « ' %} {% block content %}
{{ content | safe }} {% include 'components/table-of-content.njk' %} -
-

Words

- {% include 'components/defintions-list.njk' %} -
+
- + +{% endblock %} + + +{% block pageScript%} + {% endblock %} diff --git a/11ty/definitions/ableism.md b/11ty/definitions/ableism.md index fe5a0229..597656ab 100644 --- a/11ty/definitions/ableism.md +++ b/11ty/definitions/ableism.md @@ -9,11 +9,11 @@ a system that places value on people’s bodies and minds based on societally co — Talia "TL" Lewis -#### Impact +## Impact To paraphrase Lewis, ableism "leads to people and society determining who is valuable and worthy based on a person’s appearance and/or their ability to [...] produce, excel, and 'behave.'" You do not have to be disabled to experience ableism, and Disabled people can also reinforce ableism internally (manifesting as harm to themselves) and externally (harm to other disabled people). -#### Further reading +## Further reading - [Longmore Lecture: Context, Clarity & Grounding](https://www.talilalewis.com/blog/longmore-lecture-context-clarity-grounding) - [Ableism 2020: An Updated Definition](https://www.talilalewis.com/blog/ableism-2020-an-updated-definition) diff --git a/11ty/definitions/barbaric.md b/11ty/definitions/barbaric.md index 3d33f665..66ec255a 100644 --- a/11ty/definitions/barbaric.md +++ b/11ty/definitions/barbaric.md @@ -7,9 +7,9 @@ flag: defined: true speech: adjective reading: - - text: "is the word barbarian a slur?" + - text: 'is the word barbarian a slur?' href: https://seetobehumanityearth.wordpress.com/2015/07/16/is-the-term-barbarian-a-slur/ - - text: "Barbarian wiki" + - text: 'Barbarian wiki' href: https://en.wikipedia.org/wiki/Barbarian alt_words: - cruel @@ -17,20 +17,21 @@ alt_words: - obscene - feral --- + something which is obscenely cruel; primitive; unsophisticated -#### Issues +## Issues -Barbarian originates from the Greek word *bárbaros* meaning "babbler", to denote the "unintelligible sounds" (_"bar bar bar"_) made by foreign speakers. -Similar words exist in many other languages, for the identical purpose labeling a "strange"/"foreign" person/culture. +Barbarian originates from the Greek word _bárbaros_ meaning "babbler", to denote the "unintelligible sounds" (_"bar bar bar"_) made by foreign speakers. +Similar words exist in many other languages, for the identical purpose labeling a "strange"/"foreign" person/culture. In modern day usage, you can notice this rhetoric being employed almost always for the purpose of demonizing "foreign" (more often than not from the global south) cultures - cultures that need to be civilized; -cultures that need to be colonized to rescue them from themselves. A perfect lingual weapon for warmongers and racists alike. Equally repulsive sibling of "savage". +cultures that need to be colonized to rescue them from themselves. A perfect lingual weapon for warmongers and racists alike. Equally repulsive sibling of "savage". -#### Impact +## Impact -When you use words, that are in vogue primarily inside circles of bigots, with racist etymologies, it's a wilful act of violence, ignorance and an indication to the vilified and minoritised communities that their history of wounds and abuses are inconsequential to our words. +When you use words, that are in vogue primarily inside circles of bigots, with racist etymologies, it's a wilful act of violence, ignorance and an indication to the vilified and minoritised communities that their history of wounds and abuses are inconsequential to our words. -#### Usage Tip +## Usage Tip -Avoid words that have obscene etymologies. There is almost always a better alternative: an inclusive and a less hurtful one. \ No newline at end of file +Avoid words that have obscene etymologies. There is almost always a better alternative: an inclusive and a less hurtful one. diff --git a/11ty/definitions/biromantic.md b/11ty/definitions/biromantic.md index c5a46249..39b5cc60 100644 --- a/11ty/definitions/biromantic.md +++ b/11ty/definitions/biromantic.md @@ -14,8 +14,8 @@ reading: of, relating to, or characterised by being romantically attracted to more than one gender. -#### Note +## Note -Biromantic does not imply any particular kind of sexual attraction, or sexual attraction at all. A biromantic person may be asexual, homosexual, heterosexual, [bisexual](#bisexual), [pansexual](#pan-sexual), etc. +Biromantic does not imply any particular kind of sexual attraction, or sexual attraction at all. A biromantic person may be asexual, homosexual, heterosexual, [bisexual](/definitions/bisexual), [pansexual](/definitions/pan-sexual), etc. -Biromantic does not preclude romantic attraction to [non-binary](#non-binary) or [transgender](#transgender) people. +Biromantic does not preclude romantic attraction to [non-binary](/definitions/non-binary) or [transgender](/definitions/transgender) people. diff --git a/11ty/definitions/bisexual.md b/11ty/definitions/bisexual.md index 93942890..d1886e04 100644 --- a/11ty/definitions/bisexual.md +++ b/11ty/definitions/bisexual.md @@ -7,10 +7,10 @@ defined: true of, relating to, or characterised by being sexually attracted to more than one gender. -#### Note +## Note -Bisexuality does not preclude attraction to [non-binary](#non-binary) or [transgender](#transgender) people. +Bisexuality does not preclude attraction to [non-binary](/definitions/non-binary) or [transgender](/definitions/transgender) people. -#### Further Reading +## Further Reading [Am I Bisexual?](http://www.bisexualindex.org.uk/index.php/AmIBisexual) diff --git a/11ty/definitions/cisgender.md b/11ty/definitions/cisgender.md index 432b9918..c3a2fcc1 100644 --- a/11ty/definitions/cisgender.md +++ b/11ty/definitions/cisgender.md @@ -7,4 +7,4 @@ defined: true of, relating to, or characterised by being a gender that matches the gender they were assigned at birth. -The opposite of [transgender](/#transgender). +The opposite of [transgender](/definitions/transgender). diff --git a/11ty/definitions/crazy.md b/11ty/definitions/crazy.md index 5c77cac9..a6866a83 100644 --- a/11ty/definitions/crazy.md +++ b/11ty/definitions/crazy.md @@ -27,14 +27,14 @@ alt_words: mentally deranged; demented; insane. -#### Issues +## Issues Crazy is very commonly used as an adjective to embody a vast array of ideas, often not specifically. It is used so frequently that it sometimes is a filler. Crazy can also be used in a derogatory manner for someone with mental or psychiatric disabilities. -#### Impact +## Impact By using ableist language, we are perpetuating violence against people who experience mental or psychological disabilities. Using this language perpetuates those systems and language of harm, regardless of our intent. -#### Usage Tip +## Usage Tip Be more specific. Typically we can find an alternate definition by simply reflecting on what emotion we're really feeling. diff --git a/11ty/definitions/definitions.json b/11ty/definitions/definitions.json new file mode 100644 index 00000000..c2abf537 --- /dev/null +++ b/11ty/definitions/definitions.json @@ -0,0 +1,3 @@ +{ + "layout": "layouts/definition.njk" +} diff --git a/11ty/definitions/english-as-second-language.md b/11ty/definitions/english-as-second-language.md index bc7b3a5c..8bf89f33 100644 --- a/11ty/definitions/english-as-second-language.md +++ b/11ty/definitions/english-as-second-language.md @@ -16,10 +16,10 @@ reading: the teaching of English to people who speak a different language and who live in a country where English is the main language spoken -#### Issues +## Issues Monolinguist, English-only speakers often refer to people who don't speak English natively as "ESL" or say they are learning a "second language". More often than not, this is not true, as many people are multi-lingual with 3 or more languages -#### Impact +## Impact It makes false assumptions about English learners, centres English as the "default" or "expected" first language, ignoring that many people learn multiple (>3), non-English languages first. diff --git a/11ty/definitions/fatphobia.md b/11ty/definitions/fatphobia.md index 8c09c32e..b54e26be 100644 --- a/11ty/definitions/fatphobia.md +++ b/11ty/definitions/fatphobia.md @@ -13,11 +13,11 @@ reading: the fear, hatred, and stigmitasation of fat people. -#### Issues +## Issues Fatphobia is the racialised, classist, and ableist tool of oppression that codifies a “ideal” body type that centres a white, Western aesthetic, demands time and resources that people may not have, and attempts to correlate thinness and heathliness—perpetuating white supremacist violence against people of colour, perpetuates classist oppression of people living with limited resources, and the ableist idea of healthiness as an indicator of human value. -#### Impact +## Impact A history of being ignored and shamed prevents many fat people from visiting medical professionals even if they have the financial and physical means to do so. Medical professionals hold fatphobic biases and often prescribe weight loss as a default instead of listening to their fat patients' concerns. diff --git a/11ty/definitions/gaslighting.md b/11ty/definitions/gaslighting.md index 8b88a0de..0150500e 100644 --- a/11ty/definitions/gaslighting.md +++ b/11ty/definitions/gaslighting.md @@ -15,7 +15,7 @@ reading: psychological manipulation tactic used to abuse by instilling doubt in the victim's own thoughts, observations, feelings by denying, misdirecting, and lying to them; originated from the Gaslight play (1933) and film (1944), where a man changes the lights in the house, while denying her observations of the changes. -#### Impact +## Impact Gaslighting reinforces systems of power, as gaslighting abusers will tend to be in systematically dominant positions where they are intrinsically believed over their victim (e.g., white person over person of colour, man over woman, abled person over disabled person, parent over child, manager over worker, etc). Gaslighting is an abusive and oppressive behaviour and tactic. diff --git a/11ty/definitions/hysterical.md b/11ty/definitions/hysterical.md index cf9beefb..91054aa0 100644 --- a/11ty/definitions/hysterical.md +++ b/11ty/definitions/hysterical.md @@ -14,23 +14,27 @@ reading: - text: Hysteria, Is the Medical Condition Mental, Physical, or Made Up? href: https://www.newsweek.com/hysteria-medical-condition-mental-physical-or-made-66277 --- + feeling or showing uncontrollable outburst of emotion; casually: very funny -#### Issues -Hysteria originates from the Greek word *hysterikos* or "of the womb." The Greeks believed that hysteria was something that moved through a woman's body and caused ailments. +## Issues -Hysteria was once an official medical condition that was primarily diagnosed in women. (It has since been disbanded into other disorders, such as conversion and disassociative disorders.) So, as medical professionals believed men did not have uteruses*, medical professionals would not diagnose men with hysteria (even though they were experiencing the same symptoms of conversion disorder). +Hysteria originates from the Greek word _hysterikos_ or "of the womb." The Greeks believed that hysteria was something that moved through a woman's body and caused ailments. -*Editor's Note: This concept that men cannot have uteruses is reflective of the medical context, not the belief of the editor. +Hysteria was once an official medical condition that was primarily diagnosed in women. (It has since been disbanded into other disorders, such as conversion and disassociative disorders.) So, as medical professionals believed men did not have uteruses\*, medical professionals would not diagnose men with hysteria (even though they were experiencing the same symptoms of conversion disorder). + +\*Editor's Note: This concept that men cannot have uteruses is reflective of the medical context, not the belief of the editor. + +## Impact -#### Impact Gender-codified and sexist language perpetuates harmful stereotypes that reinforce patriarchical ideas. In the case of hysteria, it perpetuates the false stereotype of women as being unreasonable, irrational, and not in control of their emotions. Harmful stereotypes can cause women to not be believed, to have their experiences invalidated, and be tone-policed. Defining gender by sexual organs can also perpetuate transphobic and anti-trans definitions, where gender is falsely defined by sexual organs. Medical conditions believed to be defined by sex and gender are reductive and can lead to misdiagnosis. -#### Alt Words +## Alt Words + If intending **funny** connotation, try: funny; hilarious; comedic. -If intending **panic** connotation, try: panicked, petrified, startled. \ No newline at end of file +If intending **panic** connotation, try: panicked, petrified, startled. diff --git a/11ty/definitions/minorities.md b/11ty/definitions/minorities.md index c3138698..b76babef 100644 --- a/11ty/definitions/minorities.md +++ b/11ty/definitions/minorities.md @@ -12,12 +12,12 @@ alt_words: the smaller in number of two groups constituting a whole -#### Issues +## Issues Minorities is not always accurate and is vague. As it deals with numbers, the term minorities can often be inaccurate, as is the case when speaking of communities of colour, who often outnumber white communities. By referring to a group as 'minorities,' it can suggest the group hasn't taken initiative to show up, thereby blaming the oppressed for systemic issues that prevent their participation. -#### Impact +## Impact By repeatedly referring to groups as "minorities," they are being infantised to their numerical representation and made to feel minor. The vagueness also abstracts the identify of the marginalised group, making it difficult to address why they are minoritised to begin with. diff --git a/11ty/definitions/minoritised.md b/11ty/definitions/minoritised.md index d8ed92fe..e4b7bfbc 100644 --- a/11ty/definitions/minoritised.md +++ b/11ty/definitions/minoritised.md @@ -13,10 +13,10 @@ reading: groups resulting from social constructs have grant less power or representation compared to other members or groups in society -#### Benefits +## Benefits Minoritised places the emphasis on the power struggle, and on the systemic issues at play. It's also an adjective, which requires you to add "group" or "people" so it's people-first language -#### Impact +## Impact It removes the pejorative nature of "minorities". diff --git a/11ty/definitions/non-binary.md b/11ty/definitions/non-binary.md index e7183d36..dba67bf0 100644 --- a/11ty/definitions/non-binary.md +++ b/11ty/definitions/non-binary.md @@ -9,8 +9,8 @@ of, relating to, or characterised by being any gender that does not fit into the For example, a non-binary person may have some gender between male and female, have multiple genders, no gender, a culturally-specific gender (e.g., two-spirit). -#### Note +## Note -Non-binary people may or may not also identify as [transgender](/#transgender). +Non-binary people may or may not also identify as [transgender](/definitions/transgender). Although non-binary is commonly used as an umbrella term, just because someone identifies as a term under the umbrella, does not necessarily imply that they identify as non-binary as well. For example, someone may be agender, but not identify with the term "non-binary". diff --git a/11ty/definitions/obsessive-compulsive-disorder.md b/11ty/definitions/obsessive-compulsive-disorder.md index 14e71402..ab7a34af 100644 --- a/11ty/definitions/obsessive-compulsive-disorder.md +++ b/11ty/definitions/obsessive-compulsive-disorder.md @@ -21,14 +21,14 @@ alt_words: a mental illness usually embodied by unwanted repeated thoughts (obsession) coupled with repeated behaviour, routine, or action (compulsion) -#### Issues +## Issues OCD is commonly misused to highlight personality quirks or fussiness, usually involving a preference for order or cleanliness. Use of 'OCD' as a noun or adjective in this manner diminishes the actual condition, resulting in reductive and over-normalised perception of a someone with these specific mental or psychiatric disabilities. -#### Impact +## Impact By conflating arbitrary quirks or behaviours with OCD, we are invalidating OCD as a medical condition and the people who experience it. Generally by using medically appropriative language, we are invalidating the existences of people with OCD, minimising their experiences, perpetuating violence against people who experience mental or psychological disabilities. Using this language perpetuates those systems and language of harm, regardless of our intent. -#### Usage Tip +## Usage Tip Be more specific. Typically we can find an alternate definition by simply reflecting on what emotion we're really feeling. In this case, be particularly aware if the behaviour is actually unwanted or uncontrollable. diff --git a/11ty/definitions/ok-hand.md b/11ty/definitions/ok-hand.md index d1e3545b..ddea3cb3 100644 --- a/11ty/definitions/ok-hand.md +++ b/11ty/definitions/ok-hand.md @@ -16,17 +16,17 @@ alt_words: hand gesture where right thumb and right index finger form a circle, remaining fingers fan out; in American Sign Language, gesture means number nine; in diving, gesture indicates “OK” as question or confirmation; gesture is used in an innocuous children's game called “[The Circle Game](https://www.vice.com/en_uk/article/wj8e74/searching-for-the-man-behind-the-circle-game),” where the gesture is held low—if another child looks at it, they get punched. -In 2017, the hand gesture was [appropriated by White Supremacists on 4chan](https://knowyourmeme.com/memes/ok-symbol-%F0%9F%91%8C) to mean White Power (the three fingers forming at 'W' and thumb and index forming the circle of the 'P'). It was framed as a hoax to "own" Leftists through trickery and [gaslighting](#gaslighting). +In 2017, the hand gesture was [appropriated by White Supremacists on 4chan](https://knowyourmeme.com/memes/ok-symbol-%F0%9F%91%8C) to mean White Power (the three fingers forming at 'W' and thumb and index forming the circle of the 'P'). It was framed as a hoax to "own" Leftists through trickery and [gaslighting](/definitions/gaslighting). The hand gesture has been used by White Supremacists as a dogwhistle to identify other White Supremacists [at rallies](https://mashable.com/article/milo-yiannopoulos-banned-from-furry-convention/), [in forums](https://www.splcenter.org/hatewatch/2018/09/18/ok-sign-white-power-symbol-or-just-right-wing-troll), and even [at court hearings](https://nypost.com/2019/03/15/suspected-new-zealand-shooter-appears-in-court/). In 2019, the hand gesture was added to the [Anti-Defamation League's list of official symbols of hate](https://www.adl.org/news/press-releases/ok-and-other-alt-right-memes-and-slogans-added-to-adls-hate-symbols-database). -#### Issues +## Issues While it can be argued that the symbol's origins and many of its uses do not imply racist connotations, and that the 4chan-ers "framed it as a hoax," it is undeniable that the symbol has evolved and become a gesture used sincerely by white supremacists. The uncertainty created by the 4chan-ers is a critical part of their strategy. The strategy employs plausible deniability: Because they self-identified it as a hoax, they can fall back on that explanation. Meanwhile, if people begin to adapt the symbol, as they did, it becomes a dogwhistle for White Supremacists. It should be noted that this approach of indoctrinating symbols of hate is one long-documented, and [used for the Swastika as well](https://theconversation.com/how-nazis-twisted-the-swastika-into-a-symbol-of-hate-83020). -#### Impact +## Impact The people most vulnerable to the oppressive impact of White Supremacy will never know for certain if the symbol is being used in one of its non-violent manners or if it's being used in its racist violent manners. The oppressed must choose the option that protects them, which is typically erring on the side of caution. diff --git a/11ty/definitions/performative-allyship.md b/11ty/definitions/performative-allyship.md index d59b0796..5179e599 100644 --- a/11ty/definitions/performative-allyship.md +++ b/11ty/definitions/performative-allyship.md @@ -17,6 +17,6 @@ reading: when an individual or group of power/majority/privilege (e.g., white, male, abled, unqueer, etc) loudly profess(es) their actions in the name of 'allyship,' while actively conducting harm to, taking focus away from, and generally being unhelpful towards the group they claim to support, often to receive praise and attention, without taking critical action to dismantle the systems of harm. -#### Impact +## Impact Performative allyship detracts from the stories of the oppressed and the impact that oppression has on them in favour of the stories of the oppressors and their intent to help. The cost of performative allyship can also be that the stories of the oppressed people are appropriated, watered down, and inaccurately retold by people who should not be telling those stories. diff --git a/11ty/definitions/polyamory.md b/11ty/definitions/polyamory.md index a084f9a2..107a2401 100644 --- a/11ty/definitions/polyamory.md +++ b/11ty/definitions/polyamory.md @@ -14,6 +14,6 @@ reading: belief that romantic and/or sexual exclusivity is not necessary for a happy, committed relationship; an umbrella term for various types of relationships (coded as romantic or quasi-romantic, sexual or non-sexual) where all partners involved consent to ethical non-monogamy, such as polycules, throuples, group marriages, etc. -#### Note +## Note One can be polyamorous despite currently being single or in a monogamous relationship. diff --git a/11ty/definitions/spaz.md b/11ty/definitions/spaz.md index 7471e5cf..d8a10424 100644 --- a/11ty/definitions/spaz.md +++ b/11ty/definitions/spaz.md @@ -15,14 +15,14 @@ alt_words: irrationally nervous person; hyperactive -#### Issues +## Issues The origin of the word “Spaz” is a shortened version of “Spastic.” Spastic refers to an alteration in muscle tone affected by the medical condition spasticity, which is seen in spastic diplegia and many other forms of cerebral palsy. -#### Impact +## Impact By using ableist language, we are perpetuating violence against people who experience mental or psychological disabilities. Using this language perpetuates those systems and language of harm, regardless of our intent. -#### Usage Tip +## Usage Tip Be more specific. Typically we can find an alternate definition by simply reflecting on what emotion we're really feeling. diff --git a/11ty/definitions/transgender.md b/11ty/definitions/transgender.md index 849ee893..b260b407 100644 --- a/11ty/definitions/transgender.md +++ b/11ty/definitions/transgender.md @@ -7,4 +7,4 @@ defined: true of, relating to, or characterised by a gender that does not match the gender they were assigned at birth. -The opposite of [cisgender](/#cisgender). +The opposite of [cisgender](/definitions/cisgender). diff --git a/11ty/definitions/white-fragility.md b/11ty/definitions/white-fragility.md index a9e12cb1..327da2ce 100644 --- a/11ty/definitions/white-fragility.md +++ b/11ty/definitions/white-fragility.md @@ -15,6 +15,6 @@ reading: the tendency for dominant white culture to respond to racism with defensive, dismissive, and angry responses; “a state in which even a minimum amount of racial stress becomes intolerable, triggering a range of defensive moves.” (Robin DiAngelo). -#### Impact +## Impact White fragility detracts from critical conversations about the systemic oppressors at play. The cost of white fragility is that it centres the feelings of white people while ignoring and invalidating the systemic harm conducted towards people of colour. White fragility also prevents white people from doing anti-racist work to unpack their socially internalised racism. diff --git a/11ty/definitions/women-and-people-of-colour.md b/11ty/definitions/women-and-people-of-colour.md index 68e3792f..fc0485a4 100644 --- a/11ty/definitions/women-and-people-of-colour.md +++ b/11ty/definitions/women-and-people-of-colour.md @@ -15,10 +15,10 @@ alt_words: often used as a phrase to encompass “non-white, non-men,” seeking to provide solidarity for these two groups -#### Issues +## Issues What happens to women of colour? As a woman of colour, I am split between both women and people of colour. -#### Impact +## Impact -As such, it elicits feelings of erasure for women of colour. It also neglects [non-binary](/#non-binary) individuals. +As such, it elicits feelings of erasure for women of colour. It also neglects [non-binary](/definitions/non-binary) individuals. diff --git a/11ty/documentation/documentation.json b/11ty/documentation/documentation.json index 04d34aa3..f25d0a37 100644 --- a/11ty/documentation/documentation.json +++ b/11ty/documentation/documentation.json @@ -1,3 +1,3 @@ { - "layout": "layouts/page.njk" + "layout": "layouts/documentation.njk" } diff --git a/11ty/documentation/examples/examples.json b/11ty/documentation/examples/examples.json index 04d34aa3..f25d0a37 100644 --- a/11ty/documentation/examples/examples.json +++ b/11ty/documentation/examples/examples.json @@ -1,3 +1,3 @@ { - "layout": "layouts/page.njk" + "layout": "layouts/documentation.njk" } diff --git a/11ty/documentation/examples/flagged-word.md b/11ty/documentation/examples/flagged-word.md index 1dc3fff9..17955740 100644 --- a/11ty/documentation/examples/flagged-word.md +++ b/11ty/documentation/examples/flagged-word.md @@ -41,15 +41,15 @@ alt_words: mentally deranged; demented; insane. -#### Issues +## Issues Crazy is very commonly used as an adjective to embody a vast array of ideas, often not specifically. It is used so frequently that it sometimes is a filler. Crazy can also be used in a derogatory manner for someone with mental or psychiatric disabilities. -#### Impact +## Impact By using ableist language, we are perpetuating violence against people who experience mental or psychological disabilities. Using this language perpetuates those systems and language of harm, regardless of our intent. -#### Usage Tip +## Usage Tip Be more specific. Typically we can find an alternate definition by simply reflecting on what emotion we're really feeling. ``` @@ -80,7 +80,7 @@ reading: when an individual or group of power/majority/privilege (e.g., white, male, abled, unqueer, etc) loudly profess(es) their actions in the name of 'allyship,' while actively conducting harm to, taking focus away from, and generally being unhelpful towards the group they claim to support, often to receive praise and attention, without taking critical action to dismantle the systems of harm. -#### Impact +## Impact Performative allyship detracts from the stories of the oppressed and the impact that oppression has on them in favour of the stories of the oppressors and their intent to help. The cost of performative allyship can also be that the stories of the oppressed people are appropriated, watered down, and inaccurately retold by people who should not be telling those stories. ``` diff --git a/11ty/helpers/__tests__/definitionPermalink.spec.js b/11ty/helpers/__tests__/definitionPermalink.spec.js new file mode 100644 index 00000000..8a971b3a --- /dev/null +++ b/11ty/helpers/__tests__/definitionPermalink.spec.js @@ -0,0 +1,7 @@ +import test from 'ava'; + +import definitionPermalink from '../definitionPermalink'; + +test('constructs correct detail link', (t) => { + t.is(definitionPermalink('test-slug'), '/definitions/test-slug/'); +}); diff --git a/11ty/helpers/__tests__/findDefinitionContentNextItems.spec.js b/11ty/helpers/__tests__/findDefinitionContentNextItems.spec.js new file mode 100644 index 00000000..4212db64 --- /dev/null +++ b/11ty/helpers/__tests__/findDefinitionContentNextItems.spec.js @@ -0,0 +1,122 @@ +import test from 'ava'; + +import testCollection from '../../../_util/_mocks/testCollection.json'; + +import findDefinitionContentNextItems from '../findDefinitionContentNextItems'; + +test('finds no previous previous elements for the first item', (t) => { + const { previous } = findDefinitionContentNextItems( + testCollection[0].data, + testCollection + ); + + t.deepEqual(previous, []); +}); + +test('finds one previous element for the second item', (t) => { + const { previous } = findDefinitionContentNextItems( + testCollection[1].data, + testCollection + ); + + t.deepEqual(previous, [testCollection[0].data]); +}); + +test('finds two previous elements for the third item', (t) => { + const { previous } = findDefinitionContentNextItems( + testCollection[2].data, + testCollection + ); + + t.deepEqual(previous, [testCollection[0].data, testCollection[1].data]); +}); + +test('finds three previous elements for the fourth item', (t) => { + const { previous } = findDefinitionContentNextItems( + testCollection[3].data, + testCollection + ); + + t.deepEqual(previous, [ + testCollection[0].data, + testCollection[1].data, + testCollection[2].data + ]); +}); + +test('finds three previous elements for the eigth item', (t) => { + const { previous } = findDefinitionContentNextItems( + testCollection[7].data, + testCollection + ); + + t.deepEqual(previous, [ + testCollection[4].data, + testCollection[5].data, + testCollection[6].data + ]); +}); + +test('finds three next elements for the eigth item', (t) => { + const { next } = findDefinitionContentNextItems( + testCollection[7].data, + testCollection + ); + + t.deepEqual(next, [ + testCollection[8].data, + testCollection[9].data, + testCollection[10].data + ]); +}); + +test('finds three next elements for the fourth to last item', (t) => { + const { next } = findDefinitionContentNextItems( + testCollection[testCollection.length - 4].data, + testCollection + ); + + t.deepEqual(next, [ + testCollection[testCollection.length - 3].data, + testCollection[testCollection.length - 2].data, + testCollection[testCollection.length - 1].data + ]); +}); + +test('finds two next elements for the third to last item', (t) => { + const { next } = findDefinitionContentNextItems( + testCollection[testCollection.length - 3].data, + testCollection + ); + + t.deepEqual(next, [ + testCollection[testCollection.length - 2].data, + testCollection[testCollection.length - 1].data + ]); +}); + +test('finds one next elements for the second to last item', (t) => { + const { next } = findDefinitionContentNextItems( + testCollection[testCollection.length - 2].data, + testCollection + ); + + t.deepEqual(next, [testCollection[testCollection.length - 1].data]); +}); + +test('finds no next elements for the last item', (t) => { + const { next } = findDefinitionContentNextItems( + testCollection[testCollection.length - 1].data, + testCollection + ); + + t.deepEqual(next, []); +}); + +test('throws if no slug has been given', (t) => { + const error = t.throws(() => + findDefinitionContentNextItems({ test: 'no-slug' }) + ); + + t.is(error.message, 'E_NO_SLUG'); +}); diff --git a/11ty/helpers/definitionPermalink.js b/11ty/helpers/definitionPermalink.js new file mode 100644 index 00000000..b9d05ee7 --- /dev/null +++ b/11ty/helpers/definitionPermalink.js @@ -0,0 +1,3 @@ +module.exports = function(slug) { + return `/definitions/${slug}/`; +}; diff --git a/11ty/helpers/findDefinitionContentNextItems.js b/11ty/helpers/findDefinitionContentNextItems.js new file mode 100644 index 00000000..4fc8d086 --- /dev/null +++ b/11ty/helpers/findDefinitionContentNextItems.js @@ -0,0 +1,31 @@ +module.exports = function findDefinitionContentNextItems({ slug }, collection) { + if (!slug) throw new Error('E_NO_SLUG'); + + let previous = []; + let next = []; + + const flattenedCollection = collection.map((d) => d.data); + const index = flattenedCollection.findIndex((def) => def.slug === slug); + + // make this a no-op if we are at the beginning + if (index > 0) { + // a negative start index would start searching at the end of the array + // stop at zero to avoid this + const start = Math.max(0, index - 3); + // never get more than three items + const end = start + Math.min(index, 3); + + previous = flattenedCollection.slice(start, end); + } + + // make this a no-op if we are at the end + if (index < collection.length - 1) { + const start = index + 1; + // end overflow doesn't matter too much, cap it still because it feels right + const end = Math.min(start + 3, collection.length); + + next = flattenedCollection.slice(start, end); + } + + return { previous, next }; +}; diff --git a/11ty/shortcodes/__tests__/renderDefinitionContentNextEntries.spec.js b/11ty/shortcodes/__tests__/renderDefinitionContentNextEntries.spec.js new file mode 100644 index 00000000..4c80f390 --- /dev/null +++ b/11ty/shortcodes/__tests__/renderDefinitionContentNextEntries.spec.js @@ -0,0 +1,67 @@ +import test from 'ava'; + +import testCollection from '../../../_util/_mocks/testCollection.json'; + +import renderDefinitionContentNextEntries from '../renderDefinitionContentNextEntries'; + +test('first item', (t) => { + const { title, slug } = testCollection[0].data; + + t.is( + renderDefinitionContentNextEntries(title, slug, testCollection), + `
+

Browse

+

Previous words

+ +
+ +
` + ); +}); + +test('last item', (t) => { + const { title, slug } = testCollection[testCollection.length - 1].data; + t.is( + renderDefinitionContentNextEntries(title, slug, testCollection), + `
+

Browse

+

Previous words

+ +
+

Next words

+ +
+
` + ); +}); + +test('throws if no title has been passed', (t) => { + const error = t.throws(() => { + renderDefinitionContentNextEntries(); + }); + + t.is(error.message, 'E_NO_TITLE'); +}); + +test('throws if no slug has been passed', (t) => { + const error = t.throws(() => { + renderDefinitionContentNextEntries('title'); + }); + + t.is(error.message, 'E_NO_SLUG'); +}); + +test('throws if no collection has been passed', (t) => { + const error = t.throws(() => { + renderDefinitionContentNextEntries( + testCollection[0].data.title, + testCollection[0].data.slug + ); + }); + + t.is(error.message, 'E_NO_COLLECTION'); +}); diff --git a/11ty/shortcodes/renderDefinitionContentNextEntries.js b/11ty/shortcodes/renderDefinitionContentNextEntries.js new file mode 100644 index 00000000..66207429 --- /dev/null +++ b/11ty/shortcodes/renderDefinitionContentNextEntries.js @@ -0,0 +1,42 @@ +const definitionPermalink = require('../helpers/definitionPermalink'); +const findDefinitionContentNextItems = require('../helpers/findDefinitionContentNextItems'); + +const makeListItem = (item) => + `
  • ${item.title}
  • `; + +module.exports = function definitionContentNextEntries( + title, + slug, + collection +) { + if (!title) throw new Error('E_NO_TITLE'); + if (!slug) throw new Error('E_NO_SLUG'); + if (!collection) throw new Error('E_NO_COLLECTION'); + + const entry = { title, slug }; + + const { next, previous } = findDefinitionContentNextItems(entry, collection); + + return `
    +

    Browse

    +

    Previous words

    + +
    +

    Next words

    + +
    +
    `; +}; diff --git a/_util/_mocks/testCollection.json b/_util/_mocks/testCollection.json new file mode 100644 index 00000000..8d8681c5 --- /dev/null +++ b/_util/_mocks/testCollection.json @@ -0,0 +1,44 @@ +[ + { "data": { "slug": "ok-hand", "title": "đź‘Ś [ok-hand]" } }, + { "data": { "slug": "ableism", "title": "Ableism" } }, + { "data": { "slug": "barbaric", "title": "Barbaric" } }, + { "data": { "slug": "biromantic", "title": "Biromantic" } }, + { "data": { "slug": "bisexual", "title": "Bisexual" } }, + { "data": { "slug": "cisgender", "title": "Cisgender" } }, + { "data": { "slug": "crazy", "title": "crazy" } }, + { + "data": { + "slug": "english-as-second-language", + "title": "English as Second Language (ESL)" + } + }, + { "data": { "slug": "fatphobia", "title": "Fatphobia" } }, + { "data": { "slug": "gaslighting", "title": "Gaslighting" } }, + { "data": { "slug": "minorities", "title": "minorities" } }, + { "data": { "slug": "minoritised", "title": "minoritised" } }, + { "data": { "slug": "non-binary", "title": "Non-binary" } }, + { + "data": { + "slug": "obsessive-compulsive-disorder", + "title": "Obsessive Compulsive Disorder (OCD)" + } + }, + { "data": { "slug": "pan-sexual", "title": "Pansexual" } }, + { + "data": { + "slug": "performative-allyship", + "title": "performative allyship" + } + }, + { "data": { "slug": "polyamory", "title": "Polyamory" } }, + { "data": { "slug": "spaz", "title": "Spaz" } }, + { "data": { "slug": "transgender", "title": "Transgender" } }, + { "data": { "slug": "unreal", "title": "unreal" } }, + { "data": { "slug": "white-fragility", "title": "White Fragility" } }, + { + "data": { + "slug": "women-and-people-of-colour", + "title": "women and people of colour" + } + } +] diff --git a/_temp/create-empty-definitions-min.js b/_util/create-empty-definitions-min.js similarity index 100% rename from _temp/create-empty-definitions-min.js rename to _util/create-empty-definitions-min.js diff --git a/_temp/create-empty-definitions.js b/_util/create-empty-definitions.js similarity index 100% rename from _temp/create-empty-definitions.js rename to _util/create-empty-definitions.js diff --git a/_temp/undefined-words.json b/_util/undefined-words.json similarity index 100% rename from _temp/undefined-words.json rename to _util/undefined-words.json diff --git a/assets/css/base.scss b/assets/css/base.scss index f33a6e30..d24235c0 100644 --- a/assets/css/base.scss +++ b/assets/css/base.scss @@ -1,45 +1,32 @@ @charset 'UTF-8'; -@import '~prism-themes/themes/prism-a11y-dark'; // 1. Configuration and helpers -@import - 'abstracts/variables', - 'abstracts/functions', - 'abstracts/mixins', +@import 'abstracts/variables', 'abstracts/functions', 'abstracts/mixins', 'abstracts/universal-selector'; // 2. Vendors // @import - // 'vendors/normalize'; +// 'vendors/normalize'; // 3. Base stuff -@import - 'base/custom-properties', - 'base/fonts', - 'base/base', - 'base/typography', - 'base/helpers'; +@import 'base/custom-properties', 'base/fonts', 'base/base', 'base/selection', + 'base/typography', './base/a', 'base/helpers'; // 4. Layout-related sections -@import - 'structures/header', - 'structures/footer', - 'structures/grid', - 'structures/multi-column', - 'structures/table-of-content'; +@import 'structures/header', 'structures/footer', 'structures/grid', + 'structures/multi-column', 'structures/table-of-content', + './structures/definition-content', './structures/definition-navigation'; // 5. Components -@import - 'components/word', - 'components/lists', - 'components/definitions', +@import 'components/word', 'components/lists', 'components/definitions', 'components/flag'; +// 5.1 Code Highlighting +@import '~prism-themes/themes/prism-a11y-dark'; + // 6. Page-specific styles -// @import -// 'pages/home'; +@import './layouts/pages'; // 7. Themes // @import // 'themes/default'; - diff --git a/assets/css/base/_a.scss b/assets/css/base/_a.scss new file mode 100644 index 00000000..58460314 --- /dev/null +++ b/assets/css/base/_a.scss @@ -0,0 +1,16 @@ +a { + border-bottom: $dark-grey solid 0.1em; + color: $black; + font-family: $ext-sans; + margin: 1rem 0; + text-decoration: none; + + &:hover, + &:focus { + border-bottom: $primary-color solid 0.1rem; + } + &:focus { + outline: pxToRem(3) solid $primary-color; + outline-offset: pxToRem(5); + } +} diff --git a/assets/css/base/_base.scss b/assets/css/base/_base.scss index 3a24c93f..4a860828 100644 --- a/assets/css/base/_base.scss +++ b/assets/css/base/_base.scss @@ -6,44 +6,9 @@ body { padding: 2rem; } -h1 { - font-family: $ext-sans; - font-weight: $bold; -} - -h1, -h2, -h3, -h4 { - margin-bottom: 0.5em; - margin-top: 1em; -} - -p { - font-size: 1.25rem; - line-height: 1.25; - margin: 0.75rem 0; -} - -a { - border-bottom: $dark-grey solid 0.1em; - color: $black; - font-family: $ext-sans; - margin: 1rem 0; - text-decoration: none; - - &:hover { - border-bottom: $primary-color solid 0.1rem; - } - &:focus { - outline: pxToRem(3) solid $primary-color; - outline-offset: pxToRem(5); - } -} - code { background-color: $dark-grey; - border: 1px solid $black; + border: pxToRem(1px) solid $black; border-radius: 0.25em; color: $white; font-size: 95%; diff --git a/assets/css/base/_helpers.scss b/assets/css/base/_helpers.scss index 6c5d0166..a2238d8c 100644 --- a/assets/css/base/_helpers.scss +++ b/assets/css/base/_helpers.scss @@ -2,12 +2,12 @@ padding-left: 0 !important; } -.style__italics { - font-style: italic; +.u-margin-bottom-double { + margin-bottom: 2rem; } -.small { - font-size: 0.75em; +.style__italics { + font-style: italic; } .help { @@ -16,3 +16,13 @@ margin: 0.75rem 0; } } + +.visually-hidden { + clip: rect(0 0 0 0); + clip-path: inset(100%); + height: 1px; + overflow: hidden; + position: absolute; + white-space: nowrap; + width: 1px; +} diff --git a/assets/css/base/_selection.scss b/assets/css/base/_selection.scss new file mode 100644 index 00000000..065797ba --- /dev/null +++ b/assets/css/base/_selection.scss @@ -0,0 +1,4 @@ +::selection { + background-color: #000000cc; + color: white; +} diff --git a/assets/css/base/_typography.scss b/assets/css/base/_typography.scss index 388ae86e..da1b6149 100644 --- a/assets/css/base/_typography.scss +++ b/assets/css/base/_typography.scss @@ -1,6 +1,72 @@ +h1 { + font-family: $ext-sans; + font-weight: $bold; +} + +h1, +h2, +h3, +h4 { + margin-bottom: 0.5em; + margin-top: 1em; +} + +p { + font-size: 1.25rem; + line-height: 1.25; + margin: 0.75rem 0; +} + +.title__thicc { + // a sensible base font size + font-size: 3rem; + line-height: 0.75; + margin: 0.5rem 0rem; + padding: 0; + // transform: rotateZ(90deg); + // margin: 13rem -7rem; +} + +@media (min-width: 51rem) and (min-height: 400px) { + // a dramatic font size + .title__thicc { + font-size: 12vh; + } +} + +@media (min-width: 51rem) and (min-height: 850px) { + // cap the max-height of the title + // at the same size that 12vh computes to + // when the viewport is 850px high + .title__thicc { + font-size: 6.75rem; + } +} + +@media (min-width: 800px) { + .title__thicc { + grid-column: 1 / 3; + } + + .title__thicc + p { + grid-column: 1 / 2; + } +} + +.main-headline { + font-family: orpheuspro, Palatino, Times, serif; + font-size: 3.5rem; + line-height: 1.2; + margin: 0; +} + .subtitle { font-family: $ext-sans; font-weight: $regular; grid-column: span 2; letter-spacing: 0.1; } + +.small { + font-size: 0.75em; +} diff --git a/assets/css/base/_universal-selector.scss b/assets/css/base/_universal-selector.scss new file mode 100644 index 00000000..d8209c8c --- /dev/null +++ b/assets/css/base/_universal-selector.scss @@ -0,0 +1,11 @@ +* { + box-sizing: border-box; +} + +*::before { + box-sizing: border-box; +} + +*::after { + box-sizing: border-box; +} diff --git a/assets/css/components/_flag.scss b/assets/css/components/_flag.scss index bacde479..25fac85a 100644 --- a/assets/css/components/_flag.scss +++ b/assets/css/components/_flag.scss @@ -4,8 +4,8 @@ display: inline-block; font-size: 0.9rem; font-weight: bold; + margin: 0.5rem 0.75rem 0.25rem 0; padding: 0.45rem 0.65rem; - margin: 0.50rem 0.75rem 0.25rem 0; text-transform: lowercase; &:before { diff --git a/assets/css/components/_lists.scss b/assets/css/components/_lists.scss index fca06710..e6f7b78d 100644 --- a/assets/css/components/_lists.scss +++ b/assets/css/components/_lists.scss @@ -1,26 +1,26 @@ - ol { - margin: 0; - padding: 0 0 0 1em; +ol { + margin: 0; + padding: 0 0 0 1em; +} + +li { + list-style: none; + padding-bottom: 0.5em; + + &.subterm { + padding-left: pxToRem(10); } - li { - list-style: none; - padding-bottom: 0.5em; - - &.subterm { - padding-left: pxToRem(10); - } - - &:last-child { - padding-bottom: 0; - } - - &.subterm:before { - content: '\21B3'; - padding-right: pxToRem(5); - } + &:last-child { + padding-bottom: 0; } + &.subterm:before { + content: '\21B3'; + padding-right: pxToRem(5); + } +} + .list-semicolon { list-style: none; margin: 0; @@ -34,4 +34,3 @@ } } } - diff --git a/assets/css/layouts/_pages.scss b/assets/css/layouts/_pages.scss new file mode 100644 index 00000000..2cd276e1 --- /dev/null +++ b/assets/css/layouts/_pages.scss @@ -0,0 +1,38 @@ +.page { + align-items: start; + display: grid; + grid-template-columns: 1fr; + + & > * { + grid-column: 1; + } +} + +.article-content { + display: grid; + grid-gap: 1rem; + + @media (min-width: 800px) { + grid-template-columns: 10rem 45rem; + } +} + +.wide-content { + @media (min-width: 800px) { + display: grid; + grid-gap: 5rem; + grid-template-columns: 10rem 1fr; + } +} + +.definition { + max-width: 47rem; +} + +.definition__further-definitions_nav { + margin-top: 3rem; +} + +.definition__header { + font-family: orpheuspro, Palatino, Times, serif; +} diff --git a/assets/css/structures/_definition-content.scss b/assets/css/structures/_definition-content.scss new file mode 100644 index 00000000..8e48d088 --- /dev/null +++ b/assets/css/structures/_definition-content.scss @@ -0,0 +1,129 @@ +.definition-content { + --word-signal-color: currentColor; + --marker-height: 0.25rem; + + &__title { + font-family: $serif; + font-size: 2.5rem; + font-weight: 900; + line-height: 1.25; + margin-bottom: 1rem; + margin-top: 0; + } + + &__content { + align-items: stretch; + + & + & { + margin-top: 2rem; + } + + @supports (display: grid) { + // align-items: flex-start; + display: grid; + grid-gap: 1rem; + grid-template-columns: 1fr 4fr; + + & > * { + margin: 0 !important; + } + } + + & > p { + font-family: $sans-serif; + font-size: 1.5rem; + grid-column: 1 / -1; + line-height: 1.4; + } + + & h2 { + flex: 0 1 auto; + font-family: $con-sans; + font-size: 0.85rem; + font-weight: normal; + grid-column: 1; + text-transform: uppercase; + transform: translateY(0.4em); + + @supports (display: grid) { + text-align: right; + } + } + + & h2, + & h2 + * { + margin-top: 1rem; + } + + & h2 ~ p, + & h2 ~ ul { + font-size: inherit; + // border-left: 0.1rem solid lightgrey; + // padding-left: 1rem; + grid-column: 2; + } + } + + &__speech { + // font-size: 0.5em; + font-family: $sans-serif; + font-weight: 500; + } + + &__signal { + border-top: 0.15rem solid var(--word-signal-color); + color: var(--word-signal-color); + display: block; + font-family: $ext-sans; + font-size: 0.75rem; + letter-spacing: 0.15rem; + padding: 0.5rem 0.75rem; + text-transform: uppercase; + + &--avoid { + --word-signal-color: #a40000; + + &:before { + @include icon__avoid(); + @include icon__hanging(); + } + } + + &--better { + --word-signal-color: green; + + &:before { + @include icon__alt(); + @include icon__hanging(); + } + } + + &--tool { + &:before { + @include icon__tool(); + @include icon__hanging(); + } + } + } +} + +.definition-content__type { + font-family: $con-sans; + font-size: 0.85rem; + padding-right: 1rem; + text-align: right; + text-transform: uppercase; +} + +.definition-content__link { + border-bottom: darkgrey solid 0.1em; + color: black; + font-family: $ext-sans; + text-decoration: none; +} + +.definition-content__breakdown { + border-left: 0.1rem solid lightgrey; + font-family: $sans-serif; + padding-left: 1rem; +} diff --git a/assets/css/structures/_definition-navigation.scss b/assets/css/structures/_definition-navigation.scss new file mode 100644 index 00000000..53462a97 --- /dev/null +++ b/assets/css/structures/_definition-navigation.scss @@ -0,0 +1,33 @@ +.definition-navigation { + display: flex; + flex-flow: row wrap; + justify-content: space-between; + + & > div { + flex: 0 1 15rem; + } + + @supports (display: grid) { + display: grid; + grid-gap: 1.5rem; + grid-template-columns: repeat(auto-fill, 15rem); + width: 100%; + } +} + +.definition-navigation__sub-headline { + color: #333; + font-size: 1rem; + font-variant-caps: all-small-caps; + letter-spacing: 0.01em; + margin-top: 0; + word-spacing: 0.01em; +} + +.definition-navigation__nav { + flex: 0 0 max-content; + + & li + li { + // margin-top: 0.5rem; + } +} diff --git a/assets/css/structures/_grid.scss b/assets/css/structures/_grid.scss index c702a1f2..ebd6c562 100644 --- a/assets/css/structures/_grid.scss +++ b/assets/css/structures/_grid.scss @@ -1,8 +1,3 @@ -:root { - --auto-grid-min-size: 17rem; - --l-gap: 1rem; -} - .grid { display: grid; grid-column-gap: 4rem; diff --git a/assets/css/utilities/_spacing.scss b/assets/css/utilities/_spacing.scss deleted file mode 100644 index 78248b5c..00000000 --- a/assets/css/utilities/_spacing.scss +++ /dev/null @@ -1,7 +0,0 @@ -.u-no-padding-left { - padding-left: 0 !important; -} - -.u-margin-bottom-double { - margin-bottom: 2rem !important; -} diff --git a/bin/create-definitions b/bin/create-definitions deleted file mode 100755 index 8d4bca94..00000000 --- a/bin/create-definitions +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env node - -require = require('esm')(module /*, options*/); - -require('../_temp/create-empty-definitions').createDefinitions() diff --git a/dist/definitions/bierasure/index.html b/dist/definitions/bierasure/index.html deleted file mode 100644 index e69de29b..00000000 diff --git a/dist/definitions/colonialism/index.html b/dist/definitions/colonialism/index.html deleted file mode 100644 index e69de29b..00000000 diff --git a/dist/definitions/intersectionality/index.html b/dist/definitions/intersectionality/index.html deleted file mode 100644 index e69de29b..00000000 diff --git a/dist/definitions/psychopath/index.html b/dist/definitions/psychopath/index.html deleted file mode 100644 index e69de29b..00000000 diff --git a/netlify.toml b/netlify.toml index f4a36c63..d9c3b6f0 100644 --- a/netlify.toml +++ b/netlify.toml @@ -10,3 +10,10 @@ # Default build command. command = "npm run build" + +[[redirects]] + from = "/#ok-hand" + to = "/definitions/ok-hand/" + status = 301 + force = true + headers = {X-From = "Netlify"} diff --git a/package-lock.json b/package-lock.json index f7b54d0a..9f65aeab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1150,9 +1150,9 @@ "dev": true }, "@types/node": { - "version": "13.7.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.1.tgz", - "integrity": "sha512-Zq8gcQGmn4txQEJeiXo/KiLpon8TzAl0kmKH4zdWctPj05nWwp1ClMdAVEloqrQKfaC48PNLdgN/aVaLqUrluA==", + "version": "13.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.7.tgz", + "integrity": "sha512-Uo4chgKbnPNlxQwoFmYIwctkQVkMMmsAoGGU4JKwLuvBefF0pCq4FybNSnfkfRCpC7ZW7kttcC/TrRtAJsvGtg==", "dev": true }, "@types/normalize-package-data": { @@ -1372,6 +1372,14 @@ "dev": true, "requires": { "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } } }, "ansi-regex": { @@ -1563,9 +1571,9 @@ "integrity": "sha512-dP6vhvatex3Q+OThhvcyGRvHn4noQBg1b8lCNKUAFL05up80hr2pAExveU3YQNDGMhfNPhQit/vzIkkvBPbSXw==" }, "astral-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true }, "async": { @@ -1626,21 +1634,21 @@ } }, "caniuse-lite": { - "version": "1.0.30001030", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001030.tgz", - "integrity": "sha512-QGK0W4Ft/Ac+zTjEiRJfwDNATvS3fodDczBXrH42784kcfqcDKpEPfN08N0HQjrAp8He/Jw8QiSS9QRn7XAbUw==", + "version": "1.0.30001032", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001032.tgz", + "integrity": "sha512-8joOm7BwcpEN4BfVHtfh0hBXSAPVYk+eUIcNntGtMkUWy/6AKRCDZINCLe3kB1vHhT2vBxBF85Hh9VlPXi/qjA==", "dev": true }, "electron-to-chromium": { - "version": "1.3.364", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.364.tgz", - "integrity": "sha512-V6hyxQ9jzt6Jy6w8tAv4HHKhIaVS6psG/gmwtQ+2+itdkWMHJLHJ4m1sFep/fWkdKvfJcPXuywfnECRzfNa7gw==", + "version": "1.3.372", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.372.tgz", + "integrity": "sha512-77a4jYC52OdisHM+Tne7dgWEvQT1FoNu/jYl279pP88ZtG4ZRIPyhQwAKxj6C2rzsyC1OwsOds9JlZtNncSz6g==", "dev": true }, "node-releases": { - "version": "1.1.50", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.50.tgz", - "integrity": "sha512-lgAmPv9eYZ0bGwUYAKlr8MG6K4CvWliWqnkcT2P8mMAgVrH3lqfBPorFlxiG1pHQnqmavJZ9vbMXUTNyMLbrgQ==", + "version": "1.1.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.51.tgz", + "integrity": "sha512-1eQEs6HFYY1kMXQPOLzCf7HdjReErmvn85tZESMczdCNVWP3Y7URYLBAyYynuI7yef1zj4HN5q+oB2x67QU0lw==", "dev": true, "requires": { "semver": "^6.3.0" @@ -1681,9 +1689,9 @@ } }, "ava": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-3.3.0.tgz", - "integrity": "sha512-RaH6jpiS/9ZdIuP1QkyhHvhprk0h38LVdkkpL7Mw25XR3z/6w1N3Nq9O2qm3awnw38CfIztmipzkv+671nWH2w==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/ava/-/ava-3.5.0.tgz", + "integrity": "sha512-o+xq1RgAZrQ7GX5nddTNeYbUDogwlBoa/Hnt+b1ciCLLxSOj5U6ZFblLNBSKwHtP1X/8R06bmzvX47jmlVu9KQ==", "dev": true, "requires": { "@concordance/react": "^2.0.0", @@ -1724,8 +1732,8 @@ "p-map": "^3.0.0", "picomatch": "^2.2.1", "pkg-conf": "^3.1.0", - "plur": "^3.1.1", - "pretty-ms": "^5.1.0", + "plur": "^4.0.0", + "pretty-ms": "^6.0.0", "read-pkg": "^5.2.0", "resolve-cwd": "^3.0.0", "slash": "^3.0.0", @@ -1735,7 +1743,7 @@ "supertap": "^1.0.0", "temp-dir": "^2.0.0", "trim-off-newlines": "^1.0.1", - "update-notifier": "^4.0.0", + "update-notifier": "^4.1.0", "write-file-atomic": "^3.0.1", "yargs": "^15.1.0" }, @@ -1950,16 +1958,17 @@ }, "dependencies": { "fast-glob": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.0.tgz", - "integrity": "sha512-x0gdwWaaubNqJ2nQV8YDALCZRiCy9zOEHlF7ScpzalxdxMKh78Qc0lcpZ4w2I0LZUfklA/IQPLlPU36YTgUozA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.0", "merge2": "^1.3.0", - "micromatch": "^4.0.2" + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" } } } @@ -1970,12 +1979,6 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2175,9 +2178,9 @@ "dev": true }, "pretty-ms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-5.1.0.tgz", - "integrity": "sha512-4gaK1skD2gwscCfkswYQRmddUb2GJZtzDGRjHWadVHtK/DIKFufa12MvES6/xu1tVbUYeia5bmLcwJtZJQUqnw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-6.0.1.tgz", + "integrity": "sha512-ke4njoVmlotekHlHyCZ3wI/c5AMT8peuHs8rKJqekj/oR5G8lND2dVpicFlUz5cbZgE290vvkMuDwfj/OcW1kw==", "dev": true, "requires": { "parse-ms": "^2.1.0" @@ -2656,6 +2659,12 @@ "requires": { "has-flag": "^4.0.0" } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, @@ -3054,9 +3063,9 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" }, "camelcase-keys": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.1.2.tgz", - "integrity": "sha512-QfFrU0CIw2oltVvpndW32kuJ/9YOJwUnmWrjlXt1nnJZHCaS9i6bfOpg9R4Lw8aZjStkJWM+jc0cdXjWBgVJSw==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.1.tgz", + "integrity": "sha512-BPCNVH56RVIxQQIXskp5tLQXUNGQ6sXr7iCv1FHDt81xBOQ/1r6H8SPxf19InVP6DexWar4s87q9thfuk8X9HA==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -3380,37 +3389,6 @@ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", "dev": true }, - "ansi-styles": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", - "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", - "dev": true, - "requires": { - "@types/color-name": "^1.1.1", - "color-convert": "^2.0.1" - } - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -3423,17 +3401,6 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", @@ -5304,6 +5271,12 @@ "type-fest": "^0.8.1" } }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", @@ -5328,6 +5301,18 @@ "requires": { "ansi-regex": "^4.1.0" } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true } } }, @@ -6015,22 +6000,26 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "optional": true }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "optional": true }, "aproba": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "optional": true, "requires": { "delegates": "^1.0.0", @@ -6039,12 +6028,14 @@ }, "balanced-match": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "optional": true }, "brace-expansion": { "version": "1.1.11", - "bundled": true, + "resolved": false, + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "optional": true, "requires": { "balanced-match": "^1.0.0", @@ -6053,32 +6044,38 @@ }, "chownr": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "optional": true }, "code-point-at": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "optional": true }, "concat-map": { "version": "0.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "optional": true }, "console-control-strings": { "version": "1.1.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "optional": true }, "core-util-is": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "optional": true }, "debug": { "version": "4.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "optional": true, "requires": { "ms": "^2.1.1" @@ -6086,22 +6083,26 @@ }, "deep-extend": { "version": "0.6.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "optional": true }, "delegates": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "optional": true }, "detect-libc": { "version": "1.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "optional": true }, "fs-minipass": { "version": "1.2.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "optional": true, "requires": { "minipass": "^2.2.1" @@ -6109,12 +6110,14 @@ }, "fs.realpath": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "optional": true }, "gauge": { "version": "2.7.4", - "bundled": true, + "resolved": false, + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "optional": true, "requires": { "aproba": "^1.0.3", @@ -6129,7 +6132,8 @@ }, "glob": { "version": "7.1.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "optional": true, "requires": { "fs.realpath": "^1.0.0", @@ -6142,12 +6146,14 @@ }, "has-unicode": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "optional": true }, "iconv-lite": { "version": "0.4.24", - "bundled": true, + "resolved": false, + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "optional": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" @@ -6155,7 +6161,8 @@ }, "ignore-walk": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "optional": true, "requires": { "minimatch": "^3.0.4" @@ -6163,7 +6170,8 @@ }, "inflight": { "version": "1.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "optional": true, "requires": { "once": "^1.3.0", @@ -6172,17 +6180,20 @@ }, "inherits": { "version": "2.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "optional": true }, "ini": { "version": "1.3.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "optional": true, "requires": { "number-is-nan": "^1.0.0" @@ -6190,12 +6201,14 @@ }, "isarray": { "version": "1.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "optional": true }, "minimatch": { "version": "3.0.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "optional": true, "requires": { "brace-expansion": "^1.1.7" @@ -6203,12 +6216,14 @@ }, "minimist": { "version": "0.0.8", - "bundled": true, + "resolved": false, + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "optional": true }, "minipass": { "version": "2.3.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "optional": true, "requires": { "safe-buffer": "^5.1.2", @@ -6217,7 +6232,8 @@ }, "minizlib": { "version": "1.2.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "optional": true, "requires": { "minipass": "^2.2.1" @@ -6225,7 +6241,8 @@ }, "mkdirp": { "version": "0.5.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "optional": true, "requires": { "minimist": "0.0.8" @@ -6233,12 +6250,14 @@ }, "ms": { "version": "2.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "optional": true }, "needle": { "version": "2.3.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "optional": true, "requires": { "debug": "^4.1.0", @@ -6248,7 +6267,8 @@ }, "node-pre-gyp": { "version": "0.12.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "optional": true, "requires": { "detect-libc": "^1.0.2", @@ -6265,7 +6285,8 @@ }, "nopt": { "version": "4.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "optional": true, "requires": { "abbrev": "1", @@ -6274,12 +6295,14 @@ }, "npm-bundled": { "version": "1.0.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "optional": true }, "npm-packlist": { "version": "1.4.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "optional": true, "requires": { "ignore-walk": "^3.0.1", @@ -6288,7 +6311,8 @@ }, "npmlog": { "version": "4.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "optional": true, "requires": { "are-we-there-yet": "~1.1.2", @@ -6299,17 +6323,20 @@ }, "number-is-nan": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "optional": true }, "object-assign": { "version": "4.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "optional": true }, "once": { "version": "1.4.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "optional": true, "requires": { "wrappy": "1" @@ -6317,17 +6344,20 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "optional": true }, "os-tmpdir": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "optional": true }, "osenv": { "version": "0.1.5", - "bundled": true, + "resolved": false, + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "optional": true, "requires": { "os-homedir": "^1.0.0", @@ -6336,17 +6366,20 @@ }, "path-is-absolute": { "version": "1.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "optional": true }, "process-nextick-args": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "optional": true }, "rc": { "version": "1.2.8", - "bundled": true, + "resolved": false, + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "optional": true, "requires": { "deep-extend": "^0.6.0", @@ -6357,14 +6390,16 @@ "dependencies": { "minimist": { "version": "1.2.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "optional": true } } }, "readable-stream": { "version": "2.3.6", - "bundled": true, + "resolved": false, + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "optional": true, "requires": { "core-util-is": "~1.0.0", @@ -6378,7 +6413,8 @@ }, "rimraf": { "version": "2.6.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "optional": true, "requires": { "glob": "^7.1.3" @@ -6386,37 +6422,44 @@ }, "safe-buffer": { "version": "5.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "optional": true }, "safer-buffer": { "version": "2.1.2", - "bundled": true, + "resolved": false, + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "optional": true }, "sax": { "version": "1.2.4", - "bundled": true, + "resolved": false, + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "optional": true }, "semver": { "version": "5.7.0", - "bundled": true, + "resolved": false, + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "optional": true }, "set-blocking": { "version": "2.0.0", - "bundled": true, + "resolved": false, + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "optional": true }, "signal-exit": { "version": "3.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "optional": true }, "string-width": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "optional": true, "requires": { "code-point-at": "^1.0.0", @@ -6426,7 +6469,8 @@ }, "string_decoder": { "version": "1.1.1", - "bundled": true, + "resolved": false, + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "optional": true, "requires": { "safe-buffer": "~5.1.0" @@ -6434,7 +6478,8 @@ }, "strip-ansi": { "version": "3.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "optional": true, "requires": { "ansi-regex": "^2.0.0" @@ -6442,12 +6487,14 @@ }, "strip-json-comments": { "version": "2.0.1", - "bundled": true, + "resolved": false, + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "optional": true }, "tar": { "version": "4.4.8", - "bundled": true, + "resolved": false, + "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "optional": true, "requires": { "chownr": "^1.1.1", @@ -6461,12 +6508,14 @@ }, "util-deprecate": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "optional": true }, "wide-align": { "version": "1.1.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "optional": true, "requires": { "string-width": "^1.0.2 || 2" @@ -6474,12 +6523,14 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true, + "resolved": false, + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "optional": true }, "yallist": { "version": "3.0.3", - "bundled": true, + "resolved": false, + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "optional": true } } @@ -6998,9 +7049,9 @@ } }, "http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-Z2EICWNJou7Tr9Bd2M2UqDJq3A9F2ePG9w3lIpjoyuSyXFP9QbniJVu3XQYytuw5ebmG7dXSXO9PgAjJG8DDKA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", "dev": true }, "http-errors": { @@ -7198,9 +7249,9 @@ "dev": true }, "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", "dev": true }, "ignore-by-default": { @@ -7419,9 +7470,9 @@ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" }, "irregular-plurals": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-2.0.0.tgz", - "integrity": "sha512-Y75zBYLkh0lJ9qxeHlMjQ7bSbyiSqNW/UOPWDmzC7cXskL1hekSITh1Oc6JV0XCWWZ9DE8VYSB71xocLk3gmGw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.2.0.tgz", + "integrity": "sha512-YqTdPLfwP7YFN0SsD3QUVCkm9ZG2VzOXv3DOrw5G5mkMbVwptTwVcFv7/C0vOpBmgTxAeTG19XpUs1E522LW9Q==", "dev": true }, "is-absolute": { @@ -8164,9 +8215,9 @@ } }, "lint-staged": { - "version": "10.0.7", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.7.tgz", - "integrity": "sha512-Byj0F4l7GYUpYYHEqyFH69NiI6ICTg0CeCKbhRorL+ickbzILKUlZLiyCkljZV02wnoh7yH7PmFyYm9PRNwk9g==", + "version": "10.0.8", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-10.0.8.tgz", + "integrity": "sha512-Oa9eS4DJqvQMVdywXfEor6F4vP+21fPHF8LUXgBbVWUSWBddjqsvO6Bv1LwMChmgQZZqwUvgJSHlu8HFHAPZmA==", "dev": true, "requires": { "chalk": "^3.0.0", @@ -9203,6 +9254,12 @@ "type-fest": "^0.8.1" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "yargs-parser": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-16.1.0.tgz", @@ -10397,12 +10454,6 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true - }, - "type-fest": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", - "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", - "dev": true } } }, @@ -10460,12 +10511,12 @@ } }, "plur": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/plur/-/plur-3.1.1.tgz", - "integrity": "sha512-t1Ax8KUvV3FFII8ltczPn2tJdjqbd1sIzu6t4JL7nQ3EyeL/lTrj5PWKb06ic5/6XYDr65rQ4uzQEGN70/6X5w==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", + "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", "dev": true, "requires": { - "irregular-plurals": "^2.0.0" + "irregular-plurals": "^3.2.0" } }, "pn": { @@ -11772,14 +11823,6 @@ "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - } } }, "read-pkg": { @@ -12642,29 +12685,45 @@ "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" }, "slice-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", - "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" } }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true } } @@ -13303,9 +13362,9 @@ } }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "style-search": { @@ -13533,12 +13592,6 @@ "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", "dev": true }, - "ignore": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", - "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", - "dev": true - }, "import-fresh": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", @@ -14032,12 +14085,38 @@ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -14388,9 +14467,9 @@ } }, "type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", "dev": true }, "typedarray": { @@ -14948,9 +15027,9 @@ "dev": true }, "vfile-message": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.2.tgz", - "integrity": "sha512-gNV2Y2fDvDOOqq8bEe7cF3DXU6QgV4uA9zMR2P8tix11l1r7zju3zry3wZ8sx+BEfuO6WQ7z2QzfWTvqHQiwsA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.3.tgz", + "integrity": "sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw==", "dev": true, "requires": { "@types/unist": "^2.0.0", @@ -15158,9 +15237,9 @@ } }, "write-file-atomic": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.1.tgz", - "integrity": "sha512-JPStrIyyVJ6oCSz/691fAjFtefZ6q+fP6tm+OS4Qw6o+TGQxNp1ziY2PgS+X/m0V8OWhZiO/m4xSj+Pr4RrZvw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -15223,12 +15302,29 @@ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" }, "yaml": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.7.2.tgz", - "integrity": "sha512-qXROVp90sb83XtAoqE8bP9RwAkTTZbugRUTm5YeFCBfNRPEp2YzTeqWiz7m5OORHzEvrA/qcGS8hp/E+MMROYw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.8.0.tgz", + "integrity": "sha512-6qI/tTx7OVtA4qNqD0OyutbM6Z9EKu4rxWm/2Y3FDEBQ4/2X2XAnyuRXMzAE2+1BPyqzksJZtrIwblOHg0IEzA==", "dev": true, "requires": { - "@babel/runtime": "^7.6.3" + "@babel/runtime": "^7.8.7" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.7.tgz", + "integrity": "sha512-+AATMUFppJDw6aiR5NVPHqIQBlV/Pj8wY/EZH+lmvRdUo9xBaz/rF3alAwFJQavvKfeOlPE7oaaDHVbcySbCsg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "regenerator-runtime": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", + "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==", + "dev": true + } } }, "yargs": { diff --git a/package.json b/package.json index 7261f244..266a480f 100644 --- a/package.json +++ b/package.json @@ -55,7 +55,7 @@ "prism-themes": "^1.3.0" }, "devDependencies": { - "ava": "^3.3.0", + "ava": "^3.5.0", "concurrently": "^5.0.0", "eslint": "^6.8.0", "eslint-config-prettier": "^6.10.0",