Existe-t-il un moyen de rouvrir une classe et de remplacer une fonction ?
La fonction que je dois remplacer est function categoryStripe(color, classes) {} à la ligne 15, située ici : javascripts/discourse/helpers/category-link.js.es6.
Existe-t-il un moyen de rouvrir une classe et de remplacer une fonction ?
La fonction que je dois remplacer est function categoryStripe(color, classes) {} à la ligne 15, située ici : javascripts/discourse/helpers/category-link.js.es6.
Je le crois. Avez-vous vu Developing Discourse Themes & Theme Components
Il existe plusieurs façons de faire ce que vous demandez. Quel est votre objectif en écrasant categoryStripe ?
Je souhaiterais le modifier comme suit :
function categoryStripe(color, classes) {
var style = color ? "style='background-color: #" + color + ";'" : "";
return "<span class='" + classes + "' " + style + "></span>";
}
pour :
function categoryStripe(color, classes) {
var style = color ? "style='border: 1px solid #" + color + ";'" : "";
return "<span class='" + "my-class" + classes + "' " + style + "></span>";
}
C’est-à-dire remplacer la couleur de fond par une bordure et ajouter une classe.
Quelle est la meilleure façon de procéder, Justin ?
Je l’ai lu, mais à ma connaissance, il ne couvre que la possibilité de remplacer les modèles (et les widgets), sans mentionner les helpers, je crois ?
Rien de tout cela n’était évident dans votre premier message. Je pense que vous obtiendrez maintenant une réponse utile que je suis impatient de voir !
Avez-vous envisagé d’ajouter la classe via JavaScript ou de remplacer le style en ligne en utilisant !important dans la feuille de style ? Bien que vous puissiez tenter de contourner cette méthode, elle finira par échouer. L’ajout au DOM via JavaScript est probablement la solution la plus stable.
Ce que j’essayais de comprendre l’autre jour, c’était essentiellement cela. Je voulais ajouter une classe personnalisée aux publications dans tous les sujets (mais pas au sujet/publication originale). Je souhaiterais pouvoir activer/désactiver cette classe personnalisée en fonction du groupe d’utilisateurs et de la date de création du sujet, mais je pensais pouvoir résoudre cela une fois que j’aurais compris comment ajouter la classe personnalisée aux publications. Je n’ai pas trouvé exactement l’exemple que je recherchais, mais quelques autres éléments ont peut-être distrait mon attention avant que je ne trouve l’exemple.
Je ne pense pas que cela fonctionnera, car je dois récupérer la couleur depuis les paramètres de la catégorie — la couleur de la bordure variera donc pour chaque catégorie. (J’ai mis à jour mon message ci-dessus pour refléter cela.)
À moins que cela puisse être récupéré via JS (/ajouté au DOM) ? (Si oui, pouvez-vous s’il vous plaît me donner un exemple ?)
Je devrais creuser les détails pour voir si ce que vous faites est réalisable uniquement avec une sélection JS (malheureusement, je n’ai pas le temps pour le moment).
Cependant, vous pouvez voir l’ajout d’une classe ici : discourse-knowledge-base-theme/javascripts/discourse/components/knowledge-base.js.es6 at 4694d4a8ad788f8884e3341c852d3f77b2c1d103 · discourse/discourse-knowledge-base-theme · GitHub
Vous pouvez également modifier les styles en ligne avec JS : Setting CSS Styles using JavaScript | KIRUPA
Merci Justin, je vais jeter un coup d’œil.
Ou existe-t-il un moyen de remplacer les helpers (discourse/app/assets/javascripts/discourse/helpers/category-link.js.es6 at b25d9e96c1414bf78b44221da4d385675843991e · discourse/discourse · GitHub) comme on le fait pour les templates/composants/widgets, etc. ?
Je n’ai pas d’objection à devoir surveiller ce fichier pour les modifications futures si nécessaire ![]()
Vous pouvez essayer de créer un fichier dans votre thème à l’adresse javascripts/discourse/helpers/category-link.js.es6 et d’y ajouter une version modifiée de cette fonction. Cela fait un moment que je n’ai pas eu à fouiller aussi loin, donc je ne peux pas garantir que cela fonctionnera ! ![]()
Ouais, ça devrait marcher.
Merci à tous les deux !
Dernière question (j’espère !) : comment créer un fichier là-bas ? ![]()
Dans un plugin, c’est facile : créez le dossier et faites simplement un copier-coller !
Ah!!! Merci Robert !
Je dois filer maintenant, mais je vais essayer ça dès que je reviens ![]()
Merci Robert !
Ça ne marche pas pour autant ![]()
Voici ce que j’ai fait :
rails g plugin CategoryAlternative
Ensuite, j’ai ajouté ceci :
Dans un dossier helpers que j’ai dû créer :
Ensuite :
rm -rf tmp
rails s
Ça s’affiche dans l’AdminCP, mais aucun changement ne se reflète sur la page réelle (les changements s’affichent si je modifie la version non-plugin du fichier avec exactement les mêmes modifications, par contre).
Est-ce que j’ai oublié quelque chose ? Dois-je configurer autre chose ?
Recevez-vous des erreurs dans la console JavaScript ?
Avez-vous inclus l’intégralité du fichier ?
NB : Je n’ai pas utilisé le générateur de plugin, j’ai tout créé manuellement.
Je ne l’avais pas fait au moment de l’écriture (car je pensais que Justin voulait seulement inclure cette fonction). Cependant, bien que l’inclusion du fichier entier ait permis de faire fonctionner le système, ce n’était pas la même chose que lorsque j’avais édité le fichier directement.
Par exemple, cela fonctionnait sur la page latest, mais pas dans le menu déroulant all categories… ce qui fonctionnait bien lorsque j’avais édité le fichier directement !
J’ai donc fini par apporter les modifications nécessaires via un CSS un peu brouillon
, et j’ai dû faire quelques compromis également. C’est certainement mieux que de ne pas avoir pu le faire, mais idéalement, j’aurais préféré quelque chose d’aussi simple que de modifier le style d’une catégorie, aussi simple que d’éditer un modèle ![]()
Je voudrais aussi faire cela.
Voici le chemin du fichier que j’essaie de remplacer dans mon composant de thème :
custom_loader\javascripts\discourse\helpers\loading-spinner.js
Mais le fichier JS n’est pas chargé. Qu’est-ce que je rate ?