From ad8cd4339bf77996c4d6bc7d2fab713eb1929242 Mon Sep 17 00:00:00 2001 From: Iaphetes Date: Wed, 13 Nov 2024 22:06:28 +0100 Subject: [PATCH] worked on theming and image support --- src-tauri/Cargo.lock | 307 +++++++++++++++++++++++++++- src-tauri/Cargo.toml | 1 + src-tauri/capabilities/default.json | 5 +- src-tauri/src/lib.rs | 26 ++- src-tauri/tauri.conf.json | 1 + src/index.html | 5 +- src/main.js | 9 +- src/styles.css | 111 ++++------ 8 files changed, 372 insertions(+), 93 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 7ce9967..a0be2cb 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -17,6 +17,17 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom 0.2.15", + "once_cell", + "version_check", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -47,6 +58,23 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_logger" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b07e8e73d720a1f2e4b6014766e6039fd2e96a4fa44e2a78d0e1fa2ff49826" +dependencies = [ + "android_log-sys", + "env_filter", + "log", +] + [[package]] name = "android_system_properties" version = "0.1.5" @@ -121,9 +149,16 @@ dependencies = [ "tauri", "tauri-build", "tauri-plugin-fs", + "tauri-plugin-log", "tauri-plugin-shell", ] +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + [[package]] name = "atk" version = "0.18.0" @@ -219,6 +254,18 @@ dependencies = [ "serde", ] +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + [[package]] name = "block" version = "0.1.6" @@ -243,6 +290,30 @@ dependencies = [ "objc2", ] +[[package]] +name = "borsh" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26d4d6dafc1a3bb54687538972158f07b2c948bc57d5890df22c0739098b3028" +dependencies = [ + "borsh-derive", + "cfg_aliases 0.1.1", +] + +[[package]] +name = "borsh-derive" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4918709cc4dd777ad2b6303ed03cb37f3ca0ccede8c1b0d28ac6db8f4710e0" +dependencies = [ + "once_cell", + "proc-macro-crate 2.0.2", + "proc-macro2", + "quote", + "syn 2.0.87", + "syn_derive", +] + [[package]] name = "brotli" version = "7.0.0" @@ -270,6 +341,39 @@ version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +[[package]] +name = "byte-unit" +version = "5.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cd29c3c585209b0cbc7309bfe3ed7efd8c84c21b7af29c8bfae908f8777174" +dependencies = [ + "rust_decimal", + "serde", + "utf8-width", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "bytemuck" version = "1.19.0" @@ -410,6 +514,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" + [[package]] name = "cfg_aliases" version = "0.2.1" @@ -910,6 +1020,16 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca" +[[package]] +name = "env_filter" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" +dependencies = [ + "log", + "regex", +] + [[package]] name = "equivalent" version = "1.0.1" @@ -955,6 +1075,15 @@ dependencies = [ "simd-adler32", ] +[[package]] +name = "fern" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69ff9c9d5fb3e6da8ac2f77ab76fe7e8087d512ce095200f8f29ac5b656cf6dc" +dependencies = [ + "log", +] + [[package]] name = "field-offset" version = "0.3.6" @@ -1017,6 +1146,12 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + [[package]] name = "futf" version = "0.1.5" @@ -1398,6 +1533,9 @@ name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] [[package]] name = "hashbrown" @@ -1971,6 +2109,9 @@ name = "log" version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] [[package]] name = "mac" @@ -2148,6 +2289,15 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "num_threads" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9" +dependencies = [ + "libc", +] + [[package]] name = "objc" version = "0.2.7" @@ -2757,6 +2907,26 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quick-xml" version = "0.32.0" @@ -2775,6 +2945,12 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + [[package]] name = "rand" version = "0.7.3" @@ -2911,6 +3087,15 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + [[package]] name = "reqwest" version = "0.12.9" @@ -2948,6 +3133,51 @@ dependencies = [ "windows-registry", ] +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rust_decimal" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand 0.8.5", + "rkyv", + "serde", + "serde_json", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -3024,6 +3254,12 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + [[package]] name = "selectors" version = "0.22.0" @@ -3240,6 +3476,12 @@ version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + [[package]] name = "siphasher" version = "0.3.11" @@ -3288,7 +3530,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "18051cdd562e792cad055119e0cdb2cfc137e44e3987532e0f9659a77931bb08" dependencies = [ "bytemuck", - "cfg_aliases", + "cfg_aliases 0.2.1", "core-graphics", "foreign-types", "js-sys", @@ -3400,6 +3642,18 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn_derive" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b" +dependencies = [ + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.87", +] + [[package]] name = "sync_wrapper" version = "1.0.1" @@ -3506,6 +3760,12 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + [[package]] name = "target-lexicon" version = "0.12.16" @@ -3663,6 +3923,28 @@ dependencies = [ "uuid", ] +[[package]] +name = "tauri-plugin-log" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8aa13d15daf90230ba26d5a9b4a4612975fa64ce17290cb7f6e0f89bb6997d82" +dependencies = [ + "android_logger", + "byte-unit", + "cocoa", + "fern", + "log", + "objc", + "serde", + "serde_json", + "serde_repr", + "swift-rs", + "tauri", + "tauri-plugin", + "thiserror 1.0.69", + "time", +] + [[package]] name = "tauri-plugin-shell" version = "2.0.2" @@ -3851,7 +4133,9 @@ checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa 1.0.11", + "libc", "num-conv", + "num_threads", "powerfmt", "serde", "time-core", @@ -4160,6 +4444,12 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + [[package]] name = "utf8_iter" version = "1.0.4" @@ -4182,6 +4472,12 @@ dependencies = [ "serde", ] +[[package]] +name = "value-bag" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" + [[package]] name = "version-compare" version = "0.2.0" @@ -4841,6 +5137,15 @@ dependencies = [ "x11-dl", ] +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + [[package]] name = "x11" version = "2.21.0" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 7aebbad..c534c9b 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -24,4 +24,5 @@ serde = { version = "1", features = ["derive"] } serde_json = "1" comrak = "0.29.0" tauri-plugin-fs = "2" +tauri-plugin-log = "2" diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index 91a9819..0170c2a 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -8,6 +8,7 @@ "permissions": [ "core:default", "shell:allow-open", - "fs:default" + "fs:default", + "log:default" ] -} \ No newline at end of file +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 67ed735..51fe7e0 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -1,9 +1,5 @@ -use std::str::FromStr; - -use comrak::{ - format_html, nodes::NodeValue, parse_document, Arena, ExtensionOptions, Options, RenderOptions, - RenderOptionsBuilder, -}; +use comrak::{format_html, nodes::NodeValue, parse_document, Arena, Options}; +use tauri_plugin_fs::FsExt; // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/ #[tauri::command] @@ -13,23 +9,24 @@ fn greet(name: &str) -> String { #[tauri::command] fn parse_markdown(document: &str) -> String { - println!("{:?}", document.bytes()); let arena = Arena::new(); // Parse the document into a root `AstNode` let mut options = Options::default(); + options.render.unsafe_ = true; // options.render.hardbreaks = true; let root = parse_document(&arena, document, &options); // Iterate over all the descendants of root. for node in root.descendants() { - if let NodeValue::SoftBreak = node.data.borrow_mut().value { - println!("linebreak {:?}", node); + if let NodeValue::Image(ref mut image_node) = node.data.borrow_mut().value { + // image_node.url = format!("file://{}", image_node.url); + println!("{:?}", image_node); } } let mut html = vec![]; format_html(root, &options, &mut html).unwrap(); - println!("{:?}", String::from_utf8(html.clone())); + println!("{}", String::from_utf8(html.clone()).unwrap()); String::from_utf8(html).unwrap() // String::from_str("lololo").unwrap() } @@ -38,7 +35,16 @@ fn parse_markdown(document: &str) -> String { pub fn run() { tauri::Builder::default() .plugin(tauri_plugin_fs::init()) + .plugin(tauri_plugin_log::Builder::new().build()) .plugin(tauri_plugin_shell::init()) + .setup(|app| { + // allowed the given directory + let scope = app.fs_scope(); + scope.allow_directory("/home/toxotes", true); + app.set_theme(Some(tauri::Theme::Dark)); + + Ok(()) + }) .invoke_handler(tauri::generate_handler![greet]) .invoke_handler(tauri::generate_handler![parse_markdown]) .run(tauri::generate_context!()) diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 464fad3..c7be81d 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -30,4 +30,5 @@ "icons/icon.ico" ] } + } diff --git a/src/index.html b/src/index.html index 76966fa..ce20adb 100644 --- a/src/index.html +++ b/src/index.html @@ -10,8 +10,9 @@
- -
+
+
+
diff --git a/src/main.js b/src/main.js index b85aba8..bc27a77 100644 --- a/src/main.js +++ b/src/main.js @@ -1,4 +1,5 @@ const { invoke } = window.__TAURI__.core; +const {readFile } = window.__TAURI__.fs; let greetInputEl; let greetMsgEl; @@ -9,18 +10,18 @@ async function greet() { } let text = ""; -window.addEventListener("DOMContentLoaded", () => { +window.addEventListener("DOMCharacterDataModified", () => { +// window.addEventListener("DOMContentLoaded", () => { let textarea = document.getElementById('markdown_input'); textarea.addEventListener('input', ()=> { - text = textarea.value; + text = textarea.innerText; invoke("parse_markdown", { document: text }).then( (ret)=>{ var tag_id = document.getElementById('rendered_markdown'); tag_id.innerHTML = "
".concat("", ret).concat("", "
"); + // tag_id.innerHTML = ret; } ); }); }); -var x = document.createElement("INPUT"); -x.setAttribute("type", "text"); diff --git a/src/styles.css b/src/styles.css index 8e403ec..ea17fc3 100644 --- a/src/styles.css +++ b/src/styles.css @@ -2,13 +2,12 @@ filter: drop-shadow(0 0 2em #ffe21c); } :root { - font-family: Inter, Avenir, Helvetica, Arial, sans-serif; + font-family: Avenir, Helvetica, Arial, sans-serif; font-size: 16px; line-height: 24px; - font-weight: 400; - color: #0f0f0f; - background-color: #f6f6f6; + color: #f6f6f6; + background-color: #2f2f2f; font-synthesis: none; text-rendering: optimizeLegibility; @@ -18,82 +17,58 @@ } .container { + height: 90vh; margin: 0; - padding-top: 10vh; + padding-top: 1vh; display: flex; - flex-direction: column; + flex-direction: row; justify-content: left; text-align: left; } -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: 0.75s; -} - -.logo.tauri:hover { - filter: drop-shadow(0 0 2em #24c8db); -} - .row { display: flex; justify-content: left; } - +.markdown_input +{ + border-style: solid; + width: 49%; + height: 100%; + text-align: left; + float:left; + color: #f6f6f6; + background: #2f2f2f; +} .rendered_markdown { + border-style: solid; + width: 49%; + height: 100%; + float:right; text-align: left; + color: #f6f6f6; + background-color: #2f2f2f; } -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} - -a:hover { - color: #535bf2; -} - -h1 { +.main_editor{ + width: 100%; text-align: center; + font-size: 16px; + line-height: 18px; + + flex-direction: column; + justify-content: center; + color: #f6f6f6; + background-color: #2f2f2f; +} +h1 { + text-align: left; + line-height: 18px; + margin-top: 0.067em; + margin-bottom: 0.067em; } -input, -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - color: #0f0f0f; - background-color: #ffffff; - transition: border-color 0.25s; - box-shadow: 0 2px 2px rgba(0, 0, 0, 0.2); -} -button { - cursor: pointer; -} - -button:hover { - border-color: #396cd8; -} -button:active { - border-color: #396cd8; - background-color: #e8e8e8; -} - -input, -button { - outline: none; -} - -#greet-input { - margin-right: 5px; -} @media (prefers-color-scheme: dark) { :root { @@ -101,16 +76,4 @@ button { background-color: #2f2f2f; } - a:hover { - color: #24c8db; - } - - input, - button { - color: #ffffff; - background-color: #0f0f0f98; - } - button:active { - background-color: #0f0f0f69; - } }