A repo for my personal website
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Adding in code to generate boilerplate stuff for website

+174
+174
src/lib.rs
··· 1 1 use wasm_bindgen::prelude::*; 2 + use web_sys; 2 3 3 4 #[wasm_bindgen] 4 5 extern { ··· 8 9 #[wasm_bindgen] 9 10 pub fn greet(name: &str) { 10 11 alert(&format!("Hello, {}!", name)); 12 + } 13 + 14 + fn create_nav1_link(document: &web_sys::Document, ul: &web_sys::Element, loc: &str, i18n: &str, text: &str) -> Result<(), JsValue> { 15 + let li = document.create_element("li")?; 16 + let li_a = document.create_element("a")?; 17 + li_a.set_attribute("href", loc)?; 18 + li_a.set_class_name("selected"); 19 + li_a.set_attribute("data-i18n", i18n)?; 20 + li_a.set_text_content(Some(text)); 21 + let li_a_node = web_sys::Node::from(li_a); 22 + li.append_child(&li_a_node)?; 23 + let li_node = web_sys::Node::from(li); 24 + ul.append_child(&li_node)?; 25 + 26 + Ok(()) 27 + } 28 + 29 + fn create_nav2_link(document: &web_sys::Document, ul: &web_sys::Element, loc: &str, is_mastodon: bool, text: &str, i18n: &str) -> Result<(), JsValue> { 30 + let li = document.create_element("li")?; 31 + let li_a = document.create_element("a")?; 32 + li_a.set_attribute("href", loc)?; 33 + li_a.set_attribute("data-i18n", i18n)?; 34 + li_a.set_attribute("target", "_blank")?; 35 + 36 + if is_mastodon { 37 + li_a.set_attribute("rel", "me")?; 38 + } else { 39 + li_a.set_attribute("rel", "noopener noreferrer")?; 40 + } 41 + 42 + li_a.set_text_content(Some(text)); 43 + let li_a_node = web_sys::Node::from(li_a); 44 + li.append_child(&li_a_node)?; 45 + let li_node = web_sys::Node::from(li); 46 + ul.append_child(&li_node)?; 47 + 48 + Ok(()) 49 + } 50 + 51 + fn gen_nav(document: &web_sys::Document, body: &web_sys::HtmlElement) -> Result<(), JsValue> { 52 + let val = document.create_element("a")?; 53 + val.set_attribute("href", "#cd-nav")?; 54 + val.set_class_name("cd-nav-trigger"); 55 + val.set_text_content(Some("Menu")); 56 + 57 + let val2 = document.create_element("span")?; 58 + val2.set_class_name("cd-nav-icon"); 59 + let val2_node = web_sys::Node::from(val2); 60 + val.append_child(&val2_node)?; 61 + 62 + let val3 = document.create_element("svg")?; 63 + val3.set_attribute("x", "0px")?; 64 + val3.set_attribute("y", "0px")?; 65 + val3.set_attribute("width", "54px")?; 66 + val3.set_attribute("height", "54px")?; 67 + val3.set_attribute("viewBox", "0 0 54 54")?; 68 + 69 + let val3_circle = document.create_element("circle")?; 70 + val3_circle.set_attribute("fill", "transparent")?; 71 + val3_circle.set_attribute("stroke", "#90D4C5")?; 72 + val3_circle.set_attribute("stroke-width", "2")?; 73 + val3_circle.set_attribute("cx", "27")?; 74 + val3_circle.set_attribute("cy", "27")?; 75 + val3_circle.set_attribute("r", "25")?; 76 + val3_circle.set_attribute("stroke-dasharray", "157 157")?; 77 + val3_circle.set_attribute("stroke-dashoffset", "157")?; 78 + let val3_circle_node = web_sys::Node::from(val3_circle); 79 + val3.append_child(&val3_circle_node)?; 80 + 81 + let val3_node = web_sys::Node::from(val3); 82 + val.append_child(&val3_node)?; 83 + 84 + let nav = document.create_element("div")?; 85 + nav.set_id("cd-nav"); 86 + nav.set_class_name("cd-nav"); 87 + 88 + let nav_wrapper = document.create_element("div")?; 89 + nav_wrapper.set_class_name("cd-navigation-wrapper"); 90 + 91 + let nav_half_block_one = document.create_element("div")?; 92 + nav_half_block_one.set_class_name("cd-half-block"); 93 + 94 + let nav_half_block_one_nav = document.create_element("nav")?; 95 + 96 + let nav_half_block_one_nav_ul = document.create_element("ul")?; 97 + nav_half_block_one_nav_ul.set_class_name("cd-primary-nav"); 98 + 99 + create_nav1_link(document, &nav_half_block_one_nav_ul, "index.html", "[html]menu.showcase", "Showcase")?; 100 + create_nav1_link(document, &nav_half_block_one_nav_ul, "blog.html", "[html]menu.blog", "Blog")?; 101 + create_nav1_link(document, &nav_half_block_one_nav_ul, "about.html", "[html]menu.about", "About")?; 102 + create_nav1_link(document, &nav_half_block_one_nav_ul, "contact.html", "[html]menu.contact", "Contact")?; 103 + 104 + let nav_half_block_one_nav_ul_node = web_sys::Node::from(nav_half_block_one_nav_ul); 105 + nav_half_block_one_nav.append_child(&nav_half_block_one_nav_ul_node)?; 106 + 107 + let nav_half_block_one_nav_node = web_sys::Node::from(nav_half_block_one_nav); 108 + nav_half_block_one.append_child(&nav_half_block_one_nav_node)?; 109 + 110 + let nav_half_block_one_node = web_sys::Node::from(nav_half_block_one); 111 + nav_wrapper.append_child(&nav_half_block_one_node)?; 112 + 113 + let nav_half_block_two = document.create_element("div")?; 114 + nav_half_block_two.set_class_name("cd-half-block"); 115 + 116 + let nav_half_block_two_address = document.create_element("address")?; 117 + 118 + let nav_half_block_two_address_ul_one = document.create_element("ul")?; 119 + nav_half_block_two_address_ul_one.set_class_name("cd-contact-info"); 120 + 121 + let nav_half_block_two_address_ul_one_li = document.create_element("li")?; 122 + 123 + let nav_half_block_two_address_ul_one_li_a = document.create_element("a")?; 124 + nav_half_block_two_address_ul_one_li_a.set_attribute("href", "mailto:cityboundforest@gmail.com")?; 125 + let nav_half_block_two_address_ul_one_li_a_node = web_sys::Node::from(nav_half_block_two_address_ul_one_li_a); 126 + nav_half_block_two_address_ul_one_li.append_child(&nav_half_block_two_address_ul_one_li_a_node)?; 127 + let nav_half_block_two_address_ul_one_li_node = web_sys::Node::from(nav_half_block_two_address_ul_one_li); 128 + nav_half_block_two_address_ul_one.append_child(&nav_half_block_two_address_ul_one_li_node)?; 129 + 130 + let nav_half_block_two_address_ul_one_node = web_sys::Node::from(nav_half_block_two_address_ul_one); 131 + nav_half_block_two_address.append_child(&nav_half_block_two_address_ul_one_node)?; 132 + 133 + let nav_half_block_two_address_ul_two = document.create_element("ul")?; 134 + nav_half_block_two_address_ul_two.set_class_name("cd-contact-socials"); 135 + 136 + create_nav2_link(document, &nav_half_block_two_address_ul_two, "https://instagram.com/cityboundforest", false, "Instagram", "[html]socials.instagram")?; 137 + create_nav2_link(document, &nav_half_block_two_address_ul_two, "https://twitter.com/cityboundforest", false, "Twitter", "[html]socials.twitter")?; 138 + create_nav2_link(document, &nav_half_block_two_address_ul_two, "https://facebook.com/cityboundforest", false, "Facebook", "[html]socials.facebook")?; 139 + create_nav2_link(document, &nav_half_block_two_address_ul_two, "https://youtube.com/channel/UCexbz2BYv_lMY1PP_Pdf7_g", false, "YouTube", "[html]socials.youtube")?; 140 + create_nav2_link(document, &nav_half_block_two_address_ul_two, "https://tiktok.com/@cityboundforest", false, "TikTok", "[html]socials.tiktok")?; 141 + create_nav2_link(document, &nav_half_block_two_address_ul_two, "https://twitch.tv/cityboundforest", false, "Twitch", "[html]socials.twitch")?; 142 + create_nav2_link(document, &nav_half_block_two_address_ul_two, "https://mastodon.social/@cityboundforest", true, "Mastodon", "[html]socials.mastodon")?; 143 + 144 + let nav_half_block_two_address_ul_two_node = web_sys::Node::from(nav_half_block_two_address_ul_two); 145 + nav_half_block_two_address.append_child(&nav_half_block_two_address_ul_two_node)?; 146 + 147 + let nav_half_block_two_address_node = web_sys::Node::from(nav_half_block_two_address); 148 + nav_half_block_two.append_child(&nav_half_block_two_address_node)?; 149 + 150 + let nav_half_block_two_node = web_sys::Node::from(nav_half_block_two); 151 + nav_wrapper.append_child(&nav_half_block_two_node)?; 152 + 153 + let nav_wrapper_node = web_sys::Node::from(nav_wrapper); 154 + nav.append_child(&nav_wrapper_node)?; 155 + 156 + body.append_child(&val)?; 157 + body.append_child(&nav)?; 158 + 159 + Ok(()) 160 + } 161 + 162 + fn gen_scripts(document: &web_sys::Document, body: &web_sys::HtmlElement) -> Result<(), JsValue> { 163 + for script in ["scripts/jquery-2.1.4.min.js", "scripts/jquery.fitvids.js", "scripts/jquery.imagesloaded.min.js", "scripts/jquery_i18n/CLDRPluralRuleParser.js", "scripts/jquery_i18n/jquery.i18n.js", "scripts/jquery_i18n/jquery.i18n.messagestore.js", "scripts/jquery_i18n/jquery.i18n.fallbacks.js", "scripts/jquery_i18n/jquery.i18n.language.js", "scripts/jquery_i18n/jquery.i18n.parser.js", "scripts/jquery_i18n/jquery.i18n.emitter.js", "scripts/jquery_i18n/jquery.i18n.emitter.bidi.js", "scripts/showdown.min.js", "scripts/lang.js"] { 164 + let s = document.create_element("script")?; 165 + s.set_attribute("src", script)?; 166 + body.append_child(&s)?; 167 + } 168 + 169 + Ok(()) 170 + } 171 + 172 + #[wasm_bindgen(start)] 173 + pub fn main() -> Result<(), JsValue> { 174 + let window = web_sys::window().expect("no global `window` exists"); 175 + let document = window.document().expect("should have a document on window"); 176 + let body = document.body().expect("document should have a body"); 177 + 178 + gen_nav(&document, &body)?; 179 + 180 + // gen_site_container()?; 181 + 182 + gen_scripts(&document, &body)?; 183 + 184 + Ok(()) 11 185 }