From 87ef762eec3c0674c061b1822ad186f607754250 Mon Sep 17 00:00:00 2001 From: Ulysses Zhan Date: Wed, 27 Aug 2025 00:59:48 -0700 Subject: [PATCH] feat: add option to match links outside tags even if links in tags are found --- assets/translations/ar.json | 1 + assets/translations/bs.json | 1 + assets/translations/ca.json | 1 + assets/translations/cs.json | 1 + assets/translations/da.json | 1 + assets/translations/de.json | 1 + assets/translations/en-EO.json | 1 + assets/translations/en.json | 1 + assets/translations/es.json | 1 + assets/translations/fa.json | 1 + assets/translations/fr.json | 1 + assets/translations/hu.json | 1 + assets/translations/id.json | 1 + assets/translations/it.json | 1 + assets/translations/ja.json | 1 + assets/translations/ko.json | 1 + assets/translations/ml.json | 1 + assets/translations/nl.json | 1 + assets/translations/pl.json | 1 + assets/translations/pt-BR.json | 1 + assets/translations/pt.json | 1 + assets/translations/ru.json | 1 + assets/translations/sv.json | 1 + assets/translations/tr.json | 1 + assets/translations/uk.json | 1 + assets/translations/vi.json | 1 + assets/translations/zh-Hant-TW.json | 1 + assets/translations/zh.json | 1 + lib/app_sources/html.dart | 10 +++++++++- 29 files changed, 37 insertions(+), 1 deletion(-) diff --git a/assets/translations/ar.json b/assets/translations/ar.json index ed6defc..89b2bc0 100644 --- a/assets/translations/ar.json +++ b/assets/translations/ar.json @@ -254,6 +254,7 @@ "verifyLatestTag": "التحقق من علامة 'الأحدث'", "intermediateLinkRegex": "تصفية للوصول إلى رابط 'وسيط'", "filterByLinkText": "تصفية الروابط حسب نص الرابط", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "لم يتم العثور على رابط وسيط", "intermediateLink": "رابط وسيط", "exemptFromBackgroundUpdates": "إعفاء من التحديثات في الخلفية (إذا تم تمكينها)", diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 74b7a2a..2a6143b 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Provjerite 'posljednu' ('latest') oznaku", "intermediateLinkRegex": "Filter za 'srednju' vezu za posjetu", "filterByLinkText": "Filtriraj linkove prema tekstu linka", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Intermediate veza nije nađena", "intermediateLink": "Intermediate veza", "exemptFromBackgroundUpdates": "Izuzmi iz ažuriranja u pozadini (ako su uključeni)", diff --git a/assets/translations/ca.json b/assets/translations/ca.json index 0968043..d640ba6 100644 --- a/assets/translations/ca.json +++ b/assets/translations/ca.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Comprova l'etiqueta 'Latest' (última versió)", "intermediateLinkRegex": "Filtra per un enllaç 'intermediari' per anar-hi", "filterByLinkText": "Filtra els enllaços pel text de l'enllaç", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "No s'ha trobat l'enllaç intermediari", "intermediateLink": "Enllaç intermediari", "exemptFromBackgroundUpdates": "Exempta d'actualitzacions en segon pla (si han estat habilitades)", diff --git a/assets/translations/cs.json b/assets/translations/cs.json index 27d4aa9..83ac306 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Ověřit značku „latest“", "intermediateLinkRegex": "Filtr pro návštěvu „prostředního“ odkazu", "filterByLinkText": "Filtrovat odkazy podle textu odkazu", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Připojený odkaz nenalezen", "intermediateLink": "Připojený odkaz", "exemptFromBackgroundUpdates": "Vyloučit z aktualizací na pozadí (je-li povoleno)", diff --git a/assets/translations/da.json b/assets/translations/da.json index 83f9f99..c72e575 100644 --- a/assets/translations/da.json +++ b/assets/translations/da.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Verificer 'seneste'-tagget", "intermediateLinkRegex": "Filtrer efter et 'mellemliggende' link at besøge", "filterByLinkText": "Filtrer links efter linktekst", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Mellemliggende link ikke fundet", "intermediateLink": "Mellemliggende link", "exemptFromBackgroundUpdates": "Undtag fra baggrundsopdateringer (hvis aktiveret)", diff --git a/assets/translations/de.json b/assets/translations/de.json index bc6bbbe..4e8268a 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -254,6 +254,7 @@ "verifyLatestTag": "„Latest“-Tag überprüfen", "intermediateLinkRegex": "Filter für einen „Zwischen“-Link, der zuerst besucht werden soll", "filterByLinkText": "Links durch Linktext filtern", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "„Zwischen“-Link nicht gefunden", "intermediateLink": "„Zwischen“-Link", "exemptFromBackgroundUpdates": "Von Hintergrundaktualisierungen (falls aktiviert) ausschließen", diff --git a/assets/translations/en-EO.json b/assets/translations/en-EO.json index 695fb25..17702dc 100644 --- a/assets/translations/en-EO.json +++ b/assets/translations/en-EO.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Inspekti la etikedon 'latest'", "intermediateLinkRegex": "Filtri por 'pera' vizitota ligilo", "filterByLinkText": "Filtri ligilojn laŭ ligiloteksto", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Netrovebla pera ligilo", "intermediateLink": "Pera ligilo", "exemptFromBackgroundUpdates": "Escepti el la fonaj ĝisdatigoj (se aktiva)", diff --git a/assets/translations/en.json b/assets/translations/en.json index 07549a6..5d58f96 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Verify the 'latest' tag", "intermediateLinkRegex": "Filter for an 'intermediate' link to visit", "filterByLinkText": "Filter links by link text", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Intermediate link not found", "intermediateLink": "Intermediate link", "exemptFromBackgroundUpdates": "Exempt from background updates (if enabled)", diff --git a/assets/translations/es.json b/assets/translations/es.json index b8c9fe0..6a42eda 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Comprobar etiqueta 'Latest'", "intermediateLinkRegex": "Filtrar por enlace 'intermedio' para visitar primero", "filterByLinkText": "Filtrar enlaces por texto del enlace", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Enlace intermedio no encontrado", "intermediateLink": "Enlace intermedio", "exemptFromBackgroundUpdates": "No actualizar en segundo plano (si está habilitado)", diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 48a4c69..7a46917 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -254,6 +254,7 @@ "verifyLatestTag": "برچسب \"آخرین\" را تأیید کنید", "intermediateLinkRegex": "برای بازدید از پیوند «میانگین» فیلتر کنید", "filterByLinkText": "لینک ها را بر اساس متن پیوند فیلتر کنید", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "لینک میانی پیدا نشد", "intermediateLink": "پیوند میانی", "exemptFromBackgroundUpdates": "معاف از به‌روزرسانی‌های پس‌زمینه (در صورت فعال بودن)", diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 826e7c9..cafd145 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Vérifier la balise 'latest'", "intermediateLinkRegex": "Filtrer un lien 'intermédiaire' à visiter", "filterByLinkText": "Filtrer les liens par texte du lien", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Lien intermédiaire introuvable", "intermediateLink": "Lien intermédiaire", "exemptFromBackgroundUpdates": "Exclure des mises à jour en arrière-plan (si activées)", diff --git a/assets/translations/hu.json b/assets/translations/hu.json index fd27459..2aa1d4c 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Ellenőrizze a „legújabb” címkét", "intermediateLinkRegex": "Szűrő egy „köztes” hivatkozás felkereséséhez", "filterByLinkText": "Hivatkozások szűrése hivatkozásszöveg alapján", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Köztes hivatkozás nem található", "intermediateLink": "Köztes hivatkozás", "exemptFromBackgroundUpdates": "Mentes a háttérben történő frissítések alól (ha engedélyezett)", diff --git a/assets/translations/id.json b/assets/translations/id.json index 4258754..902517d 100644 --- a/assets/translations/id.json +++ b/assets/translations/id.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Verifikasi label 'terbaru'", "intermediateLinkRegex": "Filter tautan 'perantara' untuk dikunjungi", "filterByLinkText": "Filter tautan berdasarkan teks tautan", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Tautan perantara tidak ditemukan", "intermediateLink": "Tautan perantara", "exemptFromBackgroundUpdates": "Dikecualikan dari pembaruan latar belakang (jika diaktifkan)", diff --git a/assets/translations/it.json b/assets/translations/it.json index d060e66..f5d51f8 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Verifica l'etichetta 'Latest'", "intermediateLinkRegex": "Filtro per un collegamento 'intermedio' da visitare", "filterByLinkText": "Filtra i collegamenti in base al testo del collegamento", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Link intermedio non trovato", "intermediateLink": "Collegamento intermedio", "exemptFromBackgroundUpdates": "Esente da aggiornamenti in secondo piano (se attivo)", diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 4ffc54e..a2b7a8a 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -254,6 +254,7 @@ "verifyLatestTag": "'latest'タグを確認する", "intermediateLinkRegex": "訪問する「中間」リンクのフィルター", "filterByLinkText": "テキストでリンクをフィルタリングする", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "中間リンクが見つかりませんでした", "intermediateLink": "中間リンク", "exemptFromBackgroundUpdates": "バックグラウンドアップデートを行わない (有効な場合)", diff --git a/assets/translations/ko.json b/assets/translations/ko.json index 678df6c..9522e2e 100644 --- a/assets/translations/ko.json +++ b/assets/translations/ko.json @@ -254,6 +254,7 @@ "verifyLatestTag": "'최신' 태그 확인", "intermediateLinkRegex": "'중간' 링크 방문 필터", "filterByLinkText": "링크 텍스트로 링크 필터링", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "중간 링크를 찾을 수 없습니다", "intermediateLink": "중간 링크", "exemptFromBackgroundUpdates": "백그라운드 업데이트에서 제외 (활성화된 경우)", diff --git a/assets/translations/ml.json b/assets/translations/ml.json index 0f81d1c..932ae23 100644 --- a/assets/translations/ml.json +++ b/assets/translations/ml.json @@ -254,6 +254,7 @@ "verifyLatestTag": "'ഏറ്റവും പുതിയ' ടാഗ് പരിശോധിക്കുക", "intermediateLinkRegex": "സന്ദർശിക്കാൻ ഒരു 'ഇന്റർമീഡിയറ്റ്' ലിങ്കിനായി ഫിൽട്ടർ ചെയ്യുക", "filterByLinkText": "ലിങ്ക് ടെക്സ്റ്റ് ഉപയോഗിച്ച് ലിങ്കുകൾ ഫിൽട്ടർ ചെയ്യുക", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "ഇന്റർമീഡിയറ്റ് ലിങ്ക് കണ്ടെത്തിയില്ല", "intermediateLink": "ഇന്റർമീഡിയറ്റ് ലിങ്ക്", "exemptFromBackgroundUpdates": "ബാക്ക്ഗ്രൗണ്ട് അപ്‌ഡേറ്റുകളിൽ നിന്ന് ഒഴിവാക്കുക (പ്രവർത്തനക്ഷമമാക്കിയിട്ടുണ്ടെങ്കിൽ)", diff --git a/assets/translations/nl.json b/assets/translations/nl.json index a9846fd..711ac2e 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Het label 'Laatste' verifiëren", "intermediateLinkRegex": "Filteren op een 'Intermediaire' link om te bezoeken", "filterByLinkText": "Links filteren op linktekst", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Intermediaire link niet gevonden", "intermediateLink": "Intermediaire link", "exemptFromBackgroundUpdates": "Vrijgesteld van achtergrond-updates (indien ingeschakeld)", diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 0c84a29..b674d5b 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Zweryfikuj najnowszy tag", "intermediateLinkRegex": "Filtr linków \"pośrednich\" do odwiedzenia w pierwszej kolejności", "filterByLinkText": "Filtruj linki według tekstu linku", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Nie znaleziono linku pośredniego", "intermediateLink": "Link pośredni", "exemptFromBackgroundUpdates": "Wyklucz z uaktualnień w tle (jeśli są włączone)", diff --git a/assets/translations/pt-BR.json b/assets/translations/pt-BR.json index d9c89ef..461ea17 100644 --- a/assets/translations/pt-BR.json +++ b/assets/translations/pt-BR.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Verificar a tag 'mais recente'", "intermediateLinkRegex": "Filtrar por um link 'intermediário' para visitar", "filterByLinkText": "Filtrar links por texto do link", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Link intermediário não encontrado", "intermediateLink": "Link intermediário", "exemptFromBackgroundUpdates": "Isento de atualizações em segundo plano (caso ativadas)", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index a479a98..8e537f2 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Verifique a 'última' etiqueta", "intermediateLinkRegex": "Filtrar um link 'intermediário' para visitar", "filterByLinkText": "Filtrar links pelo texto do link", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Link intermediário não encontrado", "intermediateLink": "Link intermediário", "exemptFromBackgroundUpdates": "Isento de atualizações em segundo-plano (se ativadas)", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index bcb4bf9..ba98074 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Проверять метку «latest»", "intermediateLinkRegex": "Фильтр для «промежуточной» ссылки для посещения", "filterByLinkText": "Фильтрация ссылок по тексту ссылки", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Промежуточная ссылка не найдена", "intermediateLink": "Промежуточная ссылка", "exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)", diff --git a/assets/translations/sv.json b/assets/translations/sv.json index 5672f1e..4f8e8a8 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Verifiera 'senaste'-taggen", "intermediateLinkRegex": "Filtrera för en \"mellanliggande\" länk att besöka", "filterByLinkText": "Filtrera länkar efter länktext", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Mellanlänk hittades inte", "intermediateLink": "Mellanlänk", "exemptFromBackgroundUpdates": "Undta från bakgrundsuppdateringar (om aktiverad)", diff --git a/assets/translations/tr.json b/assets/translations/tr.json index 30511a0..0ac5182 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -254,6 +254,7 @@ "verifyLatestTag": "'latest' etiketini doğrula", "intermediateLinkRegex": "Ziyaret Edilecek 'Orta Düzey' Bağlantıyı Filtrele", "filterByLinkText": "Bağlantıları bağlantı metnine göre filtrele", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Ara bağlantı bulunamadı", "intermediateLink": "Ara bağlantı", "exemptFromBackgroundUpdates": "Arka plan güncellemelerinden muaf tut (etkinse)", diff --git a/assets/translations/uk.json b/assets/translations/uk.json index f2053a2..bd315fa 100644 --- a/assets/translations/uk.json +++ b/assets/translations/uk.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Перевірити тег 'latest'", "intermediateLinkRegex": "Фільтр для 'Проміжного' Посилання для Відвідування", "filterByLinkText": "Фільтрувати посилання за текстом посилання", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Проміжне посилання не знайдено", "intermediateLink": "Проміжне посилання", "exemptFromBackgroundUpdates": "Виключено з фонових оновлень (якщо ввімкнено)", diff --git a/assets/translations/vi.json b/assets/translations/vi.json index 90a6def..145285e 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -254,6 +254,7 @@ "verifyLatestTag": "Xác minh thẻ 'mới nhất'", "intermediateLinkRegex": "Lọc tìm liên kết 'Trung cấp' để truy cập", "filterByLinkText": "Lọc liên kết theo văn bản liên kết", + "matchLinksOutsideATags": "Match links outside tags", "intermediateLinkNotFound": "Không tìm thấy liên kết trung gian", "intermediateLink": "Liên kết trung gian", "exemptFromBackgroundUpdates": "Miễn cập nhật nền (nếu được bật)", diff --git a/assets/translations/zh-Hant-TW.json b/assets/translations/zh-Hant-TW.json index b926867..a8eb1d1 100644 --- a/assets/translations/zh-Hant-TW.json +++ b/assets/translations/zh-Hant-TW.json @@ -254,6 +254,7 @@ "verifyLatestTag": "驗證「最新」標籤", "intermediateLinkRegex": "過濾要存取的「中間」連結", "filterByLinkText": "按連結文字過濾連結", + "matchLinksOutsideATags": "匹配 標籤外的連結", "intermediateLinkNotFound": "沒有找到中間連結", "intermediateLink": "中間連結", "exemptFromBackgroundUpdates": "免除背景更新(若已啟用)", diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 120d879..296e9c7 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -254,6 +254,7 @@ "verifyLatestTag": "验证“Latest”标签", "intermediateLinkRegex": "筛选中转链接的正则表达式", "filterByLinkText": "根据链接文本进行筛选", + "matchLinksOutsideATags": "匹配 标签外的链接", "intermediateLinkNotFound": "未找到中转链接", "intermediateLink": "中转链接", "exemptFromBackgroundUpdates": "禁用后台更新(仅此应用生效,即使已启用全局后台更新)", diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 08c070e..22f5f3d 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -129,6 +129,8 @@ Future>> grabLinksCommon( Uri reqUrl, Map additionalSettings, ) async { + bool matchLinksOutsideATags = + additionalSettings['matchLinksOutsideATags'] == true; var html = parse(rawBody); List> allLinks = html .querySelectorAll('a') @@ -143,7 +145,7 @@ Future>> grabLinksCommon( .where((element) => element.key.isNotEmpty) .map((e) => MapEntry(ensureAbsoluteUrl(e.key, reqUrl), e.value)) .toList(); - if (allLinks.isEmpty) { + if (allLinks.isEmpty || matchLinksOutsideATags) { allLinks = getLinksInLines(rawBody); } if (allLinks.isEmpty) { @@ -247,6 +249,12 @@ class HTML extends AppSource { ]; var commonFormItems = [ [GeneratedFormSwitch('filterByLinkText', label: tr('filterByLinkText'))], + [ + GeneratedFormSwitch( + 'matchLinksOutsideATags', + label: tr('matchLinksOutsideATags') + ), + ], [GeneratedFormSwitch('skipSort', label: tr('skipSort'))], [GeneratedFormSwitch('reverseSort', label: tr('takeFirstLink'))], [