Контекст строки для ссылок GitHub в одной коробке

Если для ссылки на GitHub указана одна строка, onebox отображает её с контекстом:

https://github.com/guildai/guildai/blob/master/examples/get-started/mnist_mlp.py#L16

Если указаны несколько строк, onebox отображает их без контекста:

https://github.com/guildai/guildai/blob/master/examples/get-started/mnist_mlp.py#L16-L18

Я понимаю логику такого различия. Однако я хотел бы отображать контекст и для диапазона строк. Есть ли какой-то хитрый способ сделать это?

Также можно ли настроить количество отображаемых строк контекста?

Думаю, это зависит от того, сколько строк вы указываете (5? 500?), но я согласен, что это немного непоследовательно.

На данный момент это не настраивается. Однако интересно: зачем нужен контекст, если можно просто запросить L12-L20?

Это, по сути, два запроса на добавление функций в одном :slight_smile: Понимаю, вы хотите, чтобы строки «подсвечивались», а вокруг них добавлялся контекст? Это может быть полезно для выделения 2–5 строк, но огромный жёлтый блок выглядел бы слишком навязчиво.

В данном случае я провожу читателя через серию изменений в файле. Контекст важен в каждом случае, независимо от того, выделяю ли я одну строку или несколько.

Компонент уже умеет выделять одну строку с контекстом. В моём случае требуется применить такое же поведение к нескольким строкам.

Я понимаю обоснованность текущей схемы, но считаю, что есть веские аргументы в поддержку выделения нескольких строк с контекстом.

Если Onebox пока не настраивается за пределами самой ссылки, это нужно реализовать. Возможно, что-то вроде этого?

<span
  data-onebox-highlight="true"
  data-onebox-context="5"
  >https://github.com/.../get-started/mnist_mlp.py#L16-L18</span>

Здесь не так много нового, кроме настройки того, как компонент форматирует и отображает данные.

На первый взгляд, это изменение должно быть реализовано только на бэкенде. Обратите внимание на различия между этими двумя ответами onebox.json:

Как и следовало ожидать, в одном случае есть контекст с выделенной строкой highlight, а в другом — нет.

Если бэкенд можно настраивать для каждого запроса, то достаточно применить существующие правила форматирования. На мой взгляд, текущая реализация предполагает одну строку для выделения. Изменение для поддержки диапазона строк минимально (например, использовать массив строк для выделения и проверять наличие).

Возможно, для таких случаев подойдёт что-то вроде этого, если они на 100% являются выбросами. Проблема в том, что это конфликтует с GitHub, что не очень хорошо.

https://github.com/.../get-started/mnist_mlp.py?#L16-L18-context-3

Или, возможно, просто включать контекст по умолчанию, если регион содержит 4 строки или меньше.

Лично я бы избегал неявного поведения. У меня уже есть пример, который показывает пять строк :slight_smile:

Я реализовал обходное решение, использующее компонент темы, который ищет обёрточный div с конфигурацией для вложенной ссылки на GitHub. Компонент ожидает события изменения DOM, чтобы узнать, когда ссылка заменена на строки кода, а затем работает с состоянием li.selected для выбора. Этот хак не изменяет извлечённые строки, поэтому не может добавлять или удалять контекст.

Думаю, явный метод управления поведением лучше, чем изменение любых настроек по умолчанию или попытка сделать компонент «умнее».

Передача конфигурации/настроек в самом URL могла бы сработать, но это подрывает семантическое значение ссылки. Если использование обёрточного тега невозможно, полагаю, вы хотели бы хотя бы убрать специфичные для onebox настройки.