freya_devtools_app/components/
attribute.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
use freya::prelude::*;
use freya_devtools::AttributeType;

use crate::property::{
    BorderProperty,
    ColorProperty,
    GradientProperty,
    Property,
    ShadowProperty,
    TextShadowProperty,
};

pub fn attribute_element(i: usize, name: &str, attribute: AttributeType<'_>) -> Option<Element> {
    let element = match attribute {
        AttributeType::Measure(measure) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: measure.to_string()
                }
            }
        }
        AttributeType::OptionalMeasure(measure) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: measure.map(|measure| measure.to_string()).unwrap_or_else(|| "inherit".to_string())
                }
            }
        }
        AttributeType::Measures(measures) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: measures.pretty()
                }
            }
        }
        AttributeType::CornerRadius(radius) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: radius.pretty()
                }
            }
        }
        AttributeType::Size(size) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: size.pretty()
                }
            }
        }
        AttributeType::VisibleSize(visible_size) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: visible_size.pretty()
                }
            }
        }
        AttributeType::Color(fill) => {
            rsx! {
                ColorProperty {
                    key: "{i}",
                    name: "{name}",
                    fill: fill.clone()
                }
            }
        }
        AttributeType::OptionalColor(fill) => {
            if let Some(fill) = fill {
                rsx! {
                    ColorProperty {
                        key: "{i}",
                        name: "{name}",
                        fill: fill.clone()
                    }
                }
            } else {
                return None;
            }
        }
        AttributeType::Gradient(fill) => {
            rsx! {
                GradientProperty {
                    key: "{i}",
                    name: "{name}",
                    fill: fill.clone()
                }
            }
        }
        AttributeType::Border(border) => {
            rsx! {
                BorderProperty {
                    key: "{i}",
                    name: "{name}",
                    border: border.clone()
                }
            }
        }
        AttributeType::Text(text) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: text.to_string()
                }
            }
        }
        AttributeType::Direction(direction) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: direction.pretty()
                }
            }
        }
        AttributeType::Position(position) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: position.pretty()
                }
            }
        }
        AttributeType::Content(content) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: content.pretty()
                }
            }
        }
        AttributeType::Alignment(alignment) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: alignment.pretty()
                }
            }
        }
        AttributeType::Shadow(shadow) => {
            rsx! {
                ShadowProperty {
                    key: "{i}",
                    name: "{name}",
                    shadow: shadow.clone()
                }
            }
        }
        AttributeType::TextShadow(text_shadow) => {
            rsx! {
                TextShadowProperty {
                    key: "{i}",
                    name: "{name}",
                    text_shadow: *text_shadow
                }
            }
        }
        AttributeType::TextAlignment(text_align) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: text_align.pretty()
                }
            }
        }
        AttributeType::TextOverflow(text_overflow) => {
            rsx! {
                Property {
                    key: "{i}",
                    name: "{name}",
                    value: text_overflow.pretty()
                }
            }
        }
    };

    Some(element)
}