Копировать компонент темы Codeblocks

:warning: Этот компонент темы теперь устарел в пользу Копирование содержимого блока кода в буфер обмена, основной функции Discourse.

:sun_with_face: Предпросмотр в Theme Creator
:computer: Репозиторий Git: https://github.com/discourse/discourse-copy-codeblocks
:bulb: Как установить тему или компонент темы?

Этот компонент темы добавляет кнопку копирования к блокам кода внутри сообщений Discourse — идеально подходит для сообществ, публикующих примеры кода или статьи базы знаний, требующие копирования текста.

На настольных компьютерах кнопка копирования появляется при наведении курсора на блок.

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

Обратите внимание, что это работает только для блоков кода, созданных с помощью ``` ```, а не для встроенных блоков кода.

Это блок кода.
Скопируйте этот текст.

Это встроенный блок кода. Копирование здесь не работает.

Огромная благодарность @j.jaffeux, который выполнил значительную часть начальной разработки этого компонента.

24 лайка

В чём разница между этим и https://meta.discourse.org/t/copy-option-for-code-blocks-in-discourse/60961?u=falco?

7 лайков

Несколько преимуществ:

  • не требует подключения полной библиотеки буфера обмена
  • не зависит от jQuery
  • не приводит к утечке обработчиков событий
  • не опирается на множественные события
  • использует актуальные стандарты кодирования
  • не содержит ошибки с кавычками

Не уверен, что это корректно работает и на мобильных устройствах.

15 лайков

Отлично!

Интересно, рассматриваем ли мы возможность замены локализованного текста «Копировать»/«Скопировано» на иконки? Например, иконку копирования для «Копировать» и иконку галочки для «Скопировано»?

3 лайка

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

7 лайков

Похоже, нам стоит удалить или устареть одно из них и объединить усилия? :thinking:

7 лайков

Мелочь, но задержка копирования на моём iPhone слишком короткая: надпись «Скопировано» должна отображаться около 3 секунд перед тем, как исчезнуть.

Выглядит отлично :+1:

8 лайков

Изменено здесь:

https://github.com/discourse/discourse-copy-codeblocks/commit/d1af36a4a5197dab4ca1dd62a05930088882de45

Также исправлено несколько ошибок в старых версиях Discourse, где отсутствуют @ember/runloop и Promise из библиотеки rsvp. (Спасибо @jomaxro за сообщения об этих проблемах)

7 лайков

Извините, но одного :heart: на этот раз недостаточно.

Супер! Это здорово. В сочетании с Placeholder Forms это действительно круто.

Что я только что с этим сделал

sfdisk -d /dev/=gooddev= | sfdisk /dev/=newdev=
mdadm --manage /dev/md1 --add /dev/=newdev=
mdadm --detail /dev/md1

Посмотрите, как это работает!

while true; do mdadm --detail /dev/md1|grep "Rebuild Status" ; sleep 10;done

Получите время работы для всех дисков

for x in a b c d ; do smartctl -a /dev/sd$x|grep Power_On; done
12 лайков

Мне это очень нравится! :heart_eyes: Но можно ли сделать кнопку копирования видимой только при нажатии на мобильных устройствах? Меня немного расстраивает постоянная потеря места на экране на мобильных: для каждого блока кода добавляется лишняя строка:

Хотя с другой стороны, я понимаю,

  • блоки кода не так уж часто встречаются
  • так как это опционально, вы включите это только на сайтах, где копирование блоков кода действительно является распространённым действием

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

Не срочно.

3 лайка

Да, это вполне справедливое требование :+1: Я тоже разделяю эту обеспокоенность, мы найдём решение.

1 лайк

Даже это, я думаю, было бы предпочтительнее на мобильных устройствах. Выравнивание немного сбито, но суть понятна:

(Даже если это перекрывает текст и т. д., не уверен, что это усложнит или упростит задачу по сравнению с отображением по нажатию? :thinking:)

У нас изначально это было, но текст перекрывался, и его нельзя было увидеть. Мне нравится идея сделать его видимым при нажатии. Изучу этот вопрос.

1 лайк

На мобильных устройствах это гораздо более приемлемый компромисс, и очень даже. На ноутбуке, настольном компьютере или планшете дополнительное занимаемое пространство абсолютно нормально.

1 лайк

Здравствуйте,

Я бы с радостью использовал эту функцию, но как только я включил её для моей темы Grey Amber, мой сайт стал работать медленно и иногда становился неответчивым, пока я её не отключил.

У кого-нибудь было такое поведение, или это может так сильно нагружать VPS при включении?

Сайт на 99,9% состоит из отдельных строк кода, и я надеялся переключить их в блоки кода, так что, вроде бы, не должно быть попытки извлекать и конвертировать существующий код. Или всё-таки есть?

Должен ли я подождать какое-то время, чтобы всё нормализовалось? Сайт просто периодически падал, а когда страница иногда всё же загружалась, появлялась ошибка и сообщение от Discourse «попробуйте снова».

Заранее спасибо.

2 лайка

Ого, звучит как серьёзная ошибка!

1 лайк

Мелкий баг: текст «copy» может появляться в цитате. (Гораздо менее серьёзно, чем в предыдущем посте.)

Необходимо исключить button.copy-cmd из цитаты. Применение user-select: none в CSS исправляет работу Ctrl-C, но не функционал цитирования.

3 лайка

У вас есть ссылка на ваш сайт? Кажется очень странным, что тема могла стать причиной этого. Сколько блоков кода у вас на странице?

Итак, я внес несколько изменений. Учитывая наши проблемы:

  • нехватка места на экране в мобильной версии
  • ошибка копирования текста в цитатах
  • и запрос на использование иконки вместо текста

Очевидным решением, устраняющим все эти проблемы, стало использование иконки.

На мобильных устройствах теперь допустимо размещать её справа, так как она занимает меньше места, а для текста можно просто добавить отступы:

Единственное небольшое неудобство: на длинных первых строках иконка может перекрываться кнопкой, но, думаю, это приемлемо, так как можно прокрутить страницу:

На рабочем столе всё работает как раньше, но без ошибки цитирования:

Что касается возможной проблемы с производительностью, я протестировал страницу с десятками блоков кода и не обнаружил никаких проблем. Поэтому мне потребуется воспроизведение ошибки, прежде чем я смогу что-то сделать @lcestou, пожалуйста.

Попробуйте новый блок кода здесь:

rsync -a file.txt file_backup.txt
rsync -a /var/www/public_html/ /var/www/public_html_backup/
7 лайков

Эта функция теперь входит в ядро Discourse :tada:

В связи с этим компонент темы объявлен УСТАРЕВШИМ. Он по-прежнему будет работать на старых версиях Discourse, но больше не будет получать обновлений.

Я обновил первое сообщение, чтобы отразить эту информацию.

5 лайков