Created
November 26, 2020 10:13
-
-
Save Sovetnikov/80afc4250a976270e43a81b173229717 to your computer and use it in GitHub Desktop.
Remove all unmodified css from customized buefy theme
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Import Bulma's core | |
@import "../../node_modules/bulma/sass/utilities/_all"; | |
// Import Bulma and Buefy styles | |
@import "../../node_modules/bulma/bulma.sass"; | |
@import "../../node_modules/buefy/src/scss/buefy"; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Python 3.8 | |
import hashlib | |
import re | |
import shutil | |
import sys | |
from collections import defaultdict | |
from copy import deepcopy | |
import tinycss2 | |
from tinycss2 import parse_stylesheet_bytes | |
from tinycss2.ast import QualifiedRule, AtRule | |
original_scss = 'original_theme.scss' | |
theme_scss = 'theme.scss' | |
def _convert(scss_file): | |
import subprocess | |
result = subprocess.run([shutil.which('npx'), 'node-sass', scss_file], stdout=subprocess.PIPE, | |
stderr=subprocess.PIPE) | |
if result.stderr: | |
print(result.stderr.decode(), file=sys.stderr) | |
raise Exception(f'Error converting {scss_file}') | |
return result.stdout | |
theme_css = _convert(theme_scss) | |
original_css = _convert(original_scss) | |
theme = parse_stylesheet_bytes(theme_css, skip_comments=True, skip_whitespace=True) | |
original = parse_stylesheet_bytes(original_css, skip_comments=True, skip_whitespace=True) | |
def _clean_str(content): | |
return re.sub('[\r\n\t]', '', re.sub(' +', ' ', content)).strip() | |
def _get_rule_id(prelude): | |
c = tinycss2.serialize(prelude) | |
return _clean_str(c) | |
def _get_content(content): | |
c = tinycss2.serialize(content) | |
c = _clean_str(c) | |
return hashlib.md5(c.encode()).hexdigest() | |
original_rules = defaultdict(list) | |
for item in original[0]: | |
if isinstance(item, QualifiedRule): | |
id = _get_rule_id(item.prelude) | |
content_hash = _get_content(item.content) | |
original_rules[id].append(content_hash) | |
elif isinstance(item, AtRule): | |
rule_id = _get_rule_id(item.prelude) | |
for inner_item in tinycss2.parse_rule_list(item.content, skip_comments=True, skip_whitespace=True): | |
inner_id = _get_rule_id(inner_item.prelude) | |
content_hash = _get_content(inner_item.content) | |
original_rules[(rule_id, inner_id)].append(content_hash) | |
modified_items = [] | |
for item in theme[0]: | |
if isinstance(item, QualifiedRule): | |
id = _get_rule_id(item.prelude) | |
if id in original_rules: | |
content_hash = _get_content(item.content) | |
if content_hash not in original_rules[id]: | |
modified_items.append(item) | |
else: | |
modified_items.append(item) | |
elif isinstance(item, AtRule): | |
rule_item = item | |
rule_id = _get_rule_id(rule_item.prelude) | |
empty_rule_item = None | |
for inner_item in tinycss2.parse_rule_list(rule_item.content, skip_comments=True, skip_whitespace=True): | |
inner_id = _get_rule_id(inner_item.prelude) | |
content_hash = _get_content(inner_item.content) | |
if content_hash not in original_rules[(rule_id, inner_id)]: | |
if empty_rule_item is None: | |
empty_rule_item = deepcopy(rule_item) | |
empty_rule_item.content = [] | |
modified_items.append(empty_rule_item) | |
empty_rule_item.content.append(inner_item) | |
print(tinycss2.serialize(modified_items)) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// https://buefy.org/documentation/customization/ | |
// Import Bulma's core | |
@import "~bulma/sass/utilities/_all"; | |
// Set your colors | |
$primary: #8c67ef; | |
$primary-light: findLightColor($primary); | |
$primary-dark: findDarkColor($primary); | |
$primary-invert: findColorInvert($primary); | |
$twitter: #4099FF; | |
$twitter-invert: findColorInvert($twitter); | |
// Lists and maps | |
$custom-colors: null !default; | |
$custom-shades: null !default; | |
// Setup $colors to use as bulma classes (e.g. 'is-twitter') | |
$colors: mergeColorMaps( | |
( | |
"white": ( | |
$white, | |
$black, | |
), | |
"black": ( | |
$black, | |
$white, | |
), | |
"light": ( | |
$light, | |
$light-invert, | |
), | |
"dark": ( | |
$dark, | |
$dark-invert, | |
), | |
"primary": ( | |
$primary, | |
$primary-invert, | |
$primary-light, | |
$primary-dark, | |
), | |
"link": ( | |
$link, | |
$link-invert, | |
$link-light, | |
$link-dark, | |
), | |
"info": ( | |
$info, | |
$info-invert, | |
$info-light, | |
$info-dark, | |
), | |
"success": ( | |
$success, | |
$success-invert, | |
$success-light, | |
$success-dark, | |
), | |
"warning": ( | |
$warning, | |
$warning-invert, | |
$warning-light, | |
$warning-dark, | |
), | |
"danger": ( | |
$danger, | |
$danger-invert, | |
$danger-light, | |
$danger-dark, | |
), | |
), | |
$custom-colors | |
); | |
// Links | |
$link: $primary; | |
$link-invert: $primary-invert; | |
$link-focus-border: $primary; | |
// Import Bulma and Buefy styles | |
@import "~bulma"; | |
@import "~buefy/src/scss/buefy"; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment