Advertisement
1init

Untitled

Jan 10th, 2020
739
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 3.58 KB | None | 0 0
  1. se seed::{*, prelude::*};
  2.  
  3. // Model
  4.  
  5. struct Model {
  6.     count: i32,
  7.     what_we_count: String,
  8.     change_lang: i32,
  9. }
  10.  
  11. // Setup a default here, for initialization later.
  12. impl Default for Model {
  13.     fn default() -> Self {
  14.         Self {
  15.             count: 0,
  16.             what_we_count: "click".into(),
  17.             change_lang: 1,
  18.         }
  19.     }
  20. }
  21.  
  22.  
  23. // Update
  24.  
  25. #[derive(Clone)]
  26. enum Msg {
  27.     Increment,
  28.     Decrement,
  29.     ChangeWWC(String),
  30.     ChangeLangENG,
  31.     ChangeLangUKR,
  32.     ChangeLangRUS,
  33. }
  34.  
  35. /// How we update the model
  36. fn update(msg: Msg, model: &mut Model, _orders: &mut impl Orders<Msg>) {
  37.     match msg {
  38.         Msg::Increment => model.count += 1,
  39.         Msg::Decrement => model.count -= 1,
  40.         Msg::ChangeWWC(what_we_count) => model.what_we_count = what_we_count,
  41.         Msg::ChangeLangENG => model.change_lang = 1,
  42.         Msg::ChangeLangUKR => model.change_lang = 2,
  43.         Msg::ChangeLangRUS => model.change_lang = 3,
  44.     }
  45. }
  46.  
  47.  
  48. // View
  49.  
  50. /// A simple component.
  51. fn success_level(clicks: i32) -> Node<Msg> {
  52.     let descrip = match clicks {
  53.         0 ..= 5 => "Not very many ๐Ÿ™",
  54.         6 ..= 9 => "I got my first real six-string ๐Ÿ˜",
  55.         10 ..= 11 => "Spinal Tap ๐Ÿ™‚",
  56.         _ => "Double pendulum ๐Ÿ™ƒ"
  57.     };
  58.     p![ descrip ]
  59. }
  60.  
  61. fn langauge_settings_header(change_lang: i32) -> Node<Msg> {
  62.     let langy = match change_lang {
  63.         2 => "ะŸั€ะธะฒั–ั‚",
  64.         3 => "ะ—ะดั€ะฐะฒัั‚ะฒัƒะนั‚ะต",
  65.         _ => "Hello",
  66.     };
  67.     p![langy]
  68. }
  69.  
  70. fn langauge_settings_main(change_lang: i32) -> Node<Msg> {
  71.     let langy = match change_lang {
  72.         2 => "ัะบ ั‚ะธ",
  73.         3 => "ะšะฐะบ ั‚ั‹",
  74.         _ => "How are you?",
  75.     };
  76.     p![langy]
  77. }
  78.  
  79. /// The top-level component we pass to the virtual dom.
  80. fn view(model: &Model) -> impl View<Msg> {
  81.     let plural = if model.count == 1 {""} else {"s"};
  82.  
  83.     // Attrs, Style, Events, and children may be defined separately.
  84.     let outer_style = style!{
  85.             St::Display => "flex";
  86.             St::FlexDirection => "column";
  87.             St::TextAlign => "center"
  88.     };
  89.  
  90.     div![ outer_style,
  91.         h1![langauge_settings_header(model.change_lang)],
  92.         div![
  93.             style!{
  94.                 // Example of conditional logic in a style.
  95.                 St::Color => if model.count > 4 {"purple"} else {"gray"};
  96.                 St::Border => "2px solid #004422";
  97.                 St::Padding => unit!(20, px);
  98.             },
  99.             // We can use normal Rust code and comments in the view.
  100.             h3![ format!("{} {}{} so far", model.count, model.what_we_count, plural) ],
  101.             button![ simple_ev(Ev::Click, Msg::Increment), "+" ],
  102.             button![ simple_ev(Ev::Click, Msg::Decrement), "-" ],
  103.             button![ simple_ev(Ev::Click, Msg::ChangeLangENG), "Eng" ],
  104.             button![ simple_ev(Ev::Click, Msg::ChangeLangUKR), "ukr" ],
  105.             button![ simple_ev(Ev::Click, Msg::ChangeLangRUS), "Rus" ],
  106.            
  107.  
  108.             // Optionally-displaying an element
  109.             h2![langauge_settings_main(model.change_lang)],
  110.             if model.count >= 10 { h2![ style!{St::Padding => px(50)}, "Nice!" ] } else { empty![] }
  111.         ],
  112.         success_level(model.count),  // Incorporating a separate component
  113.         langauge_settings_header(model.change_lang),
  114.         h3![ "What are we counting?" ],
  115.         input![ attrs!{At::Value => model.what_we_count}, input_ev(Ev::Input, Msg::ChangeWWC) ],
  116.     ]
  117. }
  118.  
  119.  
  120. #[wasm_bindgen(start)]
  121. pub fn render() {
  122.     App::builder(update, view)
  123.         .build_and_start();
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement