diff --git a/Cargo.lock b/Cargo.lock index fdc506c..abf5750 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -14,16 +14,16 @@ dependencies = [ "futures-sink", "memchr", "pin-project-lite", - "tokio 1.34.0", + "tokio 1.35.0", "tokio-util", "tracing", ] [[package]] name = "actix-cors" -version = "0.6.4" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b340e9cfa5b08690aae90fb61beb44e9b06f44fe3d0f93781aaa58cfba86245e" +checksum = "0346d8c1f762b41b458ed3145eea914966bb9ad20b9be0d6d463b20d45586370" dependencies = [ "actix-utils", "actix-web", @@ -90,7 +90,7 @@ dependencies = [ "http 0.2.11", "httparse", "httpdate", - "itoa 1.0.9", + "itoa 1.0.10", "language-tags", "local-channel", "mime", @@ -99,7 +99,7 @@ dependencies = [ "rand 0.8.5", "sha1", "smallvec 1.11.2", - "tokio 1.34.0", + "tokio 1.35.0", "tokio-util", "tracing", ] @@ -111,7 +111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" dependencies = [ "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -134,7 +134,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "28f32d40287d3f402ae0028a9d54bef51af15c8769492826a69d28f81893151d" dependencies = [ "futures-core", - "tokio 1.34.0", + "tokio 1.35.0", ] [[package]] @@ -148,9 +148,9 @@ dependencies = [ "actix-utils", "futures-core", "futures-util", - "mio 0.8.9", + "mio 0.8.10", "socket2 0.5.5", - "tokio 1.34.0", + "tokio 1.35.0", "tracing", ] @@ -199,7 +199,7 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "itoa 1.0.9", + "itoa 1.0.10", "language-tags", "log", "mime", @@ -224,7 +224,7 @@ dependencies = [ "actix-router", "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -352,7 +352,7 @@ dependencies = [ "futures-core", "memchr", "pin-project-lite", - "tokio 1.34.0", + "tokio 1.35.0", ] [[package]] @@ -369,7 +369,7 @@ checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -637,18 +637,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.10" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41fffed7514f420abec6d183b1d3acfd9099c79c3a10a06ade4f8203f1411272" +checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.4.9" +version = "4.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "63361bae7eef3771745f02d8d892bec2fee5f6e34af316ba556e7f97a7069ff1" +checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" dependencies = [ "anstyle", "clap_lex", @@ -679,7 +679,7 @@ dependencies = [ "futures-core", "memchr", "pin-project-lite", - "tokio 1.34.0", + "tokio 1.35.0", "tokio-util", ] @@ -824,12 +824,12 @@ dependencies = [ [[package]] name = "crossbeam-channel" -version = "0.5.8" +version = "0.5.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a33c2bf77f2df06183c3aa30d1e96c0695a313d4f9c453cc3762a6db39f99200" +checksum = "14c3242926edf34aec4ac3a77108ad4854bffaa2e4ddc1824124ce59231302d5" dependencies = [ "cfg-if 1.0.0", - "crossbeam-utils 0.8.16", + "crossbeam-utils 0.8.17", ] [[package]] @@ -882,9 +882,9 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.16" +version = "0.8.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" +checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" dependencies = [ "cfg-if 1.0.0", ] @@ -907,7 +907,7 @@ checksum = "5b3df4f93e5fbbe73ec01ec8d3f68bba73107993a5b1e7519273c32db9b0d5be" dependencies = [ "cssparser-macros", "dtoa-short", - "itoa 1.0.9", + "itoa 1.0.10", "phf 0.11.2", "smallvec 1.11.2", ] @@ -920,7 +920,7 @@ checksum = "9be934d936a0fbed5bcdc01042b770de1398bf79d0e192f49fa7faea0e99281e" dependencies = [ "cssparser-macros", "dtoa-short", - "itoa 1.0.9", + "itoa 1.0.10", "phf 0.11.2", "smallvec 1.11.2", ] @@ -941,7 +941,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13b588ba4ac1a99f7f2964d24b3d896ddc6bf847ee3855dbd4366f058cfcd331" dependencies = [ "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -965,9 +965,9 @@ checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" [[package]] name = "deranged" -version = "0.3.9" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f32d04922c60427da6f9fef14d042d9edddef64cb9d4ce0d64d0685fbeb1fd3" +checksum = "8eb30d70a07a3b04884d2677f06bec33509dc67ca60d92949e5535352d3191dc" dependencies = [ "powerfmt", ] @@ -1296,7 +1296,7 @@ checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -1436,7 +1436,7 @@ dependencies = [ "http 0.2.11", "indexmap 2.1.0", "slab", - "tokio 1.34.0", + "tokio 1.35.0", "tokio-util", "tracing", ] @@ -1531,7 +1531,7 @@ checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" dependencies = [ "bytes 1.5.0", "fnv", - "itoa 1.0.9", + "itoa 1.0.10", ] [[package]] @@ -1548,9 +1548,9 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes 1.5.0", "http 0.2.11", @@ -1617,13 +1617,13 @@ dependencies = [ "futures-util", "h2 0.3.22", "http 0.2.11", - "http-body 0.4.5", + "http-body 0.4.6", "httparse", "httpdate", - "itoa 1.0.9", + "itoa 1.0.10", "pin-project-lite", "socket2 0.4.10", - "tokio 1.34.0", + "tokio 1.35.0", "tower-service", "tracing", "want 0.3.1", @@ -1639,7 +1639,7 @@ dependencies = [ "http 0.2.11", "hyper 0.14.27", "rustls", - "tokio 1.34.0", + "tokio 1.35.0", "tokio-rustls", ] @@ -1751,9 +1751,9 @@ checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" [[package]] name = "itoa" -version = "1.0.9" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" @@ -1788,9 +1788,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.150" +version = "0.2.151" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" +checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" [[package]] name = "libmimalloc-sys" @@ -1872,9 +1872,9 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f" [[package]] name = "lua-src" -version = "546.0.1" +version = "546.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c26d4af78361e025a3d03a2b964cd1592aff7495f4d4f7947218c084c6fdca8" +checksum = "2da0daa7eee611a4c30c8f5ee31af55266e26e573971ba9336d2993e2da129b2" dependencies = [ "cc", ] @@ -1949,7 +1949,7 @@ checksum = "b0bab19cef8a7fe1c18a43e881793bfc9d4ea984befec3ae5bd0415abf3ecf00" dependencies = [ "actix-web", "futures-util", - "itoa 1.0.9", + "itoa 1.0.10", "maud_macros", ] @@ -2018,7 +2018,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23e0b72e7c9042467008b10279fc732326bd605459ae03bda88825909dd19b56" dependencies = [ "crossbeam-channel", - "crossbeam-utils 0.8.16", + "crossbeam-utils 0.8.17", "dashmap", "skeptic", "smallvec 1.11.2", @@ -2076,9 +2076,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.9" +version = "0.8.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0" +checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" dependencies = [ "libc", "log", @@ -2207,9 +2207,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.18.0" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" @@ -2219,9 +2219,9 @@ checksum = "0ab1bc2a289d34bd04a330323ac98a1b4bc82c9d9fcb1e66b63caa84da26b575" [[package]] name = "openssl" -version = "0.10.60" +version = "0.10.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79a4c6c3a2b158f7f8f2a2fc5a969fa3a068df6fc9dbb4a43845436e3af7c800" +checksum = "6b8419dc8cc6d866deb801274bba2e6f8f6108c1bb7fcc10ee5ab864931dbb45" dependencies = [ "bitflags 2.4.1", "cfg-if 1.0.0", @@ -2240,7 +2240,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -2251,9 +2251,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.96" +version = "0.9.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3812c071ba60da8b5677cc12bcb1d42989a65553772897a7e0355545a819838f" +checksum = "c3eaad34cdd97d81de97964fc7f29e2d104f483840d906ef56daa1912338460b" dependencies = [ "cc", "libc", @@ -2451,7 +2451,7 @@ dependencies = [ "phf_shared 0.11.2", "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -2498,7 +2498,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -2606,7 +2606,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a17e662a7a8291a865152364c20c7abc5e60486ab2001e8ec10b24862de0b9ab" dependencies = [ - "crossbeam-utils 0.8.16", + "crossbeam-utils 0.8.17", "libc", "mach2", "once_cell", @@ -2800,11 +2800,11 @@ dependencies = [ "combine", "futures 0.3.29", "futures-util", - "itoa 1.0.9", + "itoa 1.0.10", "percent-encoding 2.3.1", "pin-project-lite", "ryu", - "tokio 1.34.0", + "tokio 1.35.0", "tokio-retry", "tokio-util", "url 2.5.0", @@ -2902,7 +2902,7 @@ dependencies = [ "futures-util", "h2 0.3.22", "http 0.2.11", - "http-body 0.4.5", + "http-body 0.4.6", "hyper 0.14.27", "hyper-rustls", "ipnet", @@ -2918,7 +2918,7 @@ dependencies = [ "serde_json", "serde_urlencoded 0.7.1", "system-configuration", - "tokio 1.34.0", + "tokio 1.35.0", "tokio-rustls", "tokio-util", "tower-service", @@ -2932,9 +2932,9 @@ dependencies = [ [[package]] name = "ring" -version = "0.17.6" +version = "0.17.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684d5e6e18f669ccebf64a92236bb7db9a34f07be010e3627368182027180866" +checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74" dependencies = [ "cc", "getrandom", @@ -2976,9 +2976,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.26" +version = "0.38.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9470c4bf8246c8daf25f9598dca807fb6510347b1e1cfa55749113850c79d88a" +checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" dependencies = [ "bitflags 2.4.1", "errno", @@ -2989,9 +2989,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.21.9" +version = "0.21.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9" +checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "log", "ring", @@ -3032,9 +3032,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" +checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "same-file" @@ -3178,7 +3178,7 @@ checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -3187,7 +3187,7 @@ version = "1.0.108" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" dependencies = [ - "itoa 1.0.9", + "itoa 1.0.10", "ryu", "serde", ] @@ -3211,7 +3211,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" dependencies = [ "form_urlencoded", - "itoa 1.0.9", + "itoa 1.0.10", "ryu", "serde", ] @@ -3424,9 +3424,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.39" +version = "2.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" +checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", @@ -3530,7 +3530,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a34ab300f2dee6e562c10a046fc05e358b29f9bf92277f30c3c8d82275f6f5" dependencies = [ "deranged", - "itoa 1.0.9", + "itoa 1.0.10", "powerfmt", "serde", "time-core", @@ -3598,14 +3598,14 @@ dependencies = [ [[package]] name = "tokio" -version = "1.34.0" +version = "1.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9" +checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" dependencies = [ "backtrace", "bytes 1.5.0", "libc", - "mio 0.8.9", + "mio 0.8.10", "num_cpus", "parking_lot 0.12.1", "pin-project-lite", @@ -3665,7 +3665,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] [[package]] @@ -3695,7 +3695,7 @@ checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f" dependencies = [ "pin-project", "rand 0.8.5", - "tokio 1.34.0", + "tokio 1.35.0", ] [[package]] @@ -3705,7 +3705,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" dependencies = [ "rustls", - "tokio 1.34.0", + "tokio 1.35.0", ] [[package]] @@ -3771,7 +3771,7 @@ dependencies = [ "futures-core", "futures-sink", "pin-project-lite", - "tokio 1.34.0", + "tokio 1.35.0", "tracing", ] @@ -3818,9 +3818,9 @@ checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "try_from" @@ -3848,9 +3848,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "6f2528f27a9eb2b21e69c95319b30bd0efd85d09c379741b0f78ea1d86be2416" [[package]] name = "unicode-ident" @@ -4003,7 +4003,7 @@ dependencies = [ "once_cell", "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", "wasm-bindgen-shared", ] @@ -4037,7 +4037,7 @@ checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4066,7 +4066,7 @@ checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "websurfx" -version = "1.5.0" +version = "1.6.3" dependencies = [ "actix-cors", "actix-files", @@ -4097,7 +4097,7 @@ dependencies = [ "serde_json", "smallvec 1.11.2", "tempfile", - "tokio 1.34.0", + "tokio 1.35.0", ] [[package]] @@ -4319,20 +4319,20 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.28" +version = "0.7.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d6f15f7ade05d2a4935e34a457b936c23dc70a05cc1d97133dc99e7a3fe0f0e" +checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.28" +version = "0.7.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbbad221e3f78500350ecbd7dfa4e63ef945c05f4c61cb7f4d3f84cd0bba649b" +checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" dependencies = [ "proc-macro2 1.0.70", "quote 1.0.33", - "syn 2.0.39", + "syn 2.0.41", ] diff --git a/Cargo.toml b/Cargo.toml index edd1d3a..b8c4e1e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "websurfx" -version = "1.5.0" +version = "1.6.3" edition = "2021" description = "An open-source alternative to Searx that provides clean, ad-free, and organic results with incredible speed while keeping privacy and security in mind." repository = "https://github.com/neon-mmd/websurfx" diff --git a/images/404_error_page.png b/images/404_error_page.png index 9698171..47cc576 100644 Binary files a/images/404_error_page.png and b/images/404_error_page.png differ diff --git a/images/main_page.png b/images/main_page.png index 415fe36..8ea1fa1 100644 Binary files a/images/main_page.png and b/images/main_page.png differ diff --git a/images/search_page.png b/images/search_page.png index 1f75767..23db26c 100644 Binary files a/images/search_page.png and b/images/search_page.png differ diff --git a/images/websurfx_logo.png b/images/websurfx_logo.png index 07157f1..5430dd6 100644 Binary files a/images/websurfx_logo.png and b/images/websurfx_logo.png differ diff --git a/public/static/animations/simple-frosted-glow.css b/public/static/animations/simple-frosted-glow.css new file mode 100644 index 0000000..58d4ae6 --- /dev/null +++ b/public/static/animations/simple-frosted-glow.css @@ -0,0 +1,15 @@ +.results_aggregated .result { + margin: 1rem; + padding: 1rem; + border-radius: 1rem; +} + +.results_aggregated .result:hover { + box-shadow: + inset 0 0 3rem var(--color-two), + inset 0 0 6rem var(--color-five), + inset 0 0 9rem var(--color-three), + 0 0 0.25rem var(--color-two), + 0 0 0.5rem var(--color-five), + 0 0 0.75rem var(--color-three); +} diff --git a/public/static/settings.js b/public/static/settings.js index fc0e118..b8d8f88 100644 --- a/public/static/settings.js +++ b/public/static/settings.js @@ -50,6 +50,9 @@ function setClientSettings() { case 'colorschemes': cookie_dictionary['colorscheme'] = select_tag.value break + case 'animations': + cookie_dictionary['animation'] = select_tag.value || null + break case 'safe_search_levels': cookie_dictionary['safe_search_level'] = Number(select_tag.value) break @@ -103,13 +106,50 @@ function getClientSettings() { .map((item) => item.split('=')) .reduce((acc, [_, v]) => (acc = JSON.parse(v)) && acc, {}) - // Loop through all link tags and update their href values to match the user's preferences - Array.from(document.querySelectorAll('link')).forEach((item) => { - if (item.href.includes('static/themes')) { - item.href = `static/themes/${cookie_value['theme']}.css` - } else if (item.href.includes('static/colorschemes')) { - item.href = `static/colorschemes/${cookie_value['colorscheme']}.css` + let links = Array.from(document.querySelectorAll('link')) + + // A check to determine whether the animation link exists under the head tag or not. + // If it does not exists then create and add a new animation link under the head tag + // and update the other link tags href according to the settings provided by the user + // via the UI. On the other hand if it does exist then just update all the link tags + // href according to the settings provided by the user via the UI. + if (!links.some((item) => item.href.includes('static/animations'))) { + if (cookie_value['animation']) { + let animation_link = document.createElement('link') + animation_link.href = `static/animations/${cookie_value['animation']}.css` + animation_link.rel = 'stylesheet' + animation_link.type = 'text/css' + document.querySelector('head').appendChild(animation_link) } - }) + // Loop through all link tags and update their href values to match the user's preferences + links.forEach((item) => { + if (item.href.includes('static/themes')) { + item.href = `static/themes/${cookie_value['theme']}.css` + } else if (item.href.includes('static/colorschemes')) { + item.href = `static/colorschemes/${cookie_value['colorscheme']}.css` + } + }) + } else { + // Loop through all link tags and update their href values to match the user's preferences + links.forEach((item) => { + if (item.href.includes('static/themes')) { + item.href = `static/themes/${cookie_value['theme']}.css` + } else if (item.href.includes('static/colorschemes')) { + item.href = `static/colorschemes/${cookie_value['colorscheme']}.css` + } else if ( + item.href.includes('static/animations') && + cookie_value['animation'] + ) { + item.href = `static/colorschemes/${cookie_value['animation']}.css` + } + }) + if (!cookie_value['animation']) { + document + .querySelector('head') + .removeChild( + links.filter((item) => item.href.includes('static/animations')), + ) + } + } } } diff --git a/src/config/parser.rs b/src/config/parser.rs index b33936a..20a4a1a 100644 --- a/src/config/parser.rs +++ b/src/config/parser.rs @@ -115,6 +115,7 @@ impl Config { style: Style::new( globals.get::<_, String>("theme")?, globals.get::<_, String>("colorscheme")?, + globals.get::<_, Option>("animation")?, ), #[cfg(feature = "redis-cache")] redis_url: globals.get::<_, String>("redis_url")?, diff --git a/src/engines/duckduckgo.rs b/src/engines/duckduckgo.rs index fadddb6..d6316b8 100644 --- a/src/engines/duckduckgo.rs +++ b/src/engines/duckduckgo.rs @@ -29,8 +29,8 @@ impl DuckDuckGo { Ok(Self { parser: SearchResultParser::new( ".no-results", - ".result", - ".result__a", + ".results>.result", + ".result__title>.result__a", ".result__url", ".result__snippet", )?, diff --git a/src/engines/searx.rs b/src/engines/searx.rs index 7bf0431..7f20b15 100644 --- a/src/engines/searx.rs +++ b/src/engines/searx.rs @@ -52,11 +52,11 @@ impl SearchEngine for Searx { let url: String = match page { 0 | 1 => { - format!("https://searx.work/search?q={query}&pageno=1&safesearch={safe_search}") + format!("https://searx.be/search?q={query}&pageno=1&safesearch={safe_search}") + } + _ => { + format!("https://searx.be/search?q={query}&pageno={page}&safesearch={safe_search}") } - _ => format!( - "https://searx.work/search?q={query}&pageno={page}&safesearch={safe_search}" - ), }; // initializing headers and adding appropriate headers. diff --git a/src/engines/startpage.rs b/src/engines/startpage.rs index c7c292d..9a87721 100644 --- a/src/engines/startpage.rs +++ b/src/engines/startpage.rs @@ -87,7 +87,7 @@ impl SearchEngine for Startpage { .parse_for_results(&document, |title, url, desc| { Some(SearchResult::new( title.inner_html().trim(), - &format!("{}", url.inner_html().trim()), + url.inner_html().trim(), desc.inner_html().trim(), &["startpage"], )) diff --git a/src/models/parser_models.rs b/src/models/parser_models.rs index a669bd6..75a4c13 100644 --- a/src/models/parser_models.rs +++ b/src/models/parser_models.rs @@ -17,6 +17,9 @@ pub struct Style { /// It stores the parsed colorscheme option used to set a colorscheme for the /// theme being used. pub colorscheme: String, + /// It stores the parsed animation option used to set an animation for the + /// theme being used. + pub animation: Option, } impl Style { @@ -27,8 +30,12 @@ impl Style { /// * `theme` - It takes the parsed theme option used to set a theme for the website. /// * `colorscheme` - It takes the parsed colorscheme option used to set a colorscheme /// for the theme being used. - pub fn new(theme: String, colorscheme: String) -> Self { - Style { theme, colorscheme } + pub fn new(theme: String, colorscheme: String, animation: Option) -> Self { + Style { + theme, + colorscheme, + animation, + } } } diff --git a/src/server/router.rs b/src/server/router.rs index ea8387b..b9fe1d4 100644 --- a/src/server/router.rs +++ b/src/server/router.rs @@ -13,7 +13,12 @@ use std::fs::read_to_string; #[get("/")] pub async fn index(config: web::Data) -> Result> { Ok(HttpResponse::Ok().body( - crate::templates::views::index::index(&config.style.colorscheme, &config.style.theme).0, + crate::templates::views::index::index( + &config.style.colorscheme, + &config.style.theme, + &config.style.animation, + ) + .0, )) } @@ -28,6 +33,7 @@ pub async fn not_found( crate::templates::views::not_found::not_found( &config.style.colorscheme, &config.style.theme, + &config.style.animation, ) .0, )) @@ -47,7 +53,12 @@ pub async fn robots_data(_req: HttpRequest) -> Result) -> Result> { Ok(HttpResponse::Ok().body( - crate::templates::views::about::about(&config.style.colorscheme, &config.style.theme).0, + crate::templates::views::about::about( + &config.style.colorscheme, + &config.style.theme, + &config.style.animation, + ) + .0, )) } @@ -60,6 +71,7 @@ pub async fn settings( crate::templates::views::settings::settings( &config.style.colorscheme, &config.style.theme, + &config.style.animation, &config .upstream_search_engines .keys() diff --git a/src/server/routes/search.rs b/src/server/routes/search.rs index 670ee60..84ba3de 100644 --- a/src/server/routes/search.rs +++ b/src/server/routes/search.rs @@ -72,6 +72,7 @@ pub async fn search( crate::templates::views::search::search( &config.style.colorscheme, &config.style.theme, + &config.style.animation, query, &results?, ) diff --git a/src/templates/partials/header.rs b/src/templates/partials/header.rs index c477aec..e248248 100644 --- a/src/templates/partials/header.rs +++ b/src/templates/partials/header.rs @@ -13,7 +13,7 @@ use maud::{html, Markup, PreEscaped, DOCTYPE}; /// # Returns /// /// It returns the compiled html markup code for the header as a result. -pub fn header(colorscheme: &str, theme: &str) -> Markup { +pub fn header(colorscheme: &str, theme: &str, animation: &Option) -> Markup { html!( (DOCTYPE) html lang="en" @@ -24,6 +24,9 @@ pub fn header(colorscheme: &str, theme: &str) -> Markup { meta name="viewport" content="width=device-width, initial-scale=1"; link href=(format!("static/colorschemes/{colorscheme}.css")) rel="stylesheet" type="text/css"; link href=(format!("static/themes/{theme}.css")) rel="stylesheet" type="text/css"; + @if animation.is_some() { + link href=(format!("static/animations/{}.css", animation.as_ref().unwrap())) rel="stylesheet" type="text/css"; + } } (PreEscaped("")) diff --git a/src/templates/partials/settings_tabs/user_interface.rs b/src/templates/partials/settings_tabs/user_interface.rs index c978c3e..d94465b 100644 --- a/src/templates/partials/settings_tabs/user_interface.rs +++ b/src/templates/partials/settings_tabs/user_interface.rs @@ -60,6 +60,17 @@ pub fn user_interface() -> Result> { option value=(k){(v)} } } + h3{"select animation"} + p class="description"{ + "Select the animation for your theme to be used in user interface" + } + select name="animations"{ + option value=""{"none"} + @for (k,v) in style_option_list("animations")?{ + option value=(k){(v)} + } + } + } )) } diff --git a/src/templates/views/about.rs b/src/templates/views/about.rs index 9ee2d6d..3f34819 100644 --- a/src/templates/views/about.rs +++ b/src/templates/views/about.rs @@ -14,9 +14,9 @@ use crate::templates::partials::{footer::footer, header::header}; /// # Returns /// /// It returns the compiled html markup code as a result. -pub fn about(colorscheme: &str, theme: &str) -> Markup { +pub fn about(colorscheme: &str, theme: &str, animation: &Option) -> Markup { html!( - (header(colorscheme, theme)) + (header(colorscheme, theme, animation)) main class="about-container"{ article { div{ diff --git a/src/templates/views/index.rs b/src/templates/views/index.rs index d55ef7d..9d3742e 100644 --- a/src/templates/views/index.rs +++ b/src/templates/views/index.rs @@ -14,7 +14,7 @@ use crate::templates::partials::{bar::bar, footer::footer, header::header}; /// # Returns /// /// It returns the compiled html markup code as a result. -pub fn index(colorscheme: &str, theme: &str) -> Markup { +pub fn index(colorscheme: &str, theme: &str, animation: &Option) -> Markup { let logo_svg = r#" @@ -26,7 +26,7 @@ pub fn index(colorscheme: &str, theme: &str) -> Markup { "#; html!( - (header(colorscheme, theme)) + (header(colorscheme, theme, animation)) main class="search-container"{ (PreEscaped(logo_svg)) (bar(&String::default())) diff --git a/src/templates/views/not_found.rs b/src/templates/views/not_found.rs index 9e23da9..853f260 100644 --- a/src/templates/views/not_found.rs +++ b/src/templates/views/not_found.rs @@ -13,9 +13,9 @@ use maud::{html, Markup}; /// # Returns /// /// It returns the compiled html markup code as a result. -pub fn not_found(colorscheme: &str, theme: &str) -> Markup { +pub fn not_found(colorscheme: &str, theme: &str, animation: &Option) -> Markup { html!( - (header(colorscheme, theme)) + (header(colorscheme, theme, animation)) main class="error_container"{ img src="images/robot-404.svg" alt="Image of broken robot."; .error_content{ diff --git a/src/templates/views/search.rs b/src/templates/views/search.rs index 9fef7f0..07b8b42 100644 --- a/src/templates/views/search.rs +++ b/src/templates/views/search.rs @@ -22,11 +22,12 @@ use crate::{ pub fn search( colorscheme: &str, theme: &str, + animation: &Option, query: &str, search_results: &SearchResults, ) -> Markup { html!( - (header(colorscheme, theme)) + (header(colorscheme, theme, animation)) main class="results"{ (search_bar(&search_results.engine_errors_info, search_results.safe_search_level, query)) .results_aggregated{ diff --git a/src/templates/views/settings.rs b/src/templates/views/settings.rs index 7b69ac7..6da5202 100644 --- a/src/templates/views/settings.rs +++ b/src/templates/views/settings.rs @@ -25,10 +25,11 @@ use crate::templates::partials::{ pub fn settings( colorscheme: &str, theme: &str, + animation: &Option, engine_names: &[&String], ) -> Result> { Ok(html!( - (header(colorscheme, theme)) + (header(colorscheme, theme, animation)) main class="settings"{ h1{"Settings"} hr; diff --git a/tests/index.rs b/tests/index.rs index 892e0b9..563c2d9 100644 --- a/tests/index.rs +++ b/tests/index.rs @@ -24,7 +24,12 @@ async fn test_index() { assert_eq!(res.status(), 200); let config = Config::parse(true).unwrap(); - let template = views::index::index(&config.style.colorscheme, &config.style.theme).0; + let template = views::index::index( + &config.style.colorscheme, + &config.style.theme, + &config.style.animation, + ) + .0; assert_eq!(res.text().await.unwrap(), template); } diff --git a/websurfx/config.lua b/websurfx/config.lua index 62ae412..2444f86 100644 --- a/websurfx/config.lua +++ b/websurfx/config.lua @@ -1,18 +1,18 @@ -- ### General ### logging = true -- an option to enable or disable logs. -debug = false -- an option to enable or disable debug mode. -threads = 10 -- the amount of threads that the app will use to run (the value should be greater than 0). +debug = false -- an option to enable or disable debug mode. +threads = 10 -- the amount of threads that the app will use to run (the value should be greater than 0). -- ### Server ### -port = "8080" -- port on which server should be launched +port = "8080" -- port on which server should be launched binding_ip = "127.0.0.1" --ip address on the which server should be launched. -production_use = false -- whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users (more than one)) +production_use = false -- whether to use production mode or not (in other words this option should be used if it is to be used to host it on the server to provide a service to a large number of users (more than one)) -- if production_use is set to true -- There will be a random delay before sending the request to the search engines, this is to prevent DDoSing the upstream search engines from a large number of simultaneous requests. -request_timeout = 30 -- timeout for the search requests sent to the upstream search engines to be fetched (value in seconds). +request_timeout = 30 -- timeout for the search requests sent to the upstream search engines to be fetched (value in seconds). rate_limiter = { - number_of_requests = 20, -- The number of request that are allowed within a provided time limit. - time_limit = 3, -- The time limit in which the quantity of requests that should be accepted. + number_of_requests = 20, -- The number of request that are allowed within a provided time limit. + time_limit = 3, -- The time limit in which the quantity of requests that should be accepted. } -- ### Search ### @@ -43,11 +43,20 @@ safe_search = 2 -- tomorrow-night -- }} colorscheme = "catppuccin-mocha" -- the colorscheme name which should be used for the website theme -theme = "simple" -- the theme name which should be used for the website +-- The different themes provided are: +-- {{ +-- simple +-- }} +theme = "simple" -- the theme name which should be used for the website +-- The different animations provided are: +-- {{ +-- simple-frosted-glow +-- }} +animation = "simple-frosted-glow" -- the animation name which should be used with the theme or `nil` if you don't want any animations. -- ### Caching ### redis_url = "redis://127.0.0.1:8082" -- redis connection url address on which the client should connect on. -cache_expiry_time = 600 -- This option takes the expiry time of the search results (value in seconds and the value should be greater than or equal to 60 seconds). +cache_expiry_time = 600 -- This option takes the expiry time of the search results (value in seconds and the value should be greater than or equal to 60 seconds). -- ### Search Engines ### upstream_search_engines = { DuckDuckGo = true,