Додаток BrowserNav (Навігація у браузері) для NVDA

Цей додаток надає користувачам NVDA потужні навігаційні команди в режимі огляду. Він працює у браузерах, а також у будь-яких інших програмах, які підтримують режим огляду NVDA, наприклад у документах Word і клієнтах електронної пошти.

Наприклад, за допомогою «Навігації у браузері» ви можете знаходити вертикально вирівняні абзаци, тобто абзаци з однаковим горизонтальним зміщенням. Це можна використовувати для читання ієрархічних дерев коментарів або неправильно сформованих таблиць HTML.

Ви також можете знайти абзаци, написані однаковим розміром або стилем шрифту.

BrowserNav також надає нові команди швидкої навігації: P для наступного діалогу та Y для наступної вкладки.

Завантажити

Будь ласка, встановіть через магазин додатків.

Використання у браузерах та інших програмах, які підтримують режим огляду

BrowserNav можна використовувати для навігації за горизонтальним зміщенням з лівого краю екрана, за розміром або стилем шрифту.

Для перемикання між цими параметрами використовується кільце навігації у браузері. Залежно від налаштування цього кільця, BrowserNav вказуватиме звуковими сигналами на горизонтальне зміщення або розмір шрифту поточно вибраного елемента. Крім того, BrowserNav буде потріскувати на командах швидкого переходу, щоб показати, скільки тексту було пропущено (ця функція доступна тільки в Google Chrome і Firefox).

BrowserNav працює в будь-якому браузері, які підтримує NVDA. Хоча деякі функції можуть бути доступні не у всіх браузерах. BrowserNav також працює в інших програмах, які підтримують режим огляду NVDA, таких як документи Word і поштові клієнти.

Клавіатурні команди:

Закладки

BrowserNav 2.0 представляє новий набір функцій закладок.

Клавіатурні команди закладок

Сайти

Перше, що вам потрібно налаштувати - це сайт, на якому ви хочете створити закладки. У більшості випадків вам потрібно буде вказати тип відповідності: "Збіг доменного імені" або "Зіставлення домену та його піддоменів". Для ілюстрації останнього варіанту ви можете вказати:

Якщо вам потрібне точніше керування, ви також можете вказати точну адресу або визначити регулярний вираз для адреси.

Завдяки такому гнучкому визначенню, на кожній сторінці можуть бути одночасно активними кілька сайтів швидкого переходу.

Типи закладок

Після того, як ви налаштували визначення сайту, ви можете перейти до визначення закладок на ньому.

Зараз «Навігація у браузері» підтримує декілька типів закладок:

Створення нової закладки

Після того, як ви налаштували сайт, найпростіший спосіб створити нову закладку - перейти до потрібного абзацу в документі, натиснути NVDA+J, щоб відкрити контекстне меню закладок, і вибрати Закладки > Створити нову закладку для сайту ...

Відкриється діалог налаштувань закладок. Тепер ви можете налаштувати закладку. Ви можете змінити тип відповідності (наприклад, точний збіг абзацу чи збіг абзацу регулярного виразу).

Інші налаштування в цьому діалозі:

Розширені параметри сайту

У діалозі налаштуваннь сайту ви можете вказати низку додаткових параметрів:

Скрипти

Починаючи з Навігація у браузері v2.5 ви можете налаштовувати закладки за допомогою скриптів на Python. Скрипти можна використовувати для двох цілей: 1. Щоб покращити алгоритм відповідності, коли існуючі варіанти відповідності недостатні. Це стосується закладок Швидкого переходу, швидкого промовляння, швидкого натискання, ієрархічних та закладок пропуску перешкод. 2. Для виконання довільного коду Python з метою автоматизації певних дій на веб-сторінках. Це можна зробити за допомогою скрипта або числового скрипта закладок.

API для написання скриптів

У вашому скрипті вам надаються наступні змінні: * p - поточний абзац. Це екземпляр класу Paragraph, визначений у paragraph.py * t - поточний об'єкт textInfo.

Рекомендується працювати з абзацами, оскільки вони забезпечують більш високий рівень інтерфейсу, ніж textInfo.

Ваш скрипт повинен вирішити, чи відповідає поточний абзац вашому користувацькому правилу, чи ні. Ви можете або

Ви також можете імпортувати будь-які модулі та писати скрипти загального призначення.

Ви можете використовувати оператор print() для налагодження вашого скрипта: Результат буде показано у журналі NVDA.

Приклади скриптів

  1. Цей скрипт перевіряє, що поточний абзац є посиланням і що текст попереднього заголовка рівня 5 починається з тексту поточного абзацу: try: if controlTypes.Role.LINK in p.roles and p.previousHeading5.textInfo.text.startswith(p.text): print(f"pp5 {p.previousHeading5.textInfo.text}") return True except NotFoundError: return None
  2. Цей скрипт не виконує пошук, але активує останнє поле редагування на сторінці: ''' p.end.previous.previousEdit.activate() '''
  3. Цей скрипт знаходить ім'я користувача, яке може бути на один або два абзаци попереду; потім він знаходить початок коментаря, аналізуючи розмір шрифту; потім він знаходить кінець коментаря, шукаючи текст «Відповісти». Після цього він збігається з усім текстом коментаря і додає ім'я користувача, яке буде вимовлено перед знайденим текстом: user = p.next if user.text == "downvote": user = user.next try: username = user.text.split()[0] except IndexError: username = '?' pp = p begin = None for i in range(5): fs = pp.attributes.get(ParagraphAttribute.FONT_SIZE, []) #print(f"i={i} fs={fs}") if '9_pt' in fs: begin = pp break pp = pp.next else: return end = begin while end.text != 'reply': end = end.next match(textInfoRange(begin, end), username)
  4. Цей скрипт є генератором, тому все, що він поверне, буде використано як час сну перед виконанням наступного рядка. Скрипт працюватиме у фоновому потоці без блокування. Цей скрипт виконує низку дій:

    yield from retry(waitForDialogAndClickCheckbox, count=20) yield 500 yield from retry(lambda: p.home.find("Run Query").activate(), count=10) 6. Це числовий скрипт, оскільки він приймає `level` як вхідну змінну. Він знаходить `level`-ий блок редагування з початку сторінки (або з кінця, якщо рівень від’ємний) і викликає `script_editJupyter` на ньому. if level > 0: p = p.home for i in range(level): p = Paragraph(p.nextEdit.textInfo) elif level <= 0: level = 1-level p = p.end.previous tones.beep(500, 50) for i in range(level): p = Paragraph(p.previousEdit.textInfo) else: tones.beep(500, 50) p.textInfo.obj.currentFocusableNVDAObject = p.textInfo.focusableNVDAObjectAtStart p.textInfo.obj.script_editJupyter(None) ```

Конфігурація

Визначення закладок зберігаються у конфігураційному каталозі NVDA у файлі browserNavRules.json. Ви можете редагувати цей файл вручну або поділитися ним з кимось.

Каталог конфігурації NVDA можна знайти, відкривши меню "Пуск" і ввівши команду: Переглянути папку з користувацькими налаштуваннями NVDA.

BrowserNav початково постачається з файлом конфігурації зі зразками закладок.

Редагування напівдоступних полів редагування

Багато сучасних веб-додатків, зокрема Jupyter, використовують поля для редагування, які не дуже доступні, наприклад, вони виглядають порожніми, але ви можете копіювати текст до них і з них за допомогою комбінації клавіш Control+A, Control+C і Control+V.

BrowserNav пропонує експериментальну функцію для редагування цих полів у зручніший спосіб. Для того, щоб нею скористатися:

  1. Знайдіть поле редагування у вікні браузера.
  2. Натисніть NVDA+E.
  3. З’явиться нове вікно з вмістом цього поля редагування.
  4. Відредагуйте вміст поля редагування в цьому вікні.
  5. Закінчивши, ви можете натиснути клавішу Escape, щоб закрити доступне вікно редагування і оновити поле редагування на веб-сторінці.
  6. Крім того, ви можете натиснути комбінацію клавіш Control+Enter, Shift+Enter або Alt+Enter. Це закриє вікно редагування, оновить поле редагування і передасть жест веб-додатку.
  7. Щоб закрити вікно редагування без збереження змін, натисніть Alt+F4.
  8. У будь-який момент, якщо вміст раніше відредагованого тексту буде втрачено, натисніть NVDA+Control+E, щоб скопіювати його до буфера обміну.

Примітки:

Вихідний код

Вихідний код доступний за адресою http://github.com/mltony/nvda-indent-nav.