diff --git a/app/filter.py b/app/filter.py index 52c6459..5289c42 100644 --- a/app/filter.py +++ b/app/filter.py @@ -68,6 +68,8 @@ def clean_css(css: str, page_url: str) -> str: for url in urls: abs_url = get_abs_url(url, page_url) + if abs_url.startswith('data:'): + continue css = css.replace( url, f'/element?type=image/png&url={abs_url}' @@ -95,6 +97,7 @@ class Filter: self.page_url = page_url self.main_divs = ResultSet('') self._elements = 0 + self._av = set() def __getitem__(self, name): return getattr(self, name) @@ -438,9 +441,12 @@ class Filter: # Strip unneeded arguments link['href'] = filter_link_args(q) - # Add alternate viewing options for results - if self.config.anon_view: - append_anon_view(link, self.config.nojs) + # Add alternate viewing options for results, + # if the result doesn't already have an AV link + netloc = urlparse.urlparse(link['href']).netloc + if self.config.anon_view and netloc not in self._av: + self._av.add(netloc) + append_anon_view(link, self.config) if self.config.new_tab: link['target'] = '_blank' diff --git a/app/static/settings/translations.json b/app/static/settings/translations.json index 8914b48..d35aaf7 100644 --- a/app/static/settings/translations.json +++ b/app/static/settings/translations.json @@ -14,8 +14,8 @@ "config-block-url": "Block by URL", "config-block-url-help": "Use regex", "config-theme": "Theme", - "config-nojs": "Remove Javascript in \"Anonymous View\"", - "config-anon-view": "Show \"Anonymous View\" Links", + "config-nojs": "Remove Javascript in Anonymous View", + "config-anon-view": "Show Anonymous View Links", "config-dark": "Dark Mode", "config-safe": "Safe Search", "config-alts": "Replace Social Media Links", @@ -42,7 +42,8 @@ "maps": "Maps", "videos": "Videos", "news": "News", - "books": "Books" + "books": "Books", + "anon-view": "Anonymous View" }, "lang_nl": { "search": "Zoeken", @@ -59,7 +60,8 @@ "config-block-url": "Blokkeren op URL", "config-block-url-help": "Gebruik regex", "config-theme": "Thema", - "config-nojs": "Laat NoJS links zien", + "config-nojs": "Javascript verwijderen in anonieme weergave", + "config-anon-view": "Toon anonieme links bekijken", "config-dark": "Donkere Modus", "config-safe": "Veilig zoeken", "config-alts": "Social Media Links Vervangen", @@ -86,7 +88,8 @@ "maps": "Maps", "videos": "Videos", "news": "Nieuws", - "books": "Boeken" + "books": "Boeken", + "anon-view": "Anonieme Weergave" }, "lang_de": { "search": "Suchen", @@ -103,7 +106,8 @@ "config-block-url": "Nach URL blockieren", "config-block-url-help": "Regex verwenden", "config-theme": "Thema", - "config-nojs": "NoJS-Links anzeigen", + "config-nojs": "Entfernen Sie Javascript in der anonymen Ansicht", + "config-anon-view": "Anonyme Ansichtslinks anzeigen", "config-dark": "Dark Mode", "config-safe": "Sicheres Suchen", "config-alts": "Social-Media-Links ersetzen", @@ -130,7 +134,8 @@ "maps": "Maps", "videos": "Videos", "news": "Nieuws", - "books": "Bücher" + "books": "Bücher", + "anon-view": "Anonyme Ansicht" }, "lang_es": { "search": "Buscar", @@ -147,7 +152,8 @@ "config-block-url": "Bloquear por URL", "config-block-url-help": "Usar expresiones regulares", "config-theme": "Tema", - "config-nojs": "Mostrar Enlaces NoJS", + "config-nojs": "Eliminar Javascript en vista anónima", + "config-anon-view": "Mostrar enlaces de vista anónima", "config-dark": "Modo Oscuro", "config-safe": "Búsqueda Segura", "config-alts": "Reemplazar Enlaces de Redes Sociales", @@ -174,7 +180,8 @@ "maps": "Maps", "videos": "Vídeos", "news": "Noticias", - "books": "Libros" + "books": "Libros", + "anon-view": "Vista Anónima" }, "lang_it": { "search": "Cerca", @@ -191,7 +198,8 @@ "config-block-url": "Blocca per url", "config-block-url-help": "Usa regex", "config-theme": "Tema", - "config-nojs": "Mostra link NoJS", + "config-nojs": "Rimuovere Javascript in visualizzazione anonima", + "config-anon-view": "Mostra collegamenti di visualizzazione anonimi", "config-dark": "Modalità Notte", "config-safe": "Ricerca Sicura", "config-alts": "Sostituisci link dei social", @@ -218,7 +226,8 @@ "maps": "Maps", "videos": "Video", "news": "Notizie", - "books": "Libri" + "books": "Libri", + "anon-view": "Vista Anonima" }, "lang_pt": { "search": "Pesquisar", @@ -235,7 +244,8 @@ "config-block-url": "Bloquear por url", "config-block-url-help": "Use regex", "config-theme": "Tema", - "config-nojs": "Mostrar Links NoJS", + "config-nojs": "Remover Javascript na visualização anônima", + "config-anon-view": "Mostrar links de visualização anônimos", "config-dark": "Modo Escuro", "config-safe": "Pesquisa Segura", "config-alts": "Substituir Links de Redes Sociais", @@ -262,7 +272,8 @@ "maps": "Maps", "videos": "Vídeos", "news": "Notícias", - "books": "Livros" + "books": "Livros", + "anon-view": "Visualização Anônima" }, "lang_ru": { "search": "Поиск", @@ -279,7 +290,8 @@ "config-block-url": "Блокировать по URL-адресу", "config-block-url-help": "Используйте regex", "config-theme": "Оформление", - "config-nojs": "Показывать ссылки NoJS", + "config-nojs": "Удалить Javascript в анонимном просмотре", + "config-anon-view": "показать ссылки для анонимного просмотра", "config-dark": "Темный режим", "config-safe": "Безопасный поиск", "config-alts": "Заменить ссылки на социальные сети", @@ -306,7 +318,8 @@ "maps": "Карты", "videos": "Видео", "news": "Новости", - "books": "Книги" + "books": "Книги", + "anon-view": "Анонимный просмотр" }, "lang_zh-CN": { "search": "搜索", @@ -323,7 +336,8 @@ "config-block-url": "按网站链接屏蔽", "config-block-url-help": "使用正则表达式", "config-theme": "主题", - "config-nojs": "显示 NoJS 链接", + "config-nojs": "在匿名视图中删除 Javascript", + "config-anon-view": "显示匿名查看链接", "config-dark": "深色模式", "config-safe": "安全搜索", "config-alts": "替换社交媒体链接", @@ -350,7 +364,8 @@ "maps": "地圖", "videos": "影片", "news": "新聞", - "books": "書籍" + "books": "書籍", + "anon-view": "匿名视图" }, "lang_si": { "search": "සොයන්න", @@ -367,7 +382,8 @@ "config-block-url": "ඒ.ස.නි. මඟින් අවහිර කරන්න", "config-block-url-help": "රෙජෙක්ස් භාවිතා කරන්න", "config-theme": "තේමාව", - "config-nojs": "නෝජේඑස් සබැඳි පෙන්වන්න", + "config-nojs": "Anonymous View හි Javascript ඉවත් කරන්න", + "config-anon-view": "නිර්නාමික බලන්න සබැඳි පෙන්වන්න", "config-dark": "අඳුරු ආකාරය", "config-safe": "ආරක්‍ෂිත සෙවුම", "config-alts": "සමාජ මාධ්‍ය සබැඳි ප්‍රතිස්ථාපනය කරන්න", @@ -394,7 +410,8 @@ "maps": "සිතියම්", "videos": "වීඩියෝ", "news": "අනුරූප", - "books": "පොත්" + "books": "පොත්", + "anon-view": "නිර්නාමික දසුන" }, "lang_fr": { "search": "Chercher", @@ -411,7 +428,8 @@ "config-block-url": "Bloquer par URL", "config-block-url-help": "Utiliser l'expression régulière", "config-theme": "Theme", - "config-nojs": "Montrer les liens NoJS", + "config-nojs": "Supprimer Javascript dans la vue anonyme", + "config-anon-view": "Afficher les liens de vue anonymes", "config-dark": "Mode Sombre", "config-safe": "Recherche sécurisée", "config-alts": "Remplacer les liens des réseaux sociaux", @@ -438,7 +456,8 @@ "maps": "Maps", "videos": "Vidéos", "news": "Actualités", - "books": "Livres" + "books": "Livres", + "anon-view": "Vue anonyme" }, "lang_fa": { "search": "جستجو", @@ -455,7 +474,8 @@ "config-block-url": "بلوک بر اساس URL", "config-block-url-help": "از عبارت منظم استفاده کنید", "config-theme": "پوسته", - "config-nojs": "نمایش پیوند‌های بدون جاوا اسکیریپت", + "config-nojs": "جاوا اسکریپت را در نمای ناشناس حذف کنید", + "config-anon-view": "نمایش پیوندهای مشاهده ناشناس", "config-dark": "حالت تاریک", "config-safe": "جستجوی امن", "config-alts": "جایگزینی پیوند‌های شبکه‌های اجتماعی", @@ -482,7 +502,8 @@ "maps": "نقشه‌ها", "videos": "ویدئوها", "news": "اخبار", - "books": "کتاب‌ها" + "books": "کتاب‌ها", + "anon-view": "نمای ناشناس" }, "lang_cs": { "search": "Hledat", @@ -499,7 +520,8 @@ "config-block-url": "Blokovat podle adresy URL", "config-block-url-help": "Použijte regulární výraz", "config-theme": "Motiv", - "config-nojs": "Zobrazit NoJS odkazy", + "config-nojs": "Odeberte Javascript v anonymním zobrazení", + "config-anon-view": "Zobrazit odkazy anonymního zobrazení", "config-dark": "Tmavý motiv", "config-safe": "Bezpečné vyhledávání", "config-alts": "Nahradit odkazy na sociální média", @@ -526,7 +548,8 @@ "maps": "Mapy", "videos": "Videa", "news": "Zprávy", - "books": "Knihy" + "books": "Knihy", + "anon-view": "Anonymní pohled" }, "lang_zh-TW": { "search": "搜尋", @@ -543,7 +566,8 @@ "config-block-url": "按網址屏蔽", "config-block-url-help": "使用正則表達式", "config-theme": "主題", - "config-nojs": "顯示 NoJS 連結", + "config-nojs": "在匿名視圖中刪除 Javascript", + "config-anon-view": "顯示匿名查看鏈接", "config-dark": "深色模式", "config-safe": "安全搜尋", "config-alts": "將社群網站連結換掉", @@ -570,7 +594,8 @@ "maps": "地圖", "videos": "影片", "news": "新聞", - "books": "書籍" + "books": "書籍", + "anon-view": "匿名視圖" }, "lang_bg": { "search": "Търсене", @@ -587,7 +612,8 @@ "config-block-url": "Блокиране по url", "config-block-url-help": "Използвайте регулярно изражение", "config-theme": "Стил", - "config-nojs": "Показване на връзки без JS", + "config-nojs": "Премахнете Javascript в анонимен изглед", + "config-anon-view": "Показване на анонимни връзки за преглед", "config-dark": "Тъмен режим", "config-safe": "Безопасно търсене", "config-alts": "Заменете връзките към социалните медии", @@ -614,7 +640,8 @@ "maps": "Видеоклипове", "videos": "Новини", "news": "Карти", - "books": "Книги" + "books": "Книги", + "anon-view": "Анонимен изглед" }, "lang_hi": { "search": "खोज", @@ -631,7 +658,8 @@ "config-block-url": "url द्वारा अवरोधित करें", "config-block-url-help": "रेगेक्स का प्रयोग करें", "config-theme": "विषय", - "config-nojs": "NoJS लिंक दिखाएं", + "config-nojs": "अनाम दृश्य में जावास्क्रिप्ट निकालें", + "config-anon-view": "बेनामी देखें लिंक दिखाएं", "config-dark": "डार्क मोड", "config-safe": "सुरक्षित खोज", "config-alts": "सोशल मीडिया लिंक बदलें", @@ -658,7 +686,8 @@ "maps": "वीडियो", "videos": "मैप", "news": "समाचार", - "books": "किताबें" + "books": "किताबें", + "anon-view": "अनाम दृश्य" }, "lang_ja": { "search": "検索", @@ -675,7 +704,8 @@ "config-block-url": "でブロック", "config-block-url-help": "正規表現を使用", "config-theme": "テーマ", - "config-nojs": "非JSリンクを表示", + "config-nojs": "匿名ビューでJavascriptを削除する", + "config-anon-view": "匿名のビューリンクを表示する", "config-dark": "ダークモード", "config-safe": "セーフサーチ", "config-alts": "ソーシャルメディアのリンクを置き換え", @@ -702,7 +732,8 @@ "maps": "地図", "videos": "動画", "news": "ニュース", - "books": "書籍" + "books": "書籍", + "anon-view": "匿名ビュー" }, "lang_ko": { "search": "검색", @@ -719,7 +750,8 @@ "config-block-url": "URL로 차단", "config-block-url-help": "정규 표현식 사용", "config-theme": "테마", - "config-nojs": "Show NoJS Links", + "config-nojs": "익명 보기에서 Javascript 제거", + "config-anon-view": "익명 보기 링크 표시", "config-dark": "다크 모드", "config-safe": "세이프서치", "config-alts": "소설 미디어 주소 수정", @@ -746,6 +778,7 @@ "maps": "지도", "videos": "동영상", "news": "뉴스", - "books": "도서" + "books": "도서", + "anon-view": "익명 보기" } } diff --git a/app/utils/results.py b/app/utils/results.py index c04cd36..c618555 100644 --- a/app/utils/results.py +++ b/app/utils/results.py @@ -1,6 +1,8 @@ +from app.models.config import Config from app.models.endpoint import Endpoint from bs4 import BeautifulSoup, NavigableString import copy +from flask import current_app import html import os import urllib.parse as urlparse @@ -188,7 +190,7 @@ def append_nojs(result: BeautifulSoup) -> None: result.append(nojs_link) -def append_anon_view(result: BeautifulSoup, nojs: bool) -> None: +def append_anon_view(result: BeautifulSoup, config: Config) -> None: """Appends an 'anonymous view' for a search result, where all site contents are viewed through Whoogle as a proxy. @@ -201,8 +203,13 @@ def append_anon_view(result: BeautifulSoup, nojs: bool) -> None: """ av_link = BeautifulSoup(features='html.parser').new_tag('a') - av_link['href'] = f'/{Endpoint.window}?nojs={1 if nojs else 0}&location={result["href"]}' - av_link.string = ' Anonymous View' + nojs = 'nojs=1' if config.nojs else 'nojs=0' + location = f'location={result["href"]}' + av_link['href'] = f'/{Endpoint.window}?{nojs}&{location}' + translation = current_app.config['TRANSLATIONS'][ + config.get_localization_lang() + ] + av_link.string = f'{translation["anon-view"]}' av_link['class'] = 'anon-view' result.append(av_link)