49 lines
1.2 KiB
Python
49 lines
1.2 KiB
Python
import re
|
|
|
|
|
|
HEX_RE = re.compile(r"^#?([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$")
|
|
|
|
|
|
class StringToColorCode:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"color_hex": ("STRING", {"forceInput": True}),
|
|
}
|
|
}
|
|
|
|
RETURN_TYPES = ("COLORCODE",)
|
|
RETURN_NAMES = ("color_code",)
|
|
FUNCTION = "convert"
|
|
CATEGORY = "utils/color"
|
|
|
|
def convert(self, color_hex):
|
|
value = self._first_value(color_hex).strip()
|
|
match = HEX_RE.match(value)
|
|
if not match:
|
|
raise ValueError(
|
|
f"String To ColorCode expected a hex color like #00FF00, got: {value!r}"
|
|
)
|
|
|
|
hex_value = match.group(1)
|
|
if len(hex_value) == 3:
|
|
hex_value = "".join(ch * 2 for ch in hex_value)
|
|
|
|
return (f"#{hex_value.upper()}",)
|
|
|
|
@staticmethod
|
|
def _first_value(value):
|
|
if isinstance(value, (list, tuple)):
|
|
value = value[0] if value else ""
|
|
return str(value)
|
|
|
|
|
|
NODE_CLASS_MAPPINGS = {
|
|
"StringToColorCode": StringToColorCode,
|
|
}
|
|
|
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
|
"StringToColorCode": "String To ColorCode",
|
|
}
|