[Aviso de administrador] El tema ‘_Base’ contiene código que necesita ser actualizado. (id:discourse.script-tag-discourse-plugin) (más información)
En uno de mis foros, me deshice de este mensaje simplemente moviendo mi script JS a la nueva pestaña de personalización de JS.
En mi otro foro, no funciona tan fácilmente.
Es una antigua anulación que muestra el campo de etiquetas del compositor solo en las categorías que aceptan etiquetas:
<script type="text/discourse-plugin" version="1.4.0">
// mostrar el selector de etiquetas en el compositor solo cuando sea necesario
const discourseComputed = require("discourse-common/utils/decorators").default;
const EmberObject = require("@ember/object").default;
function toggleTagChooser(display = "hide") {
if (display == "show") {
document.getElementsByClassName("mini-tag-chooser")[0].style.display = "block";
document.getElementsByClassName("reply-area")[0].classList.add("with-tags");
return;
}
// Verificar la existencia del selector de etiquetas
let tagChoser = document.getElementsByClassName("mini-tag-chooser");
if(tagChoser.length > 0) {
tagChoser[0].style.display = "none";
document.getElementsByClassName("reply-area")[0].classList.remove("with-tags");
}
return;
}
api.modifyClass('controller:composer', {
pluginId: "toggleTagChoser",
@discourseComputed("model.category", "model.tags", "lastValidatedAt")
tagValidation(category, tags, lastValidatedAt) {
// código personalizado para mostrar/ocultar el selector de etiquetas
toggleTagChooser("hide");
if(category != null) {
if (
category.allow_global_tags == true ||
category.allowed_tag_groups.length > 0 ||
category.allowed_tags.length > 0
) {
toggleTagChooser("show");
}
}
// fin del código personalizado
const tagsArray = tags || [];
if (this.site.can_tag_topics && !this.currentUser.staff && category) {
// category.minimumRequiredTags incorpora tanto minimum_required_tags como required_tag_groups
if (category.minimumRequiredTags > tagsArray.length) {
return EmberObject.create({
failed: true,
reason: I18n.t("composer.error.tags_missing", {
count: category.minimumRequiredTags,
}),
lastShownAt: lastValidatedAt,
});
}
}
}
});
</script>
Este script se basó en gran medida en una modificación similar (y antigua, de 2019 o anterior) publicada en meta, pero ya no puedo encontrar la publicación original.
De todos modos, hay dos preguntas en una:
-
¿Cómo muevo esto correctamente a la pestaña de JS? ¿Es posible o debería crear un componente de tema?
-
¿Hay una forma más elegante de ocultar/mostrar el selector de etiquetas del compositor solo en ciertas categorías? Uso etiquetas solo para 1 categoría en mi foro (una categoría de anuncios con etiquetas
#searchy#offer)