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
use azul_core::{
dom::{Dom, DomString, TabIndex},
app_resources::ImageId,
};
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
pub struct Button {
pub content: ButtonContent,
}
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
pub enum ButtonContent {
Image(ImageId),
Text(DomString),
}
impl Button {
pub fn with_label<S: Into<DomString>>(text: S) -> Self {
Self {
content: ButtonContent::Text(text.into()),
}
}
pub fn with_image(image: ImageId) -> Self {
Self {
content: ButtonContent::Image(image),
}
}
pub fn dom(self) -> Dom {
use self::ButtonContent::*;
let mut button_root = Dom::div()
.with_class("__azul-native-button")
.with_tab_index(TabIndex::Auto);
button_root.add_child(match self.content {
Text(s) => Dom::label(s),
Image(i) => Dom::image(i),
});
button_root
}
}
#[test]
fn test_button_ui_1() {
struct Mock;
let expected_html = "<div class=\"__azul-native-button\" tabindex=\"0\">\r\n <p>\r\n Hello\r\n </p>\r\n</div>";
let button: Dom<Mock> = Button::with_label("Hello").dom();
let button_html = button.get_html_string();
if expected_html != button_html {
panic!("expected:\r\n{}\r\ngot:\r\n{}", expected_html, button_html);
}
}