docs: more example
This commit is contained in:
1 parent
891e366cd8
commit
a4bf3d9862
1 file changed
+24
-22
+24
-22
@@ -31,13 +31,12 @@ static App: FC<()> = |cx| {
|
|||||||
|
|
||||||
cx.render(rsx! {
|
cx.render(rsx! {
|
||||||
div { class: "calculator", onkeydown: move |evt| calc.get_mut().handle_keydown(evt),
|
div { class: "calculator", onkeydown: move |evt| calc.get_mut().handle_keydown(evt),
|
||||||
div { class: "calculator-display","{formatted}"}
|
div { class: "calculator-display", "{formatted}" }
|
||||||
div { class: "input-keys"
|
div { class: "input-keys"
|
||||||
div { class: "function-keys"
|
div { class: "function-keys"
|
||||||
// All there ways that the calculator may be modified:
|
CalculatorKey { name: "key-clear", onclick: move |_| calc.get_mut().clear_display(), "{clear_text}" }
|
||||||
CalculatorKey { name: "key-clear", onclick: move |_| calc.get_mut().clear_display() "{clear_text}" }
|
CalculatorKey { name: "key-sign", onclick: move |_| calc.get_mut().toggle_sign(), "±"}
|
||||||
CalculatorKey { name: "key-sign", onclick: move |_| calc.modify(Calculator::toggle_sign), "±"}
|
CalculatorKey { name: "key-percent", onclick: move |_| calc.get_mut().toggle_percent(), "%"}
|
||||||
CalculatorKey { name: "key-percent", onclick: move |_| calc.modify(|f| f.toggle_percent()) "%"}
|
|
||||||
}
|
}
|
||||||
div { class: "digit-keys"
|
div { class: "digit-keys"
|
||||||
CalculatorKey { name: "key-0", onclick: move |_| calc.get_mut().input_digit(0), "0" }
|
CalculatorKey { name: "key-0", onclick: move |_| calc.get_mut().input_digit(0), "0" }
|
||||||
@@ -58,12 +57,29 @@ static App: FC<()> = |cx| {
|
|||||||
})
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#[derive(Props)]
|
||||||
|
struct CalculatorKeyProps<'a> {
|
||||||
|
name: &'static str,
|
||||||
|
onclick: &'a dyn Fn(MouseEvent),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn CalculatorKey<'a>(cx: Context<'a, CalculatorKeyProps>) -> VNode<'a> {
|
||||||
|
cx.render(rsx! {
|
||||||
|
button {
|
||||||
|
class: "calculator-key {cx.name}"
|
||||||
|
onclick: {cx.onclick}
|
||||||
|
{cx.children()}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
struct Calculator {
|
struct Calculator {
|
||||||
display_value: String,
|
display_value: String,
|
||||||
operator: Option<Operator>,
|
operator: Option<Operator>,
|
||||||
cur_val: f64,
|
cur_val: f64,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
enum Operator {
|
enum Operator {
|
||||||
Add,
|
Add,
|
||||||
@@ -116,7 +132,9 @@ impl Calculator {
|
|||||||
self.display_value = format!("-{}", self.display_value);
|
self.display_value = format!("-{}", self.display_value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fn toggle_percent(&mut self) {}
|
fn toggle_percent(&mut self) {
|
||||||
|
self.display_value = (self.display_value.parse::<f64>().unwrap() / 100.0).to_string();
|
||||||
|
}
|
||||||
fn backspace(&mut self) {
|
fn backspace(&mut self) {
|
||||||
if !self.display_value.as_str().eq("0") {
|
if !self.display_value.as_str().eq("0") {
|
||||||
self.display_value.pop();
|
self.display_value.pop();
|
||||||
@@ -146,19 +164,3 @@ impl Calculator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Props)]
|
|
||||||
struct CalculatorKeyProps<'a> {
|
|
||||||
name: &'static str,
|
|
||||||
onclick: &'a dyn Fn(MouseEvent),
|
|
||||||
}
|
|
||||||
|
|
||||||
fn CalculatorKey<'a, 'r>(cx: Context<'a, CalculatorKeyProps<'r>>) -> VNode<'a> {
|
|
||||||
cx.render(rsx! {
|
|
||||||
button {
|
|
||||||
class: "calculator-key {cx.name}"
|
|
||||||
onclick: {cx.onclick}
|
|
||||||
{cx.children()}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user