From 17050ed4d6cd5d30bee42b29bfab113becbabd8f Mon Sep 17 00:00:00 2001 From: Savanni D'Gerinel Date: Thu, 20 Apr 2023 11:07:41 -0400 Subject: [PATCH] Demo wasm build. First ever PWA app. --- kifu/kifu-pwa/converter.css | 38 ++++++++++++++++++++++++++++++++ kifu/kifu-pwa/converter.js | 42 ++++++++++++++++++++++++++++++++++++ kifu/kifu-pwa/icon512.png | Bin 0 -> 23484 bytes kifu/kifu-pwa/index.html | 36 +++++++++++++++++++++++++++++++ kifu/kifu-pwa/manifest.json | 17 +++++++++++++++ kifu/kifu-pwa/sw.js | 29 +++++++++++++++++++++++++ kifu/kifu-wasm/Cargo.toml | 12 +++++++++++ kifu/kifu-wasm/src/lib.rs | 14 ++++++++++++ 8 files changed, 188 insertions(+) create mode 100644 kifu/kifu-pwa/converter.css create mode 100644 kifu/kifu-pwa/converter.js create mode 100644 kifu/kifu-pwa/icon512.png create mode 100644 kifu/kifu-pwa/index.html create mode 100644 kifu/kifu-pwa/manifest.json create mode 100644 kifu/kifu-pwa/sw.js create mode 100644 kifu/kifu-wasm/Cargo.toml create mode 100644 kifu/kifu-wasm/src/lib.rs diff --git a/kifu/kifu-pwa/converter.css b/kifu/kifu-pwa/converter.css new file mode 100644 index 0000000..401fef8 --- /dev/null +++ b/kifu/kifu-pwa/converter.css @@ -0,0 +1,38 @@ +html { + background: rgb(243, 243, 243); + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + font-size: 15pt; +} + +html, body { + height: 100%; + margin: 0; +} + +body { + display: grid; + place-items: center; +} + +#converter { + width: 15rem; + padding: 2rem; + border-radius: .5rem; + box-shadow: 0 0 2rem 0 #0001; + display: flex; + flex-direction: column; + align-items: center; +} + +#converter input, #converter select { + font-family: inherit; + font-size: inherit; + margin-block-end: 1rem; + text-align: center; + width: 10rem; +} + +#converter #output-temp { + font-size: 2rem; + font-weight: bold; +} diff --git a/kifu/kifu-pwa/converter.js b/kifu/kifu-pwa/converter.js new file mode 100644 index 0000000..a28fa83 --- /dev/null +++ b/kifu/kifu-pwa/converter.js @@ -0,0 +1,42 @@ +const inputField = document.getElementById('input-temp'); +const fromUnitField = document.getElementById('input-unit'); +const toUnitField = document.getElementById('output-unit'); +const outputField = document.getElementById('output-temp'); +const form = document.getElementById('converter'); + +function convertTemp(value, fromUnit, toUnit) { + if (fromUnit === 'c') { + if (toUnit === 'f') { + return value * 9 / 5 + 32; + } else if (toUnit === 'k') { + return value + 273.15; + } + return value + } + if (fromUnit === 'f') { + if (toUnit === 'c') { + return (value - 32) * 5 / 9; + } else if (toUnit === 'k') { + return (value + 459.67) * 5 / 9; + } + return value; + } + if (fromUnit === 'k') { + if (toUnit === 'c') { + return value - 273.15; + } else if (toUnit === 'f') { + return value * 9 / 5 - 459.67; + } + return value; + } + throw new Error('Invalid unit'); +} + +form.addEventListener('input', () => { + const inputTemp = parseFloat(inputField.value); + const fromUnit = fromUnitField.value; + const toUnit = toUnitField.value; + + const outputTemp = convertTemp(inputTemp, fromUnit, toUnit); + outputField.value = (Math.round(outputTemp * 100) / 100) + ' ' + toUnit.toUpperCase(); +}); diff --git a/kifu/kifu-pwa/icon512.png b/kifu/kifu-pwa/icon512.png new file mode 100644 index 0000000000000000000000000000000000000000..3f46c9d48580e65122fa2b570ad5b7978637c7ac GIT binary patch literal 23484 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 I?Qr6M04uw33IG5A literal 0 HcmV?d00001 diff --git a/kifu/kifu-pwa/index.html b/kifu/kifu-pwa/index.html new file mode 100644 index 0000000..57389ec --- /dev/null +++ b/kifu/kifu-pwa/index.html @@ -0,0 +1,36 @@ + + + + + + + Temperature converter + + +

Temperature Converter

+
+ + + + + + + 68 F +
+ + + + + diff --git a/kifu/kifu-pwa/manifest.json b/kifu/kifu-pwa/manifest.json new file mode 100644 index 0000000..6a4dec4 --- /dev/null +++ b/kifu/kifu-pwa/manifest.json @@ -0,0 +1,17 @@ +{ + "lang": "en-us", + "name": "Temperature converter app", + "short_name": "Temperature converter", + "description": "A basic temperature converter application", + "start_url": "/", + "background_color": "#2f3d58", + "theme_color": "#2f3d58", + "orientation": "any", + "display": "standalone", + "icons": [ + { + "src": "/icon512.png", + "sizes": "512x512" + } + ] +} diff --git a/kifu/kifu-pwa/sw.js b/kifu/kifu-pwa/sw.js new file mode 100644 index 0000000..8d6f105 --- /dev/null +++ b/kifu/kifu-pwa/sw.js @@ -0,0 +1,29 @@ +const CACHE_NAME = 'temperature-converter-v1'; + +self.addEventListener('install', event => { + event.waitUntil((async () => { + const cache = await caches.open(CACHE_NAME); + cache.addAll([ + '/', + '/converter.js', + '/converter.css', + ]); + })()); +}); + +self.addEventListener('fetch', event => { + event.respondWith((async () => { + const cache = await caches.open(CACHE_NAME); + const cachedResponse = await cache.match(event.request); + if (cachedResponse) { + return cachedResponse; + } else { + try { + const fetchResponse = await fetch(event.request); + cache.put(event.request, fetchResponse.clone()); + return fetchResponse; + } catch (e) { + } + } + })()); +}); diff --git a/kifu/kifu-wasm/Cargo.toml b/kifu/kifu-wasm/Cargo.toml new file mode 100644 index 0000000..33b339f --- /dev/null +++ b/kifu/kifu-wasm/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "kifu-wasm" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[lib] +crate-type = ["cdylib"] + +[dependencies] +wasm-bindgen = "0.2" diff --git a/kifu/kifu-wasm/src/lib.rs b/kifu/kifu-wasm/src/lib.rs new file mode 100644 index 0000000..7d12d9a --- /dev/null +++ b/kifu/kifu-wasm/src/lib.rs @@ -0,0 +1,14 @@ +pub fn add(left: usize, right: usize) -> usize { + left + right +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn it_works() { + let result = add(2, 2); + assert_eq!(result, 4); + } +}