refactor
This commit is contained in:
parent
f3880d77d2
commit
fb4a142c9c
8 changed files with 75 additions and 242 deletions
|
@ -14,44 +14,54 @@ pub mod components;
|
||||||
// Preludes
|
// Preludes
|
||||||
pub mod prelude {
|
pub mod prelude {
|
||||||
pub use super::color::*;
|
pub use super::color::*;
|
||||||
pub use super::primitives::Context;
|
|
||||||
pub use super::primitives::NoBrowserAppearance;
|
|
||||||
pub use super::primitives::Nothing;
|
|
||||||
pub use super::primitives::Side;
|
|
||||||
pub use super::primitives::Size;
|
|
||||||
pub use super::primitives::animation::{Animated, Animation, Delay, Duration, Scope, Timing};
|
pub use super::primitives::animation::{Animated, Animation, Delay, Duration, Scope, Timing};
|
||||||
pub use super::primitives::aspect::Aspect;
|
pub use super::primitives::background::{
|
||||||
pub use super::primitives::background::Background;
|
Background, BackgroundClip, BackgroundGradient, BackgroundOrigin, BackgroundPosition,
|
||||||
|
BackgroundRepeat, BackgroundScrollAttachment, BackgroundSize,
|
||||||
|
};
|
||||||
pub use super::primitives::border::{
|
pub use super::primitives::border::{
|
||||||
Border, BorderSide, BorderSize, BorderStyle, Outline, OutlineStyle, Ring,
|
Border, BorderSide, BorderSize, BorderStyle, Outline, OutlineStyle, Ring,
|
||||||
};
|
};
|
||||||
pub use super::primitives::container::Container;
|
pub use super::primitives::container::Container;
|
||||||
pub use super::primitives::cursor::{Action, Cursor, TouchAction};
|
pub use super::primitives::cursor::{Action, Cursor, TouchAction};
|
||||||
pub use super::primitives::display::{
|
pub use super::primitives::display::{
|
||||||
BoxDecorationBreak, BoxSizing, BreakAfter, BreakBefore, BreakInside, BreakInsideValue,
|
AlignSelf, Aspect, BoxDecorationBreak, BoxSizing, BreakAfter, BreakBefore, BreakInside,
|
||||||
BreakValue, Clear, Display, Float, ObjectFit, Overflow,
|
BreakInsideValue, BreakValue, Clear, Display, Float, JustifySelf, ObjectFit, Overflow,
|
||||||
|
PlaceSelf, ZIndex,
|
||||||
};
|
};
|
||||||
pub use super::primitives::div::Div;
|
pub use super::primitives::div::Div;
|
||||||
pub use super::primitives::filter::{
|
pub use super::primitives::filter::{
|
||||||
Blur, Brightness, Contrast, Grayscale, HueRotate, Invert, Saturate, Sepia,
|
BackgroundBlendMode, BlendMode, Blur, Brightness, Contrast, Grayscale, HueRotate, Invert,
|
||||||
|
MixBlendMode, Opacity, Saturate, Sepia,
|
||||||
};
|
};
|
||||||
pub use super::primitives::flex::{
|
pub use super::primitives::flex::{
|
||||||
Direction, Flex, FlexBasis, FlexGrow, Justify, Order, Strategy, Wrap,
|
AlignContent, AlignItems, Direction, DivideStyle, DivideWidth, Flex, FlexBasis, FlexGrow,
|
||||||
|
Justify, JustifyItems, Order, Strategy, Wrap,
|
||||||
|
};
|
||||||
|
pub use super::primitives::grid::{
|
||||||
|
Columns, Grid, GridAmount, GridAutoFlow, GridAutoSize, GridElementColumn, GridElementRow,
|
||||||
|
GridElementValue,
|
||||||
};
|
};
|
||||||
pub use super::primitives::header::Header;
|
|
||||||
pub use super::primitives::height::{Height, MaxHeight, MinHeight};
|
pub use super::primitives::height::{Height, MaxHeight, MinHeight};
|
||||||
pub use super::primitives::image::Image;
|
pub use super::primitives::image::{Image, Source, Video};
|
||||||
|
pub use super::primitives::width::{MaxWidth, MinWidth, Width};
|
||||||
|
pub use super::primitives::{Context, NoBrowserAppearance, Nothing, Side, Size, script};
|
||||||
|
// TODO :
|
||||||
|
pub use super::primitives::input::*;
|
||||||
pub use super::primitives::link::Link;
|
pub use super::primitives::link::Link;
|
||||||
|
pub use super::primitives::list::{OrderedList, UnorderedList};
|
||||||
pub use super::primitives::margin::Margin;
|
pub use super::primitives::margin::Margin;
|
||||||
pub use super::primitives::padding::Padding;
|
pub use super::primitives::padding::Padding;
|
||||||
pub use super::primitives::position::{Position, PositionKind, Resize, Resizeable};
|
pub use super::primitives::position::{
|
||||||
|
ObjectPosition, Position, PositionKind, Resize, Resizeable,
|
||||||
|
};
|
||||||
pub use super::primitives::rounded::Rounded;
|
pub use super::primitives::rounded::Rounded;
|
||||||
pub use super::primitives::script;
|
|
||||||
pub use super::primitives::scroll::{Overscroll, Scroll, SnapAlign, SnapType};
|
pub use super::primitives::scroll::{Overscroll, Scroll, SnapAlign, SnapType};
|
||||||
pub use super::primitives::shadow::Shadow;
|
pub use super::primitives::shadow::{DropShadow, Shadow};
|
||||||
pub use super::primitives::sized::Sized;
|
pub use super::primitives::sized::Sized;
|
||||||
pub use super::primitives::space::{ScreenValue, SpaceBetween};
|
pub use super::primitives::space::{Fraction, ScreenValue, SpaceBetween};
|
||||||
pub use super::primitives::svg::SVG;
|
pub use super::primitives::svg::SVG;
|
||||||
|
pub use super::primitives::table::{Caption, Header, Table, TableData, TableHead, TableRow};
|
||||||
pub use super::primitives::text::{
|
pub use super::primitives::text::{
|
||||||
AccentColor, Code, DecorationKind, DecorationStyle, DecorationThickness, LetterSpacing,
|
AccentColor, Code, DecorationKind, DecorationStyle, DecorationThickness, LetterSpacing,
|
||||||
LineClamp, LineHeight, ListStyle, NumberStyle, Paragraph, Span, Text, TextAlignment,
|
LineClamp, LineHeight, ListStyle, NumberStyle, Paragraph, Span, Text, TextAlignment,
|
||||||
|
@ -60,11 +70,10 @@ pub mod prelude {
|
||||||
VerticalTextAlignment,
|
VerticalTextAlignment,
|
||||||
};
|
};
|
||||||
pub use super::primitives::transform::{
|
pub use super::primitives::transform::{
|
||||||
RenderTransformCPU, RenderTransformGPU, Rotate, Scale, Skew, Transform, TransformOrigin,
|
RenderTransformCPU, RenderTransformGPU, Rotate, Scale, Skew, SkewValue, Transform,
|
||||||
|
TransformOrigin,
|
||||||
};
|
};
|
||||||
pub use super::primitives::visibility::Visibility;
|
pub use super::primitives::visibility::Visibility;
|
||||||
pub use super::primitives::width::{MaxWidth, MinWidth, Width};
|
|
||||||
pub use super::primitives::zindex::ZIndex;
|
|
||||||
pub use super::wrapper::{
|
pub use super::wrapper::{
|
||||||
_2XLScreen, Hover, LargeScreen, MediumScreen, Screen, SmallScreen, XLScreen,
|
_2XLScreen, Hover, LargeScreen, MediumScreen, Screen, SmallScreen, XLScreen,
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,31 +23,32 @@ pub struct AnimatedWidget {
|
||||||
animation: Option<Animation>,
|
animation: Option<Animation>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! setter {
|
||||||
|
($fnname:ident, $varname:ident, $vartype:ident, $internal_var:ident) => {
|
||||||
|
#[must_use]
|
||||||
|
pub fn $fnname(mut self, $varname: $vartype) -> Self {
|
||||||
|
self.$internal_var = $varname;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! setter_opt {
|
||||||
|
($fnname:ident, $varname:ident, $vartype:ident, $internal_var:ident) => {
|
||||||
|
#[must_use]
|
||||||
|
pub fn $fnname(mut self, $varname: $vartype) -> Self {
|
||||||
|
self.$internal_var = Some($varname);
|
||||||
|
self
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
impl AnimatedWidget {
|
impl AnimatedWidget {
|
||||||
pub fn scope(mut self, scope: Scope) -> Self {
|
setter!(scope, scope, Scope, scope);
|
||||||
self.scope = scope;
|
setter_opt!(timing, timing, Timing, timing);
|
||||||
self
|
setter_opt!(delay, delay, Delay, delay);
|
||||||
}
|
setter_opt!(duration, duration, Duration, duration);
|
||||||
|
setter_opt!(animate, animation, Animation, animation);
|
||||||
pub fn timing(mut self, timing: Timing) -> Self {
|
|
||||||
self.timing = Some(timing);
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn delay(mut self, delay: Delay) -> Self {
|
|
||||||
self.delay = Some(delay);
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn duration(mut self, duration: Duration) -> Self {
|
|
||||||
self.duration = Some(duration);
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn animate(mut self, animation: Animation) -> Self {
|
|
||||||
self.animation = Some(animation);
|
|
||||||
self
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Render for AnimatedWidget {
|
impl Render for AnimatedWidget {
|
||||||
|
|
|
@ -1,73 +0,0 @@
|
||||||
use maud::{Markup, Render, html};
|
|
||||||
|
|
||||||
use crate::ui::UIWidget;
|
|
||||||
|
|
||||||
pub struct Aspect {
|
|
||||||
kind: u8,
|
|
||||||
inner: Box<dyn UIWidget>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Aspect {
|
|
||||||
pub fn auto<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self {
|
|
||||||
kind: 0,
|
|
||||||
inner: Box::new(inner),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn square<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self {
|
|
||||||
kind: 1,
|
|
||||||
inner: Box::new(inner),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn video<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self {
|
|
||||||
kind: 2,
|
|
||||||
inner: Box::new(inner),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Render for Aspect {
|
|
||||||
fn render(&self) -> Markup {
|
|
||||||
self.render_with_class("")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl UIWidget for Aspect {
|
|
||||||
fn can_inherit(&self) -> bool {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
fn base_class(&self) -> Vec<String> {
|
|
||||||
let class = match self.kind {
|
|
||||||
0 => "aspect-auto",
|
|
||||||
1 => "aspect-square",
|
|
||||||
2 => "aspect-video",
|
|
||||||
_ => "",
|
|
||||||
};
|
|
||||||
vec![class.to_string()]
|
|
||||||
}
|
|
||||||
|
|
||||||
fn extended_class(&self) -> Vec<String> {
|
|
||||||
let mut c = self.base_class();
|
|
||||||
c.extend_from_slice(&self.inner.extended_class());
|
|
||||||
c
|
|
||||||
}
|
|
||||||
|
|
||||||
fn render_with_class(&self, class: &str) -> Markup {
|
|
||||||
if self.inner.as_ref().can_inherit() {
|
|
||||||
html! {
|
|
||||||
(self.inner.as_ref().render_with_class(&format!("{class} {}", self.base_class().join(" "))))
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
html! {
|
|
||||||
div class=(format!("{class} {}", self.base_class().join(" "))) {
|
|
||||||
(self.inner.as_ref())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -312,3 +312,23 @@ impl AlignSelf {
|
||||||
constructor!(Stretch, "self-stretch");
|
constructor!(Stretch, "self-stretch");
|
||||||
constructor!(Baseline, "self-baseline");
|
constructor!(Baseline, "self-baseline");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string_class_widget!(Aspect);
|
||||||
|
|
||||||
|
impl Aspect {
|
||||||
|
constructor!(Auto, "aspect-auto");
|
||||||
|
constructor!(Square, "aspect-square");
|
||||||
|
constructor!(Video, "aspect-video");
|
||||||
|
}
|
||||||
|
|
||||||
|
string_class_widget!(ZIndex);
|
||||||
|
|
||||||
|
impl ZIndex {
|
||||||
|
constructor!(Auto, "z-auto");
|
||||||
|
constructor!(Zero, "z-0");
|
||||||
|
constructor!(One, "z-10");
|
||||||
|
constructor!(Two, "z-20");
|
||||||
|
constructor!(Three, "z-30");
|
||||||
|
constructor!(Four, "z-40");
|
||||||
|
constructor!(Five, "z-50");
|
||||||
|
}
|
||||||
|
|
|
@ -1,40 +0,0 @@
|
||||||
use maud::{Markup, Render, html};
|
|
||||||
|
|
||||||
use crate::ui::UIWidget;
|
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
|
||||||
pub fn Header<T: UIWidget + 'static>(inner: T) -> HeaderWidget {
|
|
||||||
HeaderWidget(Box::new(inner))
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct HeaderWidget(Box<dyn UIWidget>);
|
|
||||||
|
|
||||||
impl Render for HeaderWidget {
|
|
||||||
fn render(&self) -> Markup {
|
|
||||||
self.render_with_class("")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl UIWidget for HeaderWidget {
|
|
||||||
fn can_inherit(&self) -> bool {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
fn base_class(&self) -> Vec<String> {
|
|
||||||
vec![]
|
|
||||||
}
|
|
||||||
|
|
||||||
fn extended_class(&self) -> Vec<String> {
|
|
||||||
let mut c = self.base_class();
|
|
||||||
c.extend_from_slice(&self.0.extended_class());
|
|
||||||
c
|
|
||||||
}
|
|
||||||
|
|
||||||
fn render_with_class(&self, class: &str) -> Markup {
|
|
||||||
html! {
|
|
||||||
header class=(class) {
|
|
||||||
(self.0.as_ref())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,7 +2,6 @@ use super::UIWidget;
|
||||||
use maud::{Markup, PreEscaped, Render, html};
|
use maud::{Markup, PreEscaped, Render, html};
|
||||||
|
|
||||||
pub mod animation;
|
pub mod animation;
|
||||||
pub mod aspect;
|
|
||||||
pub mod background;
|
pub mod background;
|
||||||
pub mod border;
|
pub mod border;
|
||||||
pub mod container;
|
pub mod container;
|
||||||
|
@ -12,7 +11,6 @@ pub mod div;
|
||||||
pub mod filter;
|
pub mod filter;
|
||||||
pub mod flex;
|
pub mod flex;
|
||||||
pub mod grid;
|
pub mod grid;
|
||||||
pub mod header;
|
|
||||||
pub mod height;
|
pub mod height;
|
||||||
pub mod image;
|
pub mod image;
|
||||||
pub mod input;
|
pub mod input;
|
||||||
|
@ -32,7 +30,6 @@ pub mod text;
|
||||||
pub mod transform;
|
pub mod transform;
|
||||||
pub mod visibility;
|
pub mod visibility;
|
||||||
pub mod width;
|
pub mod width;
|
||||||
pub mod zindex;
|
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
#[allow(non_snake_case)]
|
||||||
#[must_use]
|
#[must_use]
|
||||||
|
|
|
@ -202,3 +202,4 @@ macro_rules! element_widget {
|
||||||
element_widget!(TableRow, TableRowWidget, tr);
|
element_widget!(TableRow, TableRowWidget, tr);
|
||||||
element_widget!(TableHead, TableHeadWidget, th);
|
element_widget!(TableHead, TableHeadWidget, th);
|
||||||
element_widget!(TableData, TableDataWidget, td);
|
element_widget!(TableData, TableDataWidget, td);
|
||||||
|
element_widget!(Header, HeaderWidget, header);
|
||||||
|
|
|
@ -1,82 +0,0 @@
|
||||||
use maud::{Markup, Render, html};
|
|
||||||
|
|
||||||
use crate::ui::UIWidget;
|
|
||||||
|
|
||||||
pub struct ZIndex(Box<dyn UIWidget>, u8);
|
|
||||||
|
|
||||||
impl Render for ZIndex {
|
|
||||||
fn render(&self) -> Markup {
|
|
||||||
self.render_with_class("")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ZIndex {
|
|
||||||
pub fn auto<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self(Box::new(inner), 0)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn zero<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self(Box::new(inner), 1)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn one<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self(Box::new(inner), 2)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn two<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self(Box::new(inner), 3)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn three<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self(Box::new(inner), 4)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn four<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self(Box::new(inner), 5)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn five<T: UIWidget + 'static>(inner: T) -> Self {
|
|
||||||
Self(Box::new(inner), 6)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl UIWidget for ZIndex {
|
|
||||||
fn can_inherit(&self) -> bool {
|
|
||||||
true
|
|
||||||
}
|
|
||||||
|
|
||||||
fn base_class(&self) -> Vec<String> {
|
|
||||||
let class = match self.1 {
|
|
||||||
0 => "z-auto",
|
|
||||||
1 => "z-0",
|
|
||||||
2 => "z-10",
|
|
||||||
3 => "z-20",
|
|
||||||
4 => "z-30",
|
|
||||||
5 => "z-40",
|
|
||||||
6 => "z-50",
|
|
||||||
_ => "z-auto",
|
|
||||||
};
|
|
||||||
|
|
||||||
vec![class.to_string()]
|
|
||||||
}
|
|
||||||
|
|
||||||
fn extended_class(&self) -> Vec<String> {
|
|
||||||
let mut c = self.base_class();
|
|
||||||
c.extend_from_slice(&self.0.extended_class());
|
|
||||||
c
|
|
||||||
}
|
|
||||||
|
|
||||||
fn render_with_class(&self, class: &str) -> Markup {
|
|
||||||
if self.0.as_ref().can_inherit() {
|
|
||||||
self.0
|
|
||||||
.as_ref()
|
|
||||||
.render_with_class(&format!("{} {class}", self.base_class().join(" ")))
|
|
||||||
} else {
|
|
||||||
html! {
|
|
||||||
div class=(format!("{} {class}", self.base_class().join(" "))) {
|
|
||||||
(self.0.as_ref())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue