Заменить только иконку ссылки для обмена

Мне кажется, что эта часть интерфейса Discourse запутанна. В редакторе иконка ссылки используется для вставки гиперссылки (что логично, именно так она должна работать, и это совпадает с 99% других интерфейсов)

Однако при просмотре поста та же иконка используется для ссылки/социального обмена.

Хотя на самом деле здесь было бы логичнее использовать более привычную иконку «Поделиться» share-icon

Некоторое время я использовал подход через API для изменения иконки

  <script type="text/discourse-plugin" version="0.8">
    api.replaceIcon('link', 'external-link-tab');
 </script>

Но это также меняет иконку в редакторе, поэтому использовать иконку «Поделиться» для обозначения вставки гиперссылки становится бессмысленно. Было бы полезно, если бы существовали отдельные вызовы API для указания двух контекстов этой кнопки, чтобы я мог заменить её на иконку «Поделиться ссылкой», но не на иконку «Вставить ссылку».

??? (мои знания о внутреннем устройстве Discourse в основном поверхностны)

4 лайка

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

Ещё раз: я не ищу иконку! Я могу использовать любую иконку, какую захочу, на своём сайте.

Мне нужен метод в Discourse, как указано в инструкции по переопределению иконки через API, чтобы изменить иконку кнопки для публикации поста, не затрагивая иконку, используемую в редакторе для кнопки вставки гиперссылки.

1 лайк

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

Да, как только коммит ниже попадёт в tests-passed, вы сможете сделать то, что планировали:

(На попадание в tests-passed может уйти около часа.)

Итак, я добавил новые идентификаторы для иконок «Поделиться» в кнопках поста и темы, чтобы теперь их можно было изолировать в вызове API replaceIcon, например так:

api.replaceIcon('d-post-share', 'share-square');
api.replaceIcon('d-topic-share', 'share-square');

6 лайков

Спасибо, спасибо! Я как раз пытался понять, почему имена классов для иконки кнопки «Поделиться» здесь, на Meta, отличаются от нашей актуальной версии Discourse.

3 лайка

Увидел, что изменения прошли и стали доступны в обновлениях, и применил их на нашем сайте. Для сведения всем остальным: чтобы использовать иконку, её нужно добавить через admin -> settings -> svg icon subset, указав fa-share-square

Работает идеально. Наши иконки «Поделиться» изменились с:

на

Спасибо ещё раз.

5 лайков

Уже готово! См. пост выше

Я смог обновить свой Discourse несколько часов назад, и новая функция уже там.

3 лайка

Это интересно. Я только что попробовал обновить свой собственный экземпляр Discourse, но всё ещё не вижу этого.

Позвольте мне заняться устранением неполадок… :slight_smile:

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

        api.replaceIcon('d-post-share', 'share-square');
        api.replaceIcon('d-topic-share', 'share-square');
    </script>

Просто добавьте это в свой header при редактировании темы

3 лайка

Я обнаружил, что есть ещё один шаг: нужно сделать эту иконку Font Awesome доступной как SVG-иконку. В противном случае кнопка останется пустой после внесения изменений в тему заголовка.

Мои настройки выглядят так:

1 лайк

Обновление не меняет ничего, кроме имени класса для иконки кнопки «Поделиться», поэтому вы сразу не заметите разницы. По умолчанию сохраняется та же иконка ссылки, что и раньше (link).

Вы поймёте, что обновление выполнено, если при инспекции кнопки в браузере вы увидите класс d-icon-d-post-share (до обновления класс был d-icon-link)

Вам нужно отредактировать заголовок вашей темы, как описано здесь: Substitute Link Icon Only For Sharing - #22 by ondrej

1 лайк

Эта тема была автоматически закрыта через 2 дня. Новые ответы больше не принимаются.