From fef14c004cd1708b90ca29425090b0b06b159470 Mon Sep 17 00:00:00 2001 From: Jordan Vidrine <30537603+jordanvidrine@users.noreply.github.com> Date: Wed, 22 Nov 2023 17:44:04 -0600 Subject: [PATCH] UX: Add category & section for syntax & BEM (#24516) --- .../components/sections/syntax/00-bem.hbs | 80 +++++++++++++++++++ .../javascripts/discourse/lib/styleguide.js | 4 +- .../discourse/templates/styleguide/index.hbs | 80 ------------------- .../styleguide/config/locales/client.en.yml | 3 + 4 files changed, 86 insertions(+), 81 deletions(-) create mode 100644 plugins/styleguide/assets/javascripts/discourse/components/sections/syntax/00-bem.hbs diff --git a/plugins/styleguide/assets/javascripts/discourse/components/sections/syntax/00-bem.hbs b/plugins/styleguide/assets/javascripts/discourse/components/sections/syntax/00-bem.hbs new file mode 100644 index 00000000000..4a0e648a0d9 --- /dev/null +++ b/plugins/styleguide/assets/javascripts/discourse/components/sections/syntax/00-bem.hbs @@ -0,0 +1,80 @@ +
+ The guidelines outlines below strive to bring structure and consistency to + our classnames. Additionally, with this approach the nesting of css is + firmly reduced. BEM stands for: +
We use a slightly modified version of the BEM classname format.
+d-modal
+ A block is a standalone component. Blocks can be used within blocks. It + should be a "top-level" element, which could be used in its entirety in + another place of the app. It has no dependencies on any parent class.
+d-modal__header
+
+ An element is a part of a block that can not be used outside that context.
+ They because it depends on the parent class and can not be used standalone
+ outside this context. In the example above, an element with class
+ d-modal__header
+ will only work within the d-modal block, but not when placed elsewhere.
+
--success
,
+ --large
,--inline
,
+ --highlighted
+ + A modifier is used mainly for changing the appearance, if different than the + default. It is less than an element, and has no html structure of it own. + Meaning, it can only exist when applied to an element (or potentially a + block). +
+In classic BEM, a modifier looks like:
+ d-modal__header--success
. This can quickly turn into very
+ verbose HTML. Imagine an already long block-element name, for example:
+
+
+ class="chat-message-creator__search-container"
+
+ class="chat-message-creator__search-container
+ chat-message-creator__search-container--highlighted
+ chat-message-creator__search-container--inline"
+
+ class="chat-message-creator__search-container --highlighted
+ --inline"
+
is-foo
= example: is-openhas-foo
= example: has-errorsEven though the BEM convention avoids nesting, we can use SCSS to write the + code nested. This is to taste, but I find it easier to read and write, + because it will keep all relevant elements and modifiers grouped together + and avoids unnecessary repetition of the block class.
+- The guidelines outlines below strive to bring structure and consistency to - our classnames. Additionally, with this approach the nesting of css is - firmly reduced. BEM stands for: -
We use a slightly modified version of the BEM classname format.
-d-modal
- A block is a standalone component. Blocks can be used within blocks. It - should be a "top-level" element, which could be used in its entirety in - another place of the app. It has no dependencies on any parent class.
-d-modal__header
-
- An element is a part of a block that can not be used outside that context.
- They because it depends on the parent class and can not be used standalone
- outside this context. In the example above, an element with class
- d-modal__header
- will only work within the d-modal block, but not when placed elsewhere.
-
--success
,
- --large
,--inline
,
- --highlighted
- - A modifier is used mainly for changing the appearance, if different than the - default. It is less than an element, and has no html structure of it own. - Meaning, it can only exist when applied to an element (or potentially a - block). -
-In classic BEM, a modifier looks like:
- d-modal__header--success
. This can quickly turn into very
- verbose HTML. Imagine an already long block-element name, for example:
-
-
- class="chat-message-creator__search-container"
-
- class="chat-message-creator__search-container
- chat-message-creator__search-container--highlighted
- chat-message-creator__search-container--inline"
-
- class="chat-message-creator__search-container --highlighted
- --inline"
-
is-foo
= example: is-openhas-foo
= example: has-errorsEven though the BEM convention avoids nesting, we can use SCSS to write the - code nested. This is to taste, but I find it easier to read and write, - because it will keep all relevant elements and modifiers grouped together - and avoids unnecessary repetition of the block class.
\ No newline at end of file diff --git a/plugins/styleguide/config/locales/client.en.yml b/plugins/styleguide/config/locales/client.en.yml index fc227051380..9247112fce6 100644 --- a/plugins/styleguide/config/locales/client.en.yml +++ b/plugins/styleguide/config/locales/client.en.yml @@ -5,11 +5,14 @@ en: welcome: "To get started, choose a section from the menu on the left." categories: + syntax: Syntax atoms: Atoms molecules: Molecules organisms: Organisms sections: + bem: + title: "BEM" typography: title: "Typography" example: "Welcome to Discourse"