Существует ли способ повторно открыть класс и переопределить функцию?
Функцию, которую мне нужно переопределить, function categoryStripe(color, classes) {}, можно найти на строке 15 здесь: javascripts/discourse/helpers/category-link.js.es6.
Существует ли способ повторно открыть класс и переопределить функцию?
Функцию, которую мне нужно переопределить, function categoryStripe(color, classes) {}, можно найти на строке 15 здесь: javascripts/discourse/helpers/category-link.js.es6.
Я так думаю. Вы видели Developing Discourse Themes & Theme Components
Есть несколько способов сделать то, что вы хотите. Какова ваша цель при перезаписи categoryStripe?
Я бы хотел изменить его с:
function categoryStripe(color, classes) {
var style = color ? "style='background-color: #" + color + ";'" : "";
return "<span class='" + classes + "' " + style + "></span>";
}
на:
function categoryStripe(color, classes) {
var style = color ? "style='border: 1px solid #" + color + ";'" : "";
return "<span class='" + "my-class" + classes + "' " + style + "></span>";
}
То есть заменить цвет фона на границу и добавить класс.
Какой лучший способ достичь этого, Джастин?
Я читал это, однако, насколько я помню, там рассматривается только возможность переопределения шаблонов (и виджетов), без упоминания хелперов, верно?
Ничего из этого не было очевидно из вашего первого сообщения. Думаю, теперь вы получите полезный ответ, который мне тоже интересно увидеть!
Вы рассматривали возможность добавления класса через JavaScript или переопределения встроенного стиля с помощью !important в таблице стилей? Хотя вы можете попытаться переопределить этот метод, в конечном итоге это перестанет работать. Добавление в DOM через JavaScript, вероятно, является наиболее стабильным решением.
То, что я пытался выяснить на днях, было во многом именно этим. Я хотел добавить пользовательский класс к сообщениям во всех темах (но не к первому сообщению в теме). Мне бы хотелось иметь возможность включать или выключать этот пользовательский класс в зависимости от группы пользователей и даты создания темы, но я подумал, что смогу разобраться с этим, как только пойму, как добавлять пользовательский класс к сообщениям. Я не нашел именно того примера, который искал, но несколько других вещей могли отвлечь меня, прежде чем я нашел нужный пример.
Я не думаю, что это сработает, потому что мне нужно, чтобы цвет получался из настроек категории — следовательно, цвет границы будет разным для каждой категории. (Я обновил свой сообщение выше, чтобы отразить это.)
Разве это нельзя получить через JS (/добавив в DOM)? (Если да, не могли бы вы привести пример, пожалуйста?)
Мне нужно было бы углубиться в детали, чтобы понять, выполнимо ли то, что вы делаете, используя только выборку на JS (к сожалению, сейчас у меня нет на это времени).
Однако вы можете увидеть добавление класса здесь: discourse-knowledge-base-theme/javascripts/discourse/components/knowledge-base.js.es6 at 4694d4a8ad788f8884e3341c852d3f77b2c1d103 · discourse/discourse-knowledge-base-theme · GitHub
Также можно изменять встроенные стили с помощью JS: Setting CSS Styles using JavaScript | KIRUPA
Спасибо, Джастин, я посмотрю.
Или есть способ переопределить хелперы (discourse/app/assets/javascripts/discourse/helpers/category-link.js.es6 at b25d9e96c1414bf78b44221da4d385675843991e · discourse/discourse · GitHub), как мы можем делать с шаблонами, компонентами, виджетами и т.д.?
Мне не составит труда следить за этим файлом на предмет будущих изменений, если потребуется ![]()
Вы можете попробовать создать файл в вашей теме по пути javascripts/discourse/helpers/category-link.js.es6 и добавить туда модифицированную версию этой функции. Прошло уже довольно много времени с тех пор, как мне приходилось копаться так глубоко, поэтому я не могу гарантировать, что это сработает! ![]()
Да, должно сработать.
Спасибо вам обоим!
Последний вопрос (надеюсь!): как создать там файл? ![]()
В простом плагине создайте папку и просто скопируйте и вставьте!
Ой!!! Спасибо, Роберт!
Мне сейчас нужно ненадолго отлучиться, но как только вернусь, обязательно попробую ![]()
Спасибо, Роберт!
Но это не работает ![]()
Вот что я сделал:
rails g plugin CategoryAlternative
Затем добавил это:
В папку helpers, которую мне пришлось создать:
Затем выполнил:
rm -rf tmp
rails s
Плагин отображается в AdminCP, но изменения не применяются на самой странице (изменения видны, если я редактирую не-плагинную версию файла с теми же правками, но это не помогает).
Не упустил ли я что-то? Нужно ли мне настроить что-то ещё?
Получаете ли вы какие-либо ошибки в консоли JavaScript?
Вы включили весь файл?
Примечание: я не использовал генератор плагинов, я создал всё это вручную.
На момент написания я этого не сделал (так как подумал, что Джастин имел в виду просто включить эту функцию). Однако, хотя включение всего файла и позволило решить проблему, результат не был таким же, как при прямом редактировании файла.
Например, это сработало на странице latest, но не в выпадающем меню all categories… которое работало, когда я редактировал файл напрямую!
В итоге я внес необходимые изменения с помощью довольно запутанного CSS
, и мне пришлось пойти на некоторые компромиссы. Это, безусловно, лучше, чем ничего не сделать, но в идеале я бы предпочёл, чтобы изменение стиля категории было таким же простым, как редактирование шаблона ![]()
Я тоже хотел бы это сделать.
Вот путь к файлу, который я пытаюсь переопределить в компоненте своей темы:
custom_loader\javascripts\discourse\helpers\loading-spinner.js
Но JS-файл не загружается. Что я упускаю?