From 62682911fc90f38bd2737fce8dd1fcf683a0519c Mon Sep 17 00:00:00 2001 From: Ananth <136650032+KekmaTime@users.noreply.github.com> Date: Wed, 6 Dec 2023 16:45:06 +0530 Subject: [PATCH 1/8] =?UTF-8?q?=20=F0=9F=92=84=20Spacing=20between=20the?= =?UTF-8?q?=20names=20of=20the=20search=20engines=20in=20the=20search=20re?= =?UTF-8?q?sults=20(#422)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * spacing between names fixed * 🔖 chore(release): bump the app version (#422) * 🔖 chore(release): bump the app version (#422) --------- Co-authored-by: alamin655 --- Cargo.lock | 2 +- Cargo.toml | 2 +- public/static/themes/simple.css | 3 +++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0bc2c36..5b90273 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4066,7 +4066,7 @@ checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "websurfx" -version = "1.4.0" +version = "1.4.1" dependencies = [ "actix-cors", "actix-files", diff --git a/Cargo.toml b/Cargo.toml index 3a0beb7..4851f2a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "websurfx" -version = "1.4.0" +version = "1.4.1" 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/public/static/themes/simple.css b/public/static/themes/simple.css index 5eb8949..5388161 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -326,6 +326,9 @@ footer { font-size: 1.2rem; padding: 1rem; color: var(--color-five); + display: flex; + gap: 1rem; + justify-content: right; } /* Styles for the 404 page */ From 11166b487618453e28d32a60e63f29f603039a4f Mon Sep 17 00:00:00 2001 From: aocosmic <51456343+cybrejon@users.noreply.github.com> Date: Thu, 7 Dec 2023 00:21:18 +0800 Subject: [PATCH 2/8] =?UTF-8?q?=F0=9F=93=9D=20New=20`websurfx`=20logo=20fo?= =?UTF-8?q?r=20the=20`readme`=20=20(#423)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * lazyload search result text with css content-visibility * typo, lightning-fast is grammatically correct * revamped logo to look more modern * added class to control how new logo looks and behaves * added class to control how new logo looks and behaves * Replace old websurfx logo in readme file --------- Co-authored-by: neon_arch Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> --- images/websurfx_logo.png | Bin 15088 -> 45582 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/websurfx_logo.png b/images/websurfx_logo.png index ad810b38cdca1c778a25a2bbd3aaf21051321383..07157f142b96eecdd3020f1a66ba9284844eda8c 100644 GIT binary patch literal 45582 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

YcdAG1;II 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�`)LLgvQ;MWzSCij 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 G;Qs^P)U Date: Fri, 8 Dec 2023 20:05:22 +0530 Subject: [PATCH 3/8] =?UTF-8?q?=F0=9F=92=A1=20Module=20comment=20text=20to?= =?UTF-8?q?=20better=20describe=20the=20module=20code=20(#428)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * better description * 🔖 chore(release): bump the app version (#428) * 🔖 chore(release): bump the app version (#428) --------- Co-authored-by: alamin655 --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/engines/startpage.rs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5b90273..9f0a6d6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4066,7 +4066,7 @@ checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "websurfx" -version = "1.4.1" +version = "1.4.2" dependencies = [ "actix-cors", "actix-files", diff --git a/Cargo.toml b/Cargo.toml index 4851f2a..911aba3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "websurfx" -version = "1.4.1" +version = "1.4.2" 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/src/engines/startpage.rs b/src/engines/startpage.rs index 44135e1..c7c292d 100644 --- a/src/engines/startpage.rs +++ b/src/engines/startpage.rs @@ -1,5 +1,5 @@ -//! The `duckduckgo` module handles the scraping of results from the duckduckgo search engine -//! by querying the upstream duckduckgo search engine with user provided query and with a page +//! The `startpage` module handles the scraping of results from the startpage search engine +//! by querying the upstream startpage search engine with user provided query and with a page //! number if provided. use std::collections::HashMap; From c02006c297c470e57081e9ae5e9cfb3692d326fb Mon Sep 17 00:00:00 2001 From: alamin655 Date: Sat, 9 Dec 2023 16:55:28 +0530 Subject: [PATCH 4/8] =?UTF-8?q?=E2=9C=A8=20`LibreX`=20for=20the=20search?= =?UTF-8?q?=20engine=20(#429)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ✨ feat(engine): provide librex search engine (#318) * ✨ feat(engine): provide librex search engine (#318) * ✨ feat(engine): provide librex search engine (#318) * 🔖 chore(release): bump the app version (#318) * 🔖 chore(release): bump the app version (#318) * ✨ feat(engine): provide librex search engine (#318) * ✨ feat(engine): provide librex search engine (#429) Co-authored-by: neon_arch * ✨ feat(engine): provide librex search engine (#429) Co-authored-by: neon_arch * ✨ feat(engine): provide librex search engine (#429) Co-authored-by: neon_arch * ✨ feat(engine): provide librex search engine (#429) * ✨ feat(engine): provide librex search engine (#429) * ✨ feat(engine): provide librex search engine (#429) * ✨ feat(engine): provide librex search engine (#429) Co-authored-by: neon_arch --------- Co-authored-by: neon_arch --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/engines/librex.rs | 111 ++++++++++++++++++++++++++++++++++++ src/engines/mod.rs | 1 + src/models/engine_models.rs | 4 ++ websurfx/config.lua | 1 + 6 files changed, 119 insertions(+), 2 deletions(-) create mode 100644 src/engines/librex.rs diff --git a/Cargo.lock b/Cargo.lock index 9f0a6d6..fdc506c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4066,7 +4066,7 @@ checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "websurfx" -version = "1.4.2" +version = "1.5.0" dependencies = [ "actix-cors", "actix-files", diff --git a/Cargo.toml b/Cargo.toml index 911aba3..edd1d3a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "websurfx" -version = "1.4.2" +version = "1.5.0" 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/src/engines/librex.rs b/src/engines/librex.rs new file mode 100644 index 0000000..933c7f2 --- /dev/null +++ b/src/engines/librex.rs @@ -0,0 +1,111 @@ +//! The `librex` module contains the implementation of a search engine for LibreX using the reqwest and scraper libraries. +//! It includes a `SearchEngine` trait implementation for interacting with the search engine and retrieving search results. + +use std::collections::HashMap; + +use reqwest::header::HeaderMap; +use reqwest::Client; +use scraper::Html; + +use crate::models::aggregation_models::SearchResult; +use crate::models::engine_models::{EngineError, SearchEngine}; + +use error_stack::{Report, Result, ResultExt}; + +use super::search_result_parser::SearchResultParser; + +/// Represents the LibreX search engine. +pub struct LibreX { + /// The parser used to extract search results from HTML documents. + parser: SearchResultParser, +} + +impl LibreX { + /// Creates a new instance of LibreX with a default configuration. + /// + /// # Returns + /// + /// Returns a `Result` containing `LibreX` if successful, otherwise an `EngineError`. + pub fn new() -> Result { + Ok(Self { + parser: SearchResultParser::new( + ".text-result-container>p", + ".text-result-container", + ".text-result-wrapper>a>h2", + ".text-result-wrapper>a", + ".text-result-wrapper>span", + )?, + }) + } +} + +#[async_trait::async_trait] +impl SearchEngine for LibreX { + /// Retrieves search results from LibreX based on the provided query, page, user agent, and client. + /// + /// # Arguments + /// + /// * `query` - The search query. + /// * `page` - The page number for pagination. + /// * `user_agent` - The user agent string. + /// * `client` - The reqwest client for making HTTP requests. + /// * `_safe_search` - A parameter for safe search (not currently used). + /// + /// # Returns + /// + /// Returns a `Result` containing a `HashMap` of search results if successful, otherwise an `EngineError`. + /// The `Err` variant is explicit for better documentation. + async fn results( + &self, + query: &str, + page: u32, + user_agent: &str, + client: &Client, + _safe_search: u8, + ) -> Result, EngineError> { + // Page number can be missing or empty string and so appropriate handling is required + // so that upstream server recieves valid page number. + let url: String = match page { + 1 | 0 => { + format!("https://search.ahwx.org/search.php?q={query}&p=0&t=10") + } + _ => { + format!( + "https://search.ahwx.org/search.php?q={query}&p={}&t=10", + page * 10, + ) + } + }; + + // initializing HeaderMap and adding appropriate headers. + let header_map = HeaderMap::try_from(&HashMap::from([ + ("USER_AGENT".to_string(), user_agent.to_string()), + ("REFERER".to_string(), "https://google.com/".to_string()), + ("CONTENT_TYPE".to_string(), "application/x-www-form-urlencoded".to_string()), + ( + "COOKIE".to_string(), + "theme=amoled; disable_special=on; disable_frontends=on; language=en; number_of_results=10; safe_search=on; save=1".to_string(), + ), + ])) + .change_context(EngineError::UnexpectedError)?; + + let document: Html = Html::parse_document( + &LibreX::fetch_html_from_upstream(self, &url, header_map, client).await?, + ); + + if self.parser.parse_for_no_results(&document).next().is_some() { + return Err(Report::new(EngineError::EmptyResultSet)); + } + + // scrape all the results from the html + self.parser + .parse_for_results(&document, |title, url, desc| { + Some(SearchResult::new( + title.inner_html().trim(), + url.inner_html().trim(), + desc.inner_html().trim(), + &["librex"], + )) + }) + } +} diff --git a/src/engines/mod.rs b/src/engines/mod.rs index 53d720b..b6a50f5 100644 --- a/src/engines/mod.rs +++ b/src/engines/mod.rs @@ -5,6 +5,7 @@ pub mod brave; pub mod duckduckgo; +pub mod librex; pub mod search_result_parser; pub mod searx; pub mod startpage; diff --git a/src/models/engine_models.rs b/src/models/engine_models.rs index 1ab04ed..70496cd 100644 --- a/src/models/engine_models.rs +++ b/src/models/engine_models.rs @@ -158,6 +158,10 @@ impl EngineHandler { let engine = crate::engines::startpage::Startpage::new()?; ("startpage", Box::new(engine)) } + "librex" => { + let engine = crate::engines::librex::LibreX::new()?; + ("librex", Box::new(engine)) + } _ => { return Err(Report::from(EngineError::NoSuchEngineFound( engine_name.to_string(), diff --git a/websurfx/config.lua b/websurfx/config.lua index 22e2c4f..62ae412 100644 --- a/websurfx/config.lua +++ b/websurfx/config.lua @@ -54,4 +54,5 @@ upstream_search_engines = { Searx = false, Brave = false, Startpage = false, + LibreX = false, } -- select the upstream search engines from which the results should be fetched. From 397a805ffddf6bb847edce824209b540b55ab0ec Mon Sep 17 00:00:00 2001 From: aocosmic <51456343+cybrejon@users.noreply.github.com> Date: Sat, 9 Dec 2023 22:34:17 +0800 Subject: [PATCH 5/8] =?UTF-8?q?=F0=9F=92=84=20Improved=20visual=20fidelity?= =?UTF-8?q?=20for=20the=20`simple`=20theme=20(#426)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * lazyload search result text with css content-visibility * typo, lightning-fast is grammatically correct * revamped logo to look more modern * added class to control how new logo looks and behaves * added class to control how new logo looks and behaves * Replace old websurfx logo in readme file * major visual revamp * removed logo files and switched to inline svg * added `--logo-color` to make svg logo colorscheme adaptive * Update public/static/themes/simple.css Co-authored-by: neon_arch * [CodeFactor] Apply fixes * chores: fix duplicate footer selector and remove unknown pseudo-class * chores: remove missed duplicate footer selector * chores: pass formatter check by deleting empty line at 18 --------- Co-authored-by: neon_arch Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: alamin655 Co-authored-by: codefactor-io --- public/images/websurfx_logo.png | Bin 8501 -> 0 bytes public/images/websurfx_logo.svg | 7 - .../static/colorschemes/catppuccin-mocha.css | 1 + public/static/colorschemes/dark-chocolate.css | 1 + public/static/colorschemes/dracula.css | 1 + public/static/colorschemes/gruvbox-dark.css | 1 + public/static/colorschemes/monokai.css | 1 + public/static/colorschemes/nord.css | 1 + public/static/colorschemes/oceanic-next.css | 1 + public/static/colorschemes/one-dark.css | 1 + public/static/colorschemes/solarized-dark.css | 1 + .../static/colorschemes/solarized-light.css | 1 + public/static/colorschemes/tokyo-night.css | 1 + public/static/colorschemes/tomorrow-night.css | 1 + public/static/themes/simple.css | 157 +++++++++++++----- src/templates/views/index.rs | 12 +- 16 files changed, 140 insertions(+), 48 deletions(-) delete mode 100644 public/images/websurfx_logo.png delete mode 100644 public/images/websurfx_logo.svg diff --git a/public/images/websurfx_logo.png b/public/images/websurfx_logo.png deleted file mode 100644 index 24d39e15326b389340444fefc230fa2ab8373791..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8501 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 diff --git a/public/images/websurfx_logo.svg b/public/images/websurfx_logo.svg deleted file mode 100644 index 2574345..0000000 --- a/public/images/websurfx_logo.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/public/static/colorschemes/catppuccin-mocha.css b/public/static/colorschemes/catppuccin-mocha.css index 41cc9e0..2394f0a 100644 --- a/public/static/colorschemes/catppuccin-mocha.css +++ b/public/static/colorschemes/catppuccin-mocha.css @@ -1,6 +1,7 @@ :root { --background-color: #1e1e2e; --foreground-color: #cdd6f4; + --logo-color: #f5c2e7; --color-one: #45475a; --color-two: #f38ba8; --color-three: #a6e3a1; diff --git a/public/static/colorschemes/dark-chocolate.css b/public/static/colorschemes/dark-chocolate.css index 32f1f0b..5dacf88 100644 --- a/public/static/colorschemes/dark-chocolate.css +++ b/public/static/colorschemes/dark-chocolate.css @@ -1,6 +1,7 @@ :root { --background-color: #000; --foreground-color: #fff; + --logo-color: #e0e0e0; --color-one: #121212; --color-two: #808080; --color-three: #999; diff --git a/public/static/colorschemes/dracula.css b/public/static/colorschemes/dracula.css index bb15d4c..5933506 100644 --- a/public/static/colorschemes/dracula.css +++ b/public/static/colorschemes/dracula.css @@ -1,6 +1,7 @@ :root { --background-color: #44475a; --foreground-color: #8be9fd; + --logo-color: #ffb86c; --color-one: #f55; --color-two: #50fa7b; --color-three: #ffb86c; diff --git a/public/static/colorschemes/gruvbox-dark.css b/public/static/colorschemes/gruvbox-dark.css index ca89eb2..8120bdb 100644 --- a/public/static/colorschemes/gruvbox-dark.css +++ b/public/static/colorschemes/gruvbox-dark.css @@ -1,6 +1,7 @@ :root { --background-color: #1d2021; --foreground-color: #ebdbb2; + --logo-color: #ebdbb2; --color-one: #282828; --color-two: #98971a; --color-three: #d79921; diff --git a/public/static/colorschemes/monokai.css b/public/static/colorschemes/monokai.css index ea1b58e..c89e570 100644 --- a/public/static/colorschemes/monokai.css +++ b/public/static/colorschemes/monokai.css @@ -1,6 +1,7 @@ :root { --background-color: #49483Eff; --foreground-color: #FFB269; + --logo-color: #ffd866; --color-one: #272822ff; --color-two: #61AFEF; --color-three: #ffd866; diff --git a/public/static/colorschemes/nord.css b/public/static/colorschemes/nord.css index 234b57b..dde536b 100644 --- a/public/static/colorschemes/nord.css +++ b/public/static/colorschemes/nord.css @@ -1,6 +1,7 @@ :root { --background-color: #122736ff; --foreground-color: #a2e2a9; + --logo-color: #e2ecd6; --color-one: #121B2Cff; --color-two: #f08282; --color-three: #ABC5AAff; diff --git a/public/static/colorschemes/oceanic-next.css b/public/static/colorschemes/oceanic-next.css index 896bae1..e7753ae 100644 --- a/public/static/colorschemes/oceanic-next.css +++ b/public/static/colorschemes/oceanic-next.css @@ -1,6 +1,7 @@ :root { --background-color: #1b2b34; --foreground-color: #d8dee9; + --logo-color: #d8dee9; --color-one: #343d46; --color-two: #5FB3B3ff; --color-three: #69Cf; diff --git a/public/static/colorschemes/one-dark.css b/public/static/colorschemes/one-dark.css index 30f858e..5a0a3e8 100644 --- a/public/static/colorschemes/one-dark.css +++ b/public/static/colorschemes/one-dark.css @@ -1,6 +1,7 @@ :root { --background-color: #282c34; --foreground-color: #abb2bf; + --logo-color: #c8ccd4; --color-one: #3b4048; --color-two: #a3be8c; --color-three: #b48ead; diff --git a/public/static/colorschemes/solarized-dark.css b/public/static/colorschemes/solarized-dark.css index 44494f9..842b254 100644 --- a/public/static/colorschemes/solarized-dark.css +++ b/public/static/colorschemes/solarized-dark.css @@ -1,6 +1,7 @@ :root { --background-color: #002b36; --foreground-color: #c9e0e6; + --logo-color: #EEE8D5ff; --color-one: #073642; --color-two: #2AA198ff; --color-three: #2AA198ff; diff --git a/public/static/colorschemes/solarized-light.css b/public/static/colorschemes/solarized-light.css index 7434b37..7a8f67a 100644 --- a/public/static/colorschemes/solarized-light.css +++ b/public/static/colorschemes/solarized-light.css @@ -1,6 +1,7 @@ :root { --background-color: #EEE8D5ff; --foreground-color: #b1ab97; + --logo-color: #586E75; --color-one: #fdf6e3; --color-two: #DC322Fff; --color-three: #586E75ff; diff --git a/public/static/colorschemes/tokyo-night.css b/public/static/colorschemes/tokyo-night.css index 16c54bd..66ad547 100644 --- a/public/static/colorschemes/tokyo-night.css +++ b/public/static/colorschemes/tokyo-night.css @@ -1,6 +1,7 @@ :root { --background-color: #1a1b26; --foreground-color: #c0caf5; + --logo-color: #e2afff; --color-one: #32364a; --color-two: #a9b1d6; --color-three: #5a5bb8; diff --git a/public/static/colorschemes/tomorrow-night.css b/public/static/colorschemes/tomorrow-night.css index 2f2c29c..8b462a0 100644 --- a/public/static/colorschemes/tomorrow-night.css +++ b/public/static/colorschemes/tomorrow-night.css @@ -1,6 +1,7 @@ :root { --background-color: #35383Cff; --foreground-color: #D7DAD8ff; + --logo-color: #D7DAD8ff; --color-one: #1d1f21; --color-two: #D77C79ff; --color-three: #f0c674; diff --git a/public/static/themes/simple.css b/public/static/themes/simple.css index 5388161..9aa1ef7 100644 --- a/public/static/themes/simple.css +++ b/public/static/themes/simple.css @@ -1,4 +1,9 @@ /* @import url('./catppuccin-mocha.css'); */ +@font-face { + font-family: Rubik; + src: url('https://fonts.googleapis.com/css2?family=Rubik:wght@400;500;600;700;800&display=swap'); + fallback: sans-serif; +} * { padding: 0; @@ -16,7 +21,13 @@ body { justify-content: space-between; align-items: center; height: 100vh; - background: var(--color-one); + font-family: Rubik, sans-serif; + background-color: var(--background-color); +} + +/* enforce font for buttons */ +button { + font-family: Rubik, sans-serif; } /* styles for the index page */ @@ -29,46 +40,67 @@ body { align-items: center; } -.search-container div { - display: flex; +.search-container svg { + color: var(--logo-color); } -.websurfx-logo { - width: clamp(12rem, 40rem, 48rem); +.search-container div { + display: flex; } /* styles for the search box and search button */ .search_bar { display: flex; + gap: 10px; + align-items: center; } .search_bar input { - padding: 1rem; + border-radius: 6px; + padding: 2.6rem 2.2rem; width: 50rem; height: 3rem; outline: none; border: none; box-shadow: rgb(0 0 0 / 1); - background: var(--foreground-color); + background-color: var(--color-one); + color: var(--foreground-color); + outline-offset: 3px; + font-size: 1.6rem; +} + +.search_bar input:focus { + outline: 2px solid var(--foreground-color); +} + +.search_bar input::placeholder { + color: var(--foreground-color); + opacity: 1; } .search_bar button { - padding: 1rem; - border-radius: 0; + padding: 2.6rem 3.2rem; + border-radius: 6px; height: 3rem; display: flex; justify-content: center; align-items: center; - outline: none; + outline-offset: 3px; + outline: 2px solid transparent; border: none; + transition: .1s; gap: 0; - background: var(--background-color); - color: var(--color-three); + background-color: var(--color-six); + color: var(--background-color); font-weight: 600; letter-spacing: 0.1rem; } +.search_bar button:active { + outline: 2px solid var(--color-three); +} + .search_bar button:active, .search_bar button:hover { filter: brightness(1.2); @@ -85,13 +117,19 @@ body { width: 20rem; background-color: var(--color-one); color: var(--foreground-color); - padding: 1rem 2rem; + padding: 1.2rem 2rem; border-radius: 0.5rem; - outline: none; + outline-offset: 3px; + outline: 2px solid transparent; border: none; text-transform: capitalize; } +.search_area .search_options select:active, +.search_area .search_options select:hover { + outline: 2px solid var(--color-three); +} + .search_area .search_options option:hover { background-color: var(--color-one); } @@ -199,17 +237,25 @@ body { /* styles for the footer and header */ -header, + +header { + width: 100%; + background: var(--background-color); + display: flex; + align-items: center; + justify-content: space-between; + padding: 2rem 3rem; +} + footer { width: 100%; background: var(--background-color); display: flex; - padding: 1rem; align-items: center; -} - -header { - justify-content: space-between; + padding: 1.7rem 1.7rem 4rem; + gap: 1.8rem; + flex-direction: column; + justify-content: center; } header h1 a { @@ -217,7 +263,6 @@ header h1 a { text-decoration: none; color: var(--foreground-color); letter-spacing: 0.1rem; - margin-left: 1rem; } header ul, @@ -259,11 +304,6 @@ footer div { gap: 1rem; } -footer { - flex-direction: column; - justify-content: center; -} - /* Styles for the search page */ .results { @@ -271,6 +311,11 @@ footer { display: flex; flex-direction: column; justify-content: space-around; + gap: 1rem; +} + +.result { + gap: 1rem; } .results .search_bar { @@ -280,7 +325,7 @@ footer { .results_aggregated { display: flex; flex-direction: column; - justify-content: space-between; + justify-content: space-between; margin: 2rem 0; content-visibility: auto; } @@ -292,10 +337,10 @@ footer { } .results_aggregated .result h1 a { - font-size: 1.5rem; + font-size: 1.7rem; + font-weight: normal; color: var(--color-two); text-decoration: none; - letter-spacing: 0.1rem; } .results_aggregated .result h1 a:hover { @@ -308,14 +353,15 @@ footer { .results_aggregated .result small { color: var(--color-three); - font-size: 1.1rem; + font-size: 1.3rem; word-wrap: break-word; line-break: anywhere; } .results_aggregated .result p { color: var(--foreground-color); - font-size: 1.2rem; + font-size: 1.4rem; + line-height: 2.4rem; margin-top: 0.3rem; word-wrap: break-word; line-break: anywhere; @@ -445,6 +491,7 @@ footer { display: flex; justify-content: space-around; width: 80dvw; + margin: 5rem 0; } .settings h1 { @@ -452,11 +499,20 @@ footer { font-size: 2.5rem; } +.settings > h1 { + margin-bottom: 4rem; + margin-left: 2rem; +} + .settings hr { border-color: var(--color-three); margin: 0.3rem 0 1rem; } +.settings > hr { + margin-left: 2rem; +} + .settings_container .sidebar { width: 30%; cursor: pointer; @@ -467,7 +523,6 @@ footer { margin-left: -0.7rem; padding: 0.7rem; border-radius: 5px; - font-weight: bold; margin-bottom: 0.5rem; color: var(--foreground-color); text-transform: capitalize; @@ -475,18 +530,30 @@ footer { } .settings_container .sidebar .btn { - padding: 0.5rem; + padding: 2rem; border-radius: 0.5rem; + outline-offset: 3px; + outline: 2px solid transparent; +} + +.settings_container .sidebar .btn:active { + outline: 2px solid var(--color-two); +} + +.settings_container .sidebar .btn:not(.active):hover { + color: var(--color-two); } .settings_container .sidebar .btn.active { background-color: var(--color-two); + color: var(--background-color); } .settings_container .main_container { width: 70%; border-left: 1.5px solid var(--color-three); padding-left: 3rem; + border: none; } .settings_container .tab { @@ -495,6 +562,7 @@ footer { .settings_container .tab.active { display: flex; + gap: 1.2rem; flex-direction: column; justify-content: space-around; } @@ -542,7 +610,7 @@ footer { .settings_container .general select { margin: 0.7rem 0; width: 20rem; - background-color: var(--background-color); + background-color: var(--color-one); color: var(--foreground-color); padding: 1rem 2rem; border-radius: 0.5rem; @@ -560,16 +628,19 @@ footer { display: flex; flex-direction: column; justify-content: center; - gap: 1rem; padding: 1rem 0; + margin-bottom: 2rem; + gap: 2rem; } .settings_container .engines .toggle_btn { color: var(--foreground-color); font-size: 1.5rem; display: flex; - gap: 0.5rem; align-items: center; + border-radius: 100px; + gap: 1.5rem; + letter-spacing: 1px; } .settings_container .engines hr { @@ -602,8 +673,14 @@ footer { position: absolute; cursor: pointer; inset: 0; - background-color: var(--background-color); - transition: 0.4s; + background-color: var(--foreground-color); + transition: 0.2s; + outline-offset: 3px; + outline: 2px solid transparent; +} + +.slider:active { + outline: 2px solid var(--foreground-color); } .slider::before { @@ -613,8 +690,8 @@ footer { width: 2.6rem; left: 0.4rem; bottom: 0.4rem; - background-color: var(--foreground-color); - transition: 0.4s; + background-color: var(--background-color); + transition: .2s; } input:checked + .slider { diff --git a/src/templates/views/index.rs b/src/templates/views/index.rs index cfa1eb6..d55ef7d 100644 --- a/src/templates/views/index.rs +++ b/src/templates/views/index.rs @@ -15,10 +15,20 @@ use crate::templates::partials::{bar::bar, footer::footer, header::header}; /// /// It returns the compiled html markup code as a result. pub fn index(colorscheme: &str, theme: &str) -> Markup { + let logo_svg = r#" + + + + + + + + "#; + html!( (header(colorscheme, theme)) main class="search-container"{ - img class="websurfx-logo" src="../images/websurfx_logo.svg" alt="Websurfx meta-search engine logo"; + (PreEscaped(logo_svg)) (bar(&String::default())) (PreEscaped("")) } From 15b0505b961561d598e2aaa8229309ec7ba1f753 Mon Sep 17 00:00:00 2001 From: Diogo Canut Date: Sun, 10 Dec 2023 21:24:17 -0300 Subject: [PATCH 6/8] Provide a more resilient and reliable searx instance --- src/engines/searx.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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. From 44f51487c2e7dc96e3071d77b9c727f46a88c826 Mon Sep 17 00:00:00 2001 From: alamin655 Date: Mon, 11 Dec 2023 09:09:41 +0530 Subject: [PATCH 7/8] =?UTF-8?q?=F0=9F=94=96=20chore(release):=20bump=20the?= =?UTF-8?q?=20app=20version=20(#435)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v1.5.2 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index edd1d3a..cd19790 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "websurfx" -version = "1.5.0" +version = "1.5.2" 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" From 918d142d2415b224ba8962c335ef3b453e7fd9ce Mon Sep 17 00:00:00 2001 From: alamin655 Date: Mon, 11 Dec 2023 09:10:25 +0530 Subject: [PATCH 8/8] =?UTF-8?q?=F0=9F=94=96=20chore(release):=20bump=20the?= =?UTF-8?q?=20app=20version=20(#435)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v1.5.2 --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index fdc506c..3d147af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4066,7 +4066,7 @@ checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" [[package]] name = "websurfx" -version = "1.5.0" +version = "1.5.2" dependencies = [ "actix-cors", "actix-files",