mirror of
https://github.com/Textualize/textual.git
synced 2025-10-17 02:38:12 +03:00
Error messages for invalid colours in border property
This commit is contained in:
@@ -12,6 +12,5 @@
|
|||||||
min-width: 80;
|
min-width: 80;
|
||||||
background: dark_blue;
|
background: dark_blue;
|
||||||
padding: 2;
|
padding: 2;
|
||||||
border-top: solid red ;
|
border: solid red;
|
||||||
border-left: solid red ;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,10 +85,7 @@ class BasicApp(App):
|
|||||||
|
|
||||||
def action_increase_margin(self):
|
def action_increase_margin(self):
|
||||||
old_margin = self.focused.styles.margin
|
old_margin = self.focused.styles.margin
|
||||||
# new_margin = old_margin + (1,1,1)
|
self.focused.styles.border = [("solid", "green"), ("dashed", "s")]
|
||||||
# self.focused.styles.padding = (1, 1, 1)
|
|
||||||
self.focused.styles.color = "banana"
|
|
||||||
self.focused.styles.border
|
|
||||||
|
|
||||||
|
|
||||||
BasicApp.run(css_file="uber.css", log="textual.log", log_verbosity=1)
|
BasicApp.run(css_file="uber.css", log="textual.log", log_verbosity=1)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import sys
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from textual.css._help_renderables import Example, Bullet, HelpText
|
from textual.css._help_renderables import Example, Bullet, HelpText
|
||||||
|
from textual.css.constants import VALID_BORDER
|
||||||
|
|
||||||
if sys.version_info >= (3, 8):
|
if sys.version_info >= (3, 8):
|
||||||
from typing import Literal, Iterable
|
from typing import Literal, Iterable
|
||||||
@@ -254,5 +255,48 @@ def border_property_help_text(
|
|||||||
property_name = _contextualize_property_name(property_name, context)
|
property_name = _contextualize_property_name(property_name, context)
|
||||||
return HelpText(
|
return HelpText(
|
||||||
summary=f"Invalid value for [i]{property_name}[/] property",
|
summary=f"Invalid value for [i]{property_name}[/] property",
|
||||||
bullets=[*ContextSpecificBullets(inline=[Bullet("")]).get_by_context(context)],
|
bullets=[
|
||||||
|
*ContextSpecificBullets(
|
||||||
|
inline=[
|
||||||
|
Bullet(
|
||||||
|
f"In Python, set '{property_name}' using a tuple of the form (<bordertype>, <color>)",
|
||||||
|
examples=[
|
||||||
|
Example(
|
||||||
|
f'widget.styles.{property_name} = ("solid", "red")'
|
||||||
|
),
|
||||||
|
Example(
|
||||||
|
f'widget.styles.{property_name} = ("round", #f0f0f0")'
|
||||||
|
),
|
||||||
|
Example(
|
||||||
|
f'widget.styles.{property_name} = [("dashed", "#f0f0f0"), ("solid", "blue")] [dim]# Vertical, horizontal'
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Bullet(
|
||||||
|
f"Valid values for <bordertype> are {friendly_list(VALID_BORDER)}"
|
||||||
|
),
|
||||||
|
Bullet(
|
||||||
|
f"Colors can be specified using hex, RGB, or ANSI color names"
|
||||||
|
),
|
||||||
|
],
|
||||||
|
css=[
|
||||||
|
Bullet(
|
||||||
|
f"In Textual CSS, set '{property_name}' using a value of the form [i]<bordertype> <color>[/]",
|
||||||
|
examples=[
|
||||||
|
Example(f"{property_name}: solid red;"),
|
||||||
|
Example(f"{property_name}: dashed #00ee22;"),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Bullet(
|
||||||
|
f"Valid values for <bordertype> are {friendly_list(VALID_BORDER)}"
|
||||||
|
),
|
||||||
|
Bullet(
|
||||||
|
f"Colors can be specified using hex, RGB, or ANSI color names"
|
||||||
|
),
|
||||||
|
Bullet(
|
||||||
|
f"To set border for a specific edge, use [i]border-top[/], [i]border-left[/], etc."
|
||||||
|
),
|
||||||
|
],
|
||||||
|
).get_by_context(context),
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ from typing import Iterable, NamedTuple, TYPE_CHECKING, cast
|
|||||||
import rich.repr
|
import rich.repr
|
||||||
from rich.style import Style
|
from rich.style import Style
|
||||||
|
|
||||||
from ._help_text import scalar_help_text
|
from ._help_text import scalar_help_text, border_property_help_text
|
||||||
from .. import log
|
from .. import log
|
||||||
from ._help_text import (
|
from ._help_text import (
|
||||||
spacing_wrong_number_of_values,
|
spacing_wrong_number_of_values,
|
||||||
@@ -188,7 +188,15 @@ class BoxProperty:
|
|||||||
_type, color = border
|
_type, color = border
|
||||||
new_value = border
|
new_value = border
|
||||||
if isinstance(color, str):
|
if isinstance(color, str):
|
||||||
new_value = (_type, Color.parse(color))
|
try:
|
||||||
|
new_value = (_type, Color.parse(color))
|
||||||
|
except ColorParseError as error:
|
||||||
|
raise StyleValueError(
|
||||||
|
str(error),
|
||||||
|
help_text=border_property_help_text(
|
||||||
|
self.name, context="inline"
|
||||||
|
),
|
||||||
|
)
|
||||||
elif isinstance(color, Color):
|
elif isinstance(color, Color):
|
||||||
new_value = (_type, color)
|
new_value = (_type, color)
|
||||||
if obj.set_rule(self.name, new_value):
|
if obj.set_rule(self.name, new_value):
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ from ._help_text import (
|
|||||||
spacing_invalid_value,
|
spacing_invalid_value,
|
||||||
string_enum_help_text,
|
string_enum_help_text,
|
||||||
color_property_help_text,
|
color_property_help_text,
|
||||||
|
border_property_help_text,
|
||||||
)
|
)
|
||||||
from .constants import (
|
from .constants import (
|
||||||
VALID_ALIGN_HORIZONTAL,
|
VALID_ALIGN_HORIZONTAL,
|
||||||
@@ -391,15 +392,14 @@ class StylesBuilder:
|
|||||||
try:
|
try:
|
||||||
border_color = Color.parse(value)
|
border_color = Color.parse(value)
|
||||||
except ColorParseError:
|
except ColorParseError:
|
||||||
# TODO: Raise specific error here
|
|
||||||
self.error(
|
self.error(
|
||||||
name, token, f"unexpected token {value!r} in declaration"
|
name, token, border_property_help_text(name, context="css")
|
||||||
)
|
)
|
||||||
|
|
||||||
elif token_name == "color":
|
elif token_name == "color":
|
||||||
border_color = Color.parse(value)
|
border_color = Color.parse(value)
|
||||||
else:
|
else:
|
||||||
self.error(name, token, f"unexpected token {value!r} in declaration")
|
self.error(name, token, border_property_help_text(name, context="css"))
|
||||||
|
|
||||||
return (border_type, border_color)
|
return (border_type, border_color)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user