Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - floatdrop/gulp-bem-specs: Specifications for the gulp-bem project · GitHub
Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - floatdrop/gulp-bem-specs: Specifications for the gulp-bem project · GitHub
Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - floatdrop/gulp-bem-specs: Specifications for the gulp-bem project · GitHub
Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - floatdrop/gulp-bem-specs: Specifications for the gulp-bem project · GitHub
Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - floatdrop/gulp-bem-specs: Specifications for the gulp-bem project · GitHub
Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - floatdrop/gulp-bem-specs: Specifications for the gulp-bem project · GitHub
Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - floatdrop/gulp-bem-specs: Specifications for the gulp-bem project · GitHub
Skip to content
This repository was archived by the owner on Aug 14, 2026. It is now read-only.

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Specifications

This document is used by gulp-bem.

BEM identifiers stable

We are using conventions, that are described in bem-naming repository.

BEM identifier defines Block, Element, Modificator and Modificator value string representation.

To separate Block name from Element we are using Element delimeter, which by default equals __.

To separate Block name from Modificator, Element from Modificator and Modificator from Modificator value we are using Modificator delimeter, which by default equals _.

Every identifier should contain Block. Element, Modificator and Modificator value can be absent.

Rules defined above describes next string:

Block{Element delimeter}Element{Modificator delimeter}Modificator{Modificator delimeter}Modificator value

Block, Element, Modificator and Modificator value should be strings that fulfill regular expression [a-z0-9]+(?:-[a-z0-9]+)*

Directory structure stable

We are using conventions, that are described on bem.info site.

BEM methodology does not implies certain directory structure, but for file separation and structuring your application it is advised to store files in predefined way. All files, that are belongs to BEM entity, that has identifier should be placed in directory according to Block, Element and Modificator values.

Directories can be different types (based on nesting):

  • Level - top directory with Blocks.
  • Block - child directory in Level.
  • Element - child directory in Block that starts with Element delimeter.
  • Modificator - child directory in Block or Element that starts with Modificator delimeter.

All files for Block should go to Block directory, etc.

Dependencies file unstable

Each directory in directory structure can have dependency file that have next name: {bem}.deps.js.

{bem} is placeholder for BEM identifier.

Those files should contain JavaScript code that exports dependency object (CommonJS style is used).

Dependency object can have next properties:

  • require - contains Object or Array of Object
  • expect - contains Object or Array of Object

This properties is used to determine order of included dependencies with current block.

require defines dependencies, that should be included before current block.

expect defines dependencies, that should be included after current block.

Object in require and expect is short notation of BEM object that will be normalized with deps-normalize and missing properties (level, block, elem, mod, val) will be taken from current block.

Example:

modules.exports={require: [{block: 'parent'}],expect: [{block: 'ancestor'}]}

About

Specifications for the gulp-bem project

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors