mirror of
https://github.com/TxtDot/vigi.git
synced 2024-11-21 19:16:20 +03:00
feat: gemini render support, links
This commit is contained in:
parent
d96b863ea8
commit
135cb5c1a2
21 changed files with 220 additions and 174 deletions
157
src-tauri/Cargo.lock
generated
157
src-tauri/Cargo.lock
generated
|
@ -246,9 +246,9 @@ checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
|
|||
|
||||
[[package]]
|
||||
name = "bytemuck"
|
||||
version = "1.16.1"
|
||||
version = "1.16.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b236fc92302c97ed75b38da1f4917b5cdda4984745740f153a5d3059e48d725e"
|
||||
checksum = "102087e286b4677862ea56cf8fc58bb2cdfa8725c40ffb80fe3a008eb7f2fc83"
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
|
@ -301,9 +301,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.1.6"
|
||||
version = "1.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2aba8f4e9906c7ce3c73463f62a7f0c65183ada1a2d47e397cc8810827f9694f"
|
||||
checksum = "26a5c3fd7bfa1ce3897a3a3501d362b2d87b7f2583ebcb4a949ec25911025cbc"
|
||||
dependencies = [
|
||||
"jobserver",
|
||||
"libc",
|
||||
|
@ -603,9 +603,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "dalet"
|
||||
version = "1.0.0-pre9"
|
||||
version = "1.0.0-pre.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2095f83b5256dc9a981639c3250aba53c02736a3601c1e6b2c54c27ec786274a"
|
||||
checksum = "8cccea0b163fbc0bc06f125bf69dfff4518336b63b86462f8c711366eef9e3e3"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"enum-procs",
|
||||
|
@ -727,9 +727,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "dunce"
|
||||
version = "1.0.4"
|
||||
version = "1.0.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "56ce8c6da7551ec6c462cbaf3bfbc75131ebbfa1c944aeaa9dab51ca1c5f0c3b"
|
||||
checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813"
|
||||
|
||||
[[package]]
|
||||
name = "embed-resource"
|
||||
|
@ -740,7 +740,7 @@ dependencies = [
|
|||
"cc",
|
||||
"memchr",
|
||||
"rustc_version",
|
||||
"toml 0.8.16",
|
||||
"toml 0.8.19",
|
||||
"vswhom",
|
||||
"winreg 0.52.0",
|
||||
]
|
||||
|
@ -825,9 +825,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "flate2"
|
||||
version = "1.0.30"
|
||||
version = "1.0.31"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae"
|
||||
checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920"
|
||||
dependencies = [
|
||||
"crc32fast",
|
||||
"miniz_oxide",
|
||||
|
@ -1149,7 +1149,7 @@ checksum = "10c6ae9f6fa26f4fb2ac16b528d138d971ead56141de489f8111e259b9df3c4a"
|
|||
dependencies = [
|
||||
"anyhow",
|
||||
"heck 0.4.1",
|
||||
"proc-macro-crate",
|
||||
"proc-macro-crate 1.3.1",
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -1244,7 +1244,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "684c0456c086e8e7e9af73ec5b84e35938df394712054550e81558d21c44ab0d"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"proc-macro-crate",
|
||||
"proc-macro-crate 1.3.1",
|
||||
"proc-macro-error",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
@ -1263,7 +1263,7 @@ dependencies = [
|
|||
"futures-sink",
|
||||
"futures-util",
|
||||
"http 0.2.12",
|
||||
"indexmap 2.2.6",
|
||||
"indexmap 2.3.0",
|
||||
"slab",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
|
@ -1282,7 +1282,7 @@ dependencies = [
|
|||
"futures-core",
|
||||
"futures-sink",
|
||||
"http 1.1.0",
|
||||
"indexmap 2.2.6",
|
||||
"indexmap 2.3.0",
|
||||
"slab",
|
||||
"tokio",
|
||||
"tokio-util",
|
||||
|
@ -1622,9 +1622,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "2.2.6"
|
||||
version = "2.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26"
|
||||
checksum = "de3fc2e30ba82dd1b3911c8de1ffc143c74a914a14e99514d7637e3099df5ea0"
|
||||
dependencies = [
|
||||
"equivalent",
|
||||
"hashbrown 0.14.5",
|
||||
|
@ -2016,7 +2016,7 @@ version = "0.5.11"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
|
||||
dependencies = [
|
||||
"proc-macro-crate",
|
||||
"proc-macro-crate 1.3.1",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 1.0.109",
|
||||
|
@ -2028,7 +2028,7 @@ version = "0.7.3"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "af1844ef2428cc3e1cb900be36181049ef3d3193c63e43026cfe202983b27a56"
|
||||
dependencies = [
|
||||
"proc-macro-crate",
|
||||
"proc-macro-crate 3.1.0",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.72",
|
||||
|
@ -2387,7 +2387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"indexmap 2.2.6",
|
||||
"indexmap 2.3.0",
|
||||
"quick-xml",
|
||||
"serde",
|
||||
"time",
|
||||
|
@ -2414,9 +2414,12 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
|
|||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.17"
|
||||
version = "0.2.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||
checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
|
||||
dependencies = [
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "precomputed-hash"
|
||||
|
@ -2434,6 +2437,15 @@ dependencies = [
|
|||
"toml_edit 0.19.15",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-crate"
|
||||
version = "3.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
|
||||
dependencies = [
|
||||
"toml_edit 0.21.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro-error"
|
||||
version = "1.0.4"
|
||||
|
@ -2609,9 +2621,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "regex"
|
||||
version = "1.10.5"
|
||||
version = "1.10.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f"
|
||||
checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619"
|
||||
dependencies = [
|
||||
"aho-corasick",
|
||||
"memchr",
|
||||
|
@ -2720,7 +2732,7 @@ dependencies = [
|
|||
"once_cell",
|
||||
"percent-encoding",
|
||||
"pin-project-lite",
|
||||
"rustls-pemfile 2.1.2",
|
||||
"rustls-pemfile 2.1.3",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"serde_urlencoded",
|
||||
|
@ -2828,9 +2840,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rustls-pemfile"
|
||||
version = "2.1.2"
|
||||
version = "2.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d"
|
||||
checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425"
|
||||
dependencies = [
|
||||
"base64 0.22.1",
|
||||
"rustls-pki-types",
|
||||
|
@ -2969,12 +2981,13 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.120"
|
||||
version = "1.0.122"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e0d21c9a8cae1235ad58a00c11cb40d4b1e5c784f1ef2c537876ed6ffd8b7c5"
|
||||
checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da"
|
||||
dependencies = [
|
||||
"indexmap 2.2.6",
|
||||
"indexmap 2.3.0",
|
||||
"itoa 1.0.11",
|
||||
"memchr",
|
||||
"ryu",
|
||||
"serde",
|
||||
]
|
||||
|
@ -3021,7 +3034,7 @@ dependencies = [
|
|||
"chrono",
|
||||
"hex",
|
||||
"indexmap 1.9.3",
|
||||
"indexmap 2.2.6",
|
||||
"indexmap 2.3.0",
|
||||
"serde",
|
||||
"serde_derive",
|
||||
"serde_json",
|
||||
|
@ -3303,7 +3316,7 @@ dependencies = [
|
|||
"cfg-expr 0.15.8",
|
||||
"heck 0.5.0",
|
||||
"pkg-config",
|
||||
"toml 0.8.16",
|
||||
"toml 0.8.19",
|
||||
"version-compare 0.2.0",
|
||||
]
|
||||
|
||||
|
@ -3378,9 +3391,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "target-lexicon"
|
||||
version = "0.12.15"
|
||||
version = "0.12.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4873307b7c257eddcb50c9bedf158eb669578359fb28428bef438fec8e6ba7c2"
|
||||
checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1"
|
||||
|
||||
[[package]]
|
||||
name = "tauri"
|
||||
|
@ -3581,12 +3594,13 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.10.1"
|
||||
version = "3.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1"
|
||||
checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"fastrand",
|
||||
"once_cell",
|
||||
"rustix",
|
||||
"windows-sys 0.52.0",
|
||||
]
|
||||
|
@ -3784,21 +3798,21 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "toml"
|
||||
version = "0.8.16"
|
||||
version = "0.8.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "81967dd0dd2c1ab0bc3468bd7caecc32b8a4aa47d0c8c695d8c2b2108168d62c"
|
||||
checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"toml_edit 0.22.17",
|
||||
"toml_edit 0.22.20",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.6.7"
|
||||
version = "0.6.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f8fb9f64314842840f1d940ac544da178732128f1c78c21772e876579e0da1db"
|
||||
checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
@ -3809,7 +3823,7 @@ version = "0.19.15"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
|
||||
dependencies = [
|
||||
"indexmap 2.2.6",
|
||||
"indexmap 2.3.0",
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
|
@ -3818,15 +3832,26 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.22.17"
|
||||
version = "0.21.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8d9f8729f5aea9562aac1cc0441f5d6de3cff1ee0c5d67293eeca5eb36ee7c16"
|
||||
checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
|
||||
dependencies = [
|
||||
"indexmap 2.2.6",
|
||||
"indexmap 2.3.0",
|
||||
"toml_datetime",
|
||||
"winnow 0.5.40",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_edit"
|
||||
version = "0.22.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "583c44c02ad26b0c3f3066fe629275e50627026c51ac2e595cca4c230ce1ce1d"
|
||||
dependencies = [
|
||||
"indexmap 2.3.0",
|
||||
"serde",
|
||||
"serde_spanned",
|
||||
"toml_datetime",
|
||||
"winnow 0.6.16",
|
||||
"winnow 0.6.18",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -4295,11 +4320,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
|||
|
||||
[[package]]
|
||||
name = "winapi-util"
|
||||
version = "0.1.8"
|
||||
version = "0.1.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b"
|
||||
checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
|
||||
dependencies = [
|
||||
"windows-sys 0.52.0",
|
||||
"windows-sys 0.59.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -4412,6 +4437,15 @@ dependencies = [
|
|||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.59.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
|
||||
dependencies = [
|
||||
"windows-targets 0.52.6",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.5"
|
||||
|
@ -4661,9 +4695,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "winnow"
|
||||
version = "0.6.16"
|
||||
version = "0.6.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b480ae9340fc261e6be3e95a1ba86d54ae3f9171132a73ce8d4bbaf68339507c"
|
||||
checksum = "68a9bda4691f099d435ad181000724da8e5899daa10713c2d432552b9ccd3a6f"
|
||||
dependencies = [
|
||||
"memchr",
|
||||
]
|
||||
|
@ -4758,6 +4792,27 @@ dependencies = [
|
|||
"rustix",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.7.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
|
||||
dependencies = [
|
||||
"byteorder",
|
||||
"zerocopy-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.7.35"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.72",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zeroize"
|
||||
version = "1.8.1"
|
||||
|
|
|
@ -26,7 +26,7 @@ tauri = { version = "1", features = [
|
|||
] }
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
dalet = "1.0.0-pre9"
|
||||
dalet = "1.0.0-pre.10"
|
||||
|
||||
tokio = { version = "1.39.2", features = ["full"] }
|
||||
tokio-rustls = { version = "0.26.0", default-features = false, features = [
|
||||
|
|
|
@ -14,9 +14,10 @@ use utils::{read_or_create_jsonl, read_or_create_number};
|
|||
#[tauri::command]
|
||||
async fn update_input(
|
||||
input: String,
|
||||
new_tab: bool,
|
||||
state: tauri::State<'_, Mutex<VigiState>>,
|
||||
) -> Result<(), VigiError> {
|
||||
state.lock().await.update_input(input);
|
||||
state.lock().await.update_input(input, new_tab).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -4,13 +4,11 @@ use tokio_rustls::rustls::{
|
|||
};
|
||||
|
||||
/// TODO: update to secure version when supported
|
||||
pub fn insecure_gemini_client() -> tokio_gemini::Client {
|
||||
tokio_gemini::Client::from(
|
||||
ClientConfig::builder()
|
||||
.dangerous()
|
||||
.with_custom_certificate_verifier(std::sync::Arc::new(NoCertVerification {}))
|
||||
.with_no_client_auth(),
|
||||
)
|
||||
pub fn insecure_gemini_client_config() -> ClientConfig {
|
||||
ClientConfig::builder()
|
||||
.dangerous()
|
||||
.with_custom_certificate_verifier(std::sync::Arc::new(NoCertVerification {}))
|
||||
.with_no_client_auth()
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
use crate::types::VigiError;
|
||||
use bytes::Bytes;
|
||||
use insecure_gemini_client::insecure_gemini_client_config;
|
||||
use mime::Mime;
|
||||
use reqwest::header::CONTENT_TYPE;
|
||||
use tokio::io::AsyncReadExt;
|
||||
use url::Url;
|
||||
|
||||
use crate::types::VigiError;
|
||||
|
||||
use super::{insecure_gemini_client, ReqResult};
|
||||
|
||||
pub async fn process_url(url: Url) -> Result<ReqResult, VigiError> {
|
||||
|
@ -40,7 +40,7 @@ async fn process_http(url: String) -> Result<ReqResult, VigiError> {
|
|||
}
|
||||
|
||||
async fn process_gemini(url: String) -> Result<ReqResult, VigiError> {
|
||||
let mut res = insecure_gemini_client::insecure_gemini_client()
|
||||
let mut res = tokio_gemini::Client::from(insecure_gemini_client_config())
|
||||
.request(&url)
|
||||
.await
|
||||
.map_err(|_| VigiError::Network)?;
|
||||
|
|
|
@ -150,8 +150,14 @@ impl VigiState {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
pub fn update_input(&mut self, input: String) {
|
||||
pub async fn update_input(&mut self, input: String, new_tab: bool) -> Result<(), VigiError> {
|
||||
if new_tab {
|
||||
self.add_tab().await?;
|
||||
}
|
||||
|
||||
self.top_bar_input = input;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn load_input_force(&mut self) -> Result<(), VigiError> {
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
<script lang="ts">
|
||||
export let className = "";
|
||||
export let draggable = false;
|
||||
export let className = "";
|
||||
export let draggable = false;
|
||||
</script>
|
||||
|
||||
{#if draggable}
|
||||
<div class="block{className ? ` ${className}` : ''}" data-tauri-drag-region>
|
||||
<slot />
|
||||
</div>
|
||||
<div class="block{className ? ` ${className}` : ''}" data-tauri-drag-region>
|
||||
<slot />
|
||||
</div>
|
||||
{:else}
|
||||
<div class="block{className ? ` ${className}` : ''}">
|
||||
<slot />
|
||||
</div>
|
||||
<div class="block{className ? ` ${className}` : ''}">
|
||||
<slot />
|
||||
</div>
|
||||
{/if}
|
||||
|
|
|
@ -1,40 +1,17 @@
|
|||
<script lang="ts">
|
||||
import type { Root } from "@txtdot/dalet";
|
||||
import Block from "./Block.svelte";
|
||||
import Renderer from "./DaletlRenderer/Renderer.svelte";
|
||||
import { isLoading, state } from "$lib/stores";
|
||||
import type { VigiState } from "$lib/types";
|
||||
import GooLoadSpin from "$lib/icons/GooLoadSpin.svelte";
|
||||
import { slide } from "svelte/transition";
|
||||
|
||||
let loading = false;
|
||||
|
||||
let data: Root;
|
||||
let tabId = 0;
|
||||
|
||||
state.subscribe((st) => {
|
||||
data = (st as VigiState).current_data;
|
||||
console.log("ada");
|
||||
if (!loading) {
|
||||
tabId = (st as VigiState).current_tab_index;
|
||||
}
|
||||
});
|
||||
|
||||
isLoading.subscribe((val) => {
|
||||
loading = val;
|
||||
|
||||
if (loading) {
|
||||
tabId = -1;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<Block className="browser-window">
|
||||
{#if loading}
|
||||
{#if $isLoading}
|
||||
<div transition:slide>
|
||||
<GooLoadSpin />
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
<Renderer {data} />
|
||||
<Renderer />
|
||||
</Block>
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
<script lang="ts">
|
||||
import type { Root } from "@txtdot/dalet";
|
||||
import TagRenderer from "./TagRenderer.svelte";
|
||||
|
||||
export let data: Root = [];
|
||||
import TagRenderer from "./TagRenderer.svelte";
|
||||
import { state } from "$lib/stores";
|
||||
import ToTopScroller from "../ToTopScroller.svelte";
|
||||
</script>
|
||||
|
||||
{#each data as tag}
|
||||
<TagRenderer {tag} />
|
||||
{#each $state.current_data as tag, i}
|
||||
{#if i === 0}
|
||||
<ToTopScroller />
|
||||
{/if}
|
||||
<TagRenderer {tag} />
|
||||
{/each}
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
<script lang="ts">
|
||||
import type { Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
import { goToLink } from "$lib/utils";
|
||||
|
||||
export let tag: Tag;
|
||||
|
||||
function goTo() {
|
||||
goToLink(tag.argument as string, true);
|
||||
}
|
||||
</script>
|
||||
|
||||
<button class="btn">
|
||||
<button class="btn" on:click={goTo}>
|
||||
<BodyRenderer body={tag.body} ifNull={tag.argument} />
|
||||
</button>
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
<script lang="ts">
|
||||
import type { Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
|
||||
export let tag: Tag;
|
||||
export let body = tag.body as string;
|
||||
export let argument = tag.argument as string | undefined;
|
||||
</script>
|
||||
|
||||
<pre class={`pre code${argument ? ` lang-${argument}` : ""}`}><code>{body}</code
|
||||
<pre class={`pre code${tag.argument ? ` lang-${tag.argument}` : ""}`}><code
|
||||
>{tag.body}</code
|
||||
></pre>
|
||||
|
|
|
@ -1,23 +1,19 @@
|
|||
<script lang="ts">
|
||||
import type { Argument, Body, Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
|
||||
export let tag: Tag;
|
||||
|
||||
let body = tag.body as string;
|
||||
let argument = tag.argument as number | null;
|
||||
</script>
|
||||
|
||||
{#if argument === 2}
|
||||
<h2 class="h2">{body}</h2>
|
||||
{:else if argument === 3}
|
||||
<h3 class="h3">{body}</h3>
|
||||
{:else if argument === 4}
|
||||
<h4 class="h4">{body}</h4>
|
||||
{:else if argument === 5}
|
||||
<h5 class="h5">{body}</h5>
|
||||
{:else if argument === 6}
|
||||
<h6 class="h6">{body}</h6>
|
||||
{#if tag.argument === 2}
|
||||
<h2 class="h2">{tag.body}</h2>
|
||||
{:else if tag.argument === 3}
|
||||
<h3 class="h3">{tag.body}</h3>
|
||||
{:else if tag.argument === 4}
|
||||
<h4 class="h4">{tag.body}</h4>
|
||||
{:else if tag.argument === 5}
|
||||
<h5 class="h5">{tag.body}</h5>
|
||||
{:else if tag.argument === 6}
|
||||
<h6 class="h6">{tag.body}</h6>
|
||||
{:else}
|
||||
<h1 class="h1">{body}</h1>
|
||||
<h1 class="h1">{tag.body}</h1>
|
||||
{/if}
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
<script lang="ts">
|
||||
import type { Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
import { goToLink } from "$lib/utils";
|
||||
|
||||
export let tag: Tag;
|
||||
|
||||
function goTo() {
|
||||
goToLink(tag.argument as string, true);
|
||||
}
|
||||
</script>
|
||||
|
||||
<button class="link">
|
||||
<button class="link" on:click={goTo}>
|
||||
<BodyRenderer body={tag.body} ifNull={tag.argument} />
|
||||
</button>
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
<script lang="ts">
|
||||
import type { Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
import { goToLink } from "$lib/utils";
|
||||
|
||||
export let tag: Tag;
|
||||
|
||||
function goTo() {
|
||||
goToLink(tag.argument as string);
|
||||
}
|
||||
</script>
|
||||
|
||||
<button class="navbtn">
|
||||
<button class="navbtn" on:click={goTo}>
|
||||
<BodyRenderer body={tag.body} ifNull={tag.argument} />
|
||||
</button>
|
||||
|
|
|
@ -1,10 +1,15 @@
|
|||
<script lang="ts">
|
||||
import type { Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
import { goToLink } from "$lib/utils";
|
||||
|
||||
export let tag: Tag;
|
||||
|
||||
function goTo() {
|
||||
goToLink(tag.argument as string);
|
||||
}
|
||||
</script>
|
||||
|
||||
<button class="navlink">
|
||||
<button class="navlink" on:click={goTo}>
|
||||
<BodyRenderer body={tag.body} ifNull={tag.argument} />
|
||||
</button>
|
||||
|
|
|
@ -1,9 +1,7 @@
|
|||
<script lang="ts">
|
||||
import type { Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
|
||||
export let tag: Tag;
|
||||
export let body = tag.body as string;
|
||||
</script>
|
||||
|
||||
<pre class="pre">{body}</pre>
|
||||
<pre class="pre">{tag.body}</pre>
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
<script lang="ts">
|
||||
import type { Tag } from "@txtdot/dalet";
|
||||
import BodyRenderer from "../BodyRenderer.svelte";
|
||||
import TagRenderer from "../TagRenderer.svelte";
|
||||
|
||||
export let tag: Tag;
|
||||
|
||||
let body = tag.body as Tag[];
|
||||
$: body = tag.body as Tag[];
|
||||
</script>
|
||||
|
||||
<ul class="ul">
|
||||
|
|
|
@ -14,11 +14,6 @@
|
|||
let tabElement: HTMLButtonElement;
|
||||
|
||||
let hovered = false;
|
||||
let loading = false;
|
||||
|
||||
isLoading.subscribe((val) => {
|
||||
loading = val;
|
||||
});
|
||||
</script>
|
||||
|
||||
<div
|
||||
|
@ -39,7 +34,7 @@
|
|||
{/if}
|
||||
|
||||
<button
|
||||
class={`tab${loading && active ? " loading" : ""}`}
|
||||
class={`tab${$isLoading && active ? " loading" : ""}`}
|
||||
class:active
|
||||
transition:slide={{ duration: 100 }}
|
||||
bind:this={tabElement}
|
||||
|
@ -49,14 +44,8 @@
|
|||
}
|
||||
}}
|
||||
>
|
||||
<!-- <div class="static right-0">
|
||||
{#if loading && active}
|
||||
<GooLoad />
|
||||
{/if}
|
||||
</div> -->
|
||||
|
||||
<div>
|
||||
{tab.title}
|
||||
{tab.title || tab.url}
|
||||
</div>
|
||||
</button>
|
||||
</div>
|
||||
|
|
7
src/lib/components/ToTopScroller.svelte
Normal file
7
src/lib/components/ToTopScroller.svelte
Normal file
|
@ -0,0 +1,7 @@
|
|||
<script lang="ts">
|
||||
import { onMount } from "svelte";
|
||||
|
||||
onMount(() => {
|
||||
document.getElementsByClassName("browser-window")[0]?.scrollTo(0, 0);
|
||||
});
|
||||
</script>
|
|
@ -1,30 +1,20 @@
|
|||
import { invoke } from "@tauri-apps/api";
|
||||
import { invoke as inv } from "@tauri-apps/api";
|
||||
import { isLoading, state } from "./stores";
|
||||
import type { VigiState } from "./types";
|
||||
import { get } from "svelte/store";
|
||||
import type { InvokeArgs } from "@tauri-apps/api/tauri";
|
||||
|
||||
export async function updateVigiState() {
|
||||
try {
|
||||
let st = await invoke("get_js_state");
|
||||
state.set(st as VigiState);
|
||||
} catch (e) {
|
||||
writeError(e);
|
||||
}
|
||||
let st = await invoke("get_js_state");
|
||||
state.set(st as VigiState);
|
||||
}
|
||||
|
||||
export async function updateAndLoadInput(input: string) {
|
||||
await invoke("update_input", { input });
|
||||
export async function updateAndLoadInput(input: string, newTab?: boolean) {
|
||||
await invoke("update_input", { input, newTab: !!newTab });
|
||||
await updateVigiState();
|
||||
|
||||
isLoading.set(true);
|
||||
|
||||
try {
|
||||
await invoke("load_input_force");
|
||||
await updateVigiState();
|
||||
} catch (e) {
|
||||
writeError(e, input);
|
||||
} finally {
|
||||
isLoading.set(false);
|
||||
}
|
||||
await invoke("load_input_force");
|
||||
await updateVigiState();
|
||||
}
|
||||
|
||||
export async function addTab() {
|
||||
|
@ -45,16 +35,14 @@ export async function removeTab(index: number) {
|
|||
}
|
||||
|
||||
export async function loadInput() {
|
||||
isLoading.set(true);
|
||||
await invoke("load_input");
|
||||
await updateVigiState();
|
||||
}
|
||||
|
||||
try {
|
||||
await invoke("load_input");
|
||||
await updateVigiState();
|
||||
} catch (e) {
|
||||
writeError(e);
|
||||
} finally {
|
||||
isLoading.set(false);
|
||||
}
|
||||
export async function goToLink(link: string, newTab?: boolean) {
|
||||
const top_bar_input = get(state).top_bar_input;
|
||||
const new_input = new URL(link, top_bar_input);
|
||||
await updateAndLoadInput(new_input.toString(), newTab);
|
||||
}
|
||||
|
||||
function writeError(e: unknown, input?: string) {
|
||||
|
@ -66,3 +54,16 @@ function writeError(e: unknown, input?: string) {
|
|||
return st;
|
||||
});
|
||||
}
|
||||
|
||||
export async function invoke(f: string, args?: InvokeArgs): Promise<unknown> {
|
||||
isLoading.set(true);
|
||||
try {
|
||||
let result = await inv(f, args);
|
||||
isLoading.set(false);
|
||||
return result;
|
||||
} catch (e) {
|
||||
writeError(e);
|
||||
isLoading.set(false);
|
||||
throw new Error("Invoke failed");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,18 +5,16 @@
|
|||
import Sidebar from "$lib/components/Sidebar.svelte";
|
||||
import BrowserWindow from "$lib/components/BrowserWindow.svelte";
|
||||
|
||||
import { invoke } from "@tauri-apps/api/tauri";
|
||||
import { invoke } from "$lib/utils";
|
||||
import { loadInput, updateVigiState } from "$lib/utils";
|
||||
import { isLoading } from "$lib/stores";
|
||||
|
||||
let sidebarOpen = true;
|
||||
|
||||
(async () => {
|
||||
isLoading.set(true);
|
||||
await invoke("setup");
|
||||
await updateVigiState();
|
||||
await loadInput();
|
||||
isLoading.set(false);
|
||||
})();
|
||||
|
||||
document.addEventListener("keypress", (e: KeyboardEvent) => {
|
||||
|
|
Loading…
Add table
Reference in a new issue