Расширение Chrome 'Clip To Discourse'

Уважаемое сообщество Discourse, вот мой небольшой рождественский подарок :wrapped_gift: для всех вас :christmas_tree:. Он прост, но полезен, и был создан исключительно потому, что я сам этого хотел.

Вдохновившись отличным блогом Саймона Уиллисона о использовании LLM для разработки, я в стиле «вайб-кодинга» создал это расширение на Рождество, между социальными мероприятиями, просмотром фильмов и упаковкой подарков! Я не написал ни строчки кода, но я проверял код и руководил работой LLM. Всё управлялось на основе файлов spec.md и roadmap.md.

Для чего это нужно?

Я использую собственный Discourse в качестве блокнота, дневника, блога, резюме, вики, инструмента ИИ и базы знаний разработчика. Часто я обнаруживаю, что хочу «сохранить» (clip) контент из интернета (заголовок страницы + URL) и сразу поместить его в свой Discourse, откуда я могу включить его в заметку или запись в дневнике.

Мои потребности просты, поэтому это решение довольно базовое: оно просто публикует заголовок страницы и URL, хотя в будущем я хотел бы добавить опции «Включить фрагмент страницы» и «Сохранить всю страницу».

Конфиденциальность

Возможности

  • Сохраняет заголовок страницы и URL. Опции «фрагмент страницы» или «полный текст страницы» реализованы, но пока работают довольно примитивно (однако ваш ИИ в Discourse мог бы позже сделать для вас сводку на вашем экземпляре Discourse?..)
  • Создаёт новые темы для каждого сохранённого фрагмента или добавляет фрагменты как ответы в существующую тему.
  • Поддерживает несколько профилей, позволяя хранить несколько API-ключей, целевые экземпляры Discourse и настройки по умолчанию для различных сценариев использования.
  • Значок Clip To Discourse автоматически меняется, отображая фавиконку выбранного в данный момент профиля сайта, чтобы вы легко понимали, куда вы сохраняете фрагмент!

Ограничения

  • Главное ограничение заключается в том, что администратор должен создать для вас пользовательский API-ключ на том экземпляре Discourse, куда вы сохраняете фрагменты. Для меня это не проблема, так как я являюсь главным администратором всех экземпляров Discourse, для которых планирую использовать это расширение.

  • Очевидно, что если возможность «Clip To Discourse» будет доступна слишком большому числу пользователей, это может привести к大量 низкокачественных публикаций на общем или публичном экземпляре Discourse. Поэтому я в первую очередь ориентирован на тех из вас, кто, как и я, использует Discourse в качестве личного блокнота.

Как установить

  • (Опционально, но рекомендуется) «Закрепите» расширение на панели инструментов браузера.
  • Создайте пользовательский API-ключ для одного пользователя со следующими точными правами доступа: Topics: read (используется только для проверки соединения), write и update.

  • Определите категорию, в которую должны попадать сохранённые фрагменты. Если вы хотите, чтобы каждый фрагмент создавал новую тему, вам нужен только ID категории. При просмотре категории этот ID указан в URL следующим образом: https://discourse.yourdomain.com/c/CategoryName/CategoryID.

  • Вы также можете указать тему, на которую будут отвечать фрагменты, и все сохранённые фрагменты будут добавлены как новые ответы в эту тему. Чтобы получить ID темы, также используйте URL: при просмотре темы этот ID указан в URL следующим образом: https://discourse.yourdomain.com/t/TopicTitle/TopicID.

  • Нажмите на значок расширения, чтобы открыть всплывающее окно, перейдите в Настройки, чтобы настроить API-ключ и задать параметры по умолчанию. Обратите внимание, что вы можете создать несколько «профилей» для различных экземпляров Discourse, которые вы, возможно, захотите использовать.

  • Сохраните настройки и (опционально) проверьте соединение, которое прочитает одну тему, чтобы убедиться, что API-соединение работает.

  • Закройте Настройки и сохраните что-нибудь для проверки!

Изображения

План разработки

  • Функции «Включить фрагмент страницы» и «Сохранить всю страницу» могут потребовать дополнительной проверки и доработки. Альтернативно, эта функция могла бы позволять пользователю выбирать область текста для сохранения в качестве фрагмента.

  • Я не планирую создавать расширения для Firefox или Safari (так как не использую эти браузеры), но был бы рад, если бы кто-то взялся за задачу портирования этого расширения. Мы могли бы сотрудничать, чтобы всё оставалось в одном репозитории и сохранялась функциональная совместимость.

  • Возможно, рассмотрю реализацию потока API пользователя Discourse, чтобы API-ключи не нужно было создавать администраторам, однако API пользователя работает через OAuth-поток, поэтому это не будет простой альтернативой «plug-and-play».

Связанные обсуждения

Запрос на инструмент, аналогичный этому: Chrome/Firefox extension "Share to discourse" - #28 by supermathie

Соответствующий пост с предложением дополнительных функций при сохранении контента из Discourse: Need Web Clipper for Discourse Post

Социальный обмен — это родственная концепция, но она использует простые URL: Social Share

Отзывы, идеи и вклад

Эта тема — отличное место для любых ваших отзывов. Я открыт к идеям по улучшению, пока они не усложняют расширение и/или не делают его менее полезным для меня!

Если вы хотите открыть проблемы (issues) или сделать запросы на слияние (PR), репозиторий GitHub находится здесь:

Это расширение — бесплатное, с открытым исходным кодом и ориентированное на конфиденциальность средство, созданное для сообщества Discourse моей компанией Koloki.co

13 лайков

Отличное расширение :clap:

1 лайк

Это может быть и мой вариант использования. В идеале, при сохранении в новую тему, он должен использовать ссылку-превью (featured link), я активно использую эту функцию (игнорируйте пользовательскую разметку):

Мне также подошло бы, если бы при сохранении импортировался выделенный на странице текст, но я не уверен, что это возможно.

Представляю это так: я нахожусь на странице с интересным текстом. Я выделяю текст, сохраняю его в новую тему, и система:

  • Добавляет ссылку на страницу как ссылку-превью
  • Устанавливает заголовок темы равным заголовку сохранённой страницы
  • Помещает выделенный HTML-контент в тело сообщения

Редактирование: для первых двух шагов отличное решение Дэвида работает очень хорошо. Оно требует от меня вручную опубликовать тему, но для моего случая это вполне приемлемо :thinking:

1 лайк

У меня была такая же идея очень давно, но реализовать её удалось только неделю назад.

Отдельно от Discourse я уже давно использую расширение для браузера SingleFile. Оно сохраняет текущую страницу в виде одного HTML-файла, максимально точно воспроизводя то, что вы видите, чтобы можно было читать её офлайн. В моей папке ~/Downloads лежат бесчисленные HTML-файлы.

Поскольку информация в интернете не остаётся там вечно, самый надёжный способ — сохранить то, что вы видите сейчас, на своём компьютере в точности таким, каким оно есть.

У меня уже есть множество сохранённых HTML-файлов, и в будущем их станет ещё больше, поэтому я задумался о функции, которая позволила бы импортировать эти файлы в Discourse для просмотра и управления ими там.

Если вы планируете добавить функцию для «скрапинга» или сохранения контента с веб-сайтов, она будет во многом пересекаться с тем, что уже отлично делает расширение SingleFile.

Было бы здорово, если бы существовал способ прямой интеграции с SingleFile или импорта HTML-файлов.

2 лайка

Спасибо за ссылку на расширение SingleFile — это отличный инструмент, и я, скорее всего, не стану пытаться дублировать его функционал или слишком сильно пересекаться с ним. У меня тоже есть такая же задача — просто сохранить рабочую версию страницы в одном HTML-файле, поэтому я тоже установил SingleFile. Я не знал об этом замечательном расширении!

После установки «Clipped To Discourse» вы также можете загрузить этот HTML-файл как вложение к сообщению. Именно так я, вероятно, стал бы его использовать — как альтернативу archive.org.

В будущих версиях Clip To Discourse я планирую сосредоточиться на:

  • Выбранном пользователем диапазоне текста, который будет сохранён как отрывок;
  • Улучшенном форматировании Markdown для этого отрывка.

Небольшие обновления для Clip To Discourse в версии 0.19.2

  • Улучшено вырезание «Всей страницы» (используется Mozilla Readability для более точного и удобочитаемого извлечения текста со страницы).
  • Введён лимит в 50 000 символов для текста в сообщениях (тело темы в Discourse не может превышать 50 тысяч символов, иначе возникают ошибки).

Источник: GitHub - koloki-co/clip-to-discourse-chromium-extension: A Chromium Browser extension which clips web content to your private Discourse. · GitHub
Chrome Web Store: https://chromewebstore.google.com/detail/copdhiejkkdblhdcdjapcoalldkondhi?utm_source=item-share-cb

1 лайк

Обновление: v0.19.5 — Поддержка выделения текста

Только что выпущена новая версия Clip To Discourse

Что нового

  • Автоматическое определение выделения: Когда на странице выделен текст, расширение теперь автоматически обнаруживает его и показывает, что именно будет скопировано (количество символов и слов)
  • Новый стиль копирования «Выделенный текст»: Присоединяется к существующим вариантам «Заголовок + URL», «Выдержка» и «Полный текст» в качестве четвертого стиля копирования
  • Умное автовыделение: При выделении текста расширение автоматически переключается в режим «Выделенный текст», чтобы вы точно знали, что копируете
  • Контекстное меню при щелчке правой кнопкой: Добавлен простой пункт контекстного меню «Копировать в Discourse», открывающий всплывающее окно (работает как с выделением, так и без него)
  • Настраиваемый шаблон: Шаблон для выделенного текста можно настроить в параметрах, как и для других стилей копирования

Это позволяет очень быстро выделить цитату или фрагмент и скопировать его напрямую в ваш Discourse с правильным контекстом (заголовок страницы + URL + ваш выделенный текст).

Скоро

В настоящее время мы работаем над реализацией потока Discourse User API, который позволит пользователям авторизовывать расширение через OAuth без необходимости создания API-ключей администратором. Это сделает расширение гораздо проще в использовании на общих или публичных экземплярах Discourse!

1 лайк