feat(happ): add routing editor, optional ad blocking, and LAN bypass preset (#6545)

* feat(happ): make ad blocking optional in routing presets

Add an independent AdBlock toggle for Iran, China, and global presets, applied only when generating routing rules. Update the China preset to Bypass-CN and cover preset behavior and localized controls.

* feat: add visual routing editor with JSON support and localization updates

- Implemented a new modal for editing routing profiles with basic and advanced tabs.
- Added functionality to load, parse, and generate routing profiles in JSON format.
- Enhanced user experience with validation and error handling for JSON input.
- Updated translations for Russian, Turkish, Ukrainian, Vietnamese, Chinese (Simplified and Traditional) to include new routing editor terms.
- Created helper functions for managing routing profiles and generating deep links.
- Added unit tests for routing editor functionalities and JSON handling.

* feat: update routing editor to preserve null lists in profiles and enhance validation messages
This commit is contained in:
NgaiYeanCoi
2026-09-27 04:57:01 +08:00
committed by GitHub
parent 94fa317e76
commit 5e15120cec
22 changed files with 1363 additions and 209 deletions
+15 -4
View File
@@ -1572,9 +1572,11 @@
"subHappPerAppList": "Пакеты приложений Android",
"subHappPerAppListDesc": "Имена пакетов Android-приложений для включения или исключения через запятую (например, org.telegram.messenger).",
"subHappPresetIran": "Обход сайтов Ирана (Iran Bypass)",
"subHappPresetChina": "Обход сайтов Китая (China Direct)",
"subHappPresetAdblock": "Блокировка рекламы (AdBlock)",
"subHappPresetChina": "Китай напрямую (Bypass-CN)",
"subHappIncludeAdblock": "Добавить AdBlock",
"subHappApplyPreset": "Применить шаблон",
"subHappPresetGlobal": "Полный прокси (Global)",
"subHappPresetLocal": "Всё через прокси, локальная сеть напрямую",
"subHappPresetOff": "Отключить маршрутизацию (happ://routing/off)",
"subHappColorBlue": "Синий (стандартный / по умолчанию)",
"subHappColorGreen": "Зеленый (успех)",
@@ -1598,9 +1600,18 @@
"subHappPerAppBypass": "Обход (исключить выбранные приложения)",
"subHappPresetApplied": "Пресет маршрутизации Happ успешно применен",
"subHappPresets": "Пресеты маршрутизации",
"subHappPresetsDesc": "Готовые конфигурации маршрутизации для клиентов Happ.",
"subHappPresetsDesc": "Выберите базовый шаблон и при необходимости включите блокировку рекламы, затем примените его для замены текущих правил маршрутизации.",
"subHappVisualBuilder": "Визуальный конструктор правил",
"subHappVisualBuilderDesc": "Генератор диплинков маршрутизации на основе списков доменов и IP.",
"subHappVisualBuilderDesc": "Загрузите текущий профиль маршрутизации и отредактируйте его правила или полный JSON.",
"subHappEditorBasic": "Основные правила",
"subHappEditorAdvanced": "Расширенный редактор",
"subHappEditorListHint": "Одно правило на строку. Остальные поля профиля сохраняются.",
"subHappEditorAdvancedHint": "Редактируйте полный JSON-профиль. Изменения синхронизируются с вкладкой основных правил.",
"subHappEditorInvalidJson": "Введите объект JSON. Списки маршрутизации, если они присутствуют, должны быть массивами строк или null.",
"subHappEditorLoadInvalid": "Текущие правила не являются допустимой ссылкой маршрутизации Happ или JSON-профилем.",
"subHappEditorLoadRemote": "Здесь нельзя загрузить удалённые URL. Сначала вставьте ссылку маршрутизации Happ или JSON-профиль.",
"subHappEditorLoadOff": "Маршрутизация отключена. Примените шаблон или очистите правила маршрутизации, чтобы создать профиль.",
"subHappEditorNew": "Текущих правил нет. Начните с пустого пользовательского профиля.",
"subHappBuildDeeplink": "Сгенерировать диплинк",
"subHappModalTitle": "Визуальный конструктор правил маршрутизации Happ",
"subHappDirectDomains": "Прямые домены (Direct)",