Wie verschiebe ich mein Skript richtig in den neuen JS-Tab meiner Komponente?

[Admin-Hinweis] Das Theme „\_Base“ enthält Code, der aktualisiert werden muss. (id:discourse.script-tag-discourse-plugin) (mehr erfahren)

Bei einem meiner Foren habe ich diese Meldung einfach durch Verschieben meines JS-Skripts in den neuen JS-Anpassungs-Tab beseitigt.

Bei meinem anderen Forum funktioniert das nicht so einfach.

Es handelt sich um ein altes Override, das das Tag-Feld des Komponisten nur in Kategorien anzeigt, die Tags akzeptieren:

<script type="text/discourse-plugin" version="1.4.0">    
    // Zeige den Tag-Auswähler im Komponisten nur, wenn nötig
    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;
        }
        // Überprüfe die Existenz des Tag-Auswählers
        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) {
            // benutzerdefinierter Code zum Umschalten des Tag-Auswählers
            toggleTagChooser("hide");
            if(category != null) {
                if (
                    category.allow_global_tags == true ||
                    category.allowed_tag_groups.length > 0 ||
                    category.allowed_tags.length > 0
                ) {
                    toggleTagChooser("show");
                }
            }
            // Ende des benutzerdefinierten Codes
            const tagsArray = tags || [];
            if (this.site.can_tag_topics && !this.currentUser.staff && category) {
                // category.minimumRequiredTags beinhaltet sowohl minimum_required_tags als auch 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>

Dieses Skript basierte stark auf einer ähnlichen (und alten, 2019 oder älter) Modifikation, die auf Meta gepostet wurde, aber ich kann den ursprünglichen Beitrag nicht mehr finden.

Jedenfalls gibt es zwei Fragen in einer:

  1. Wie verschiebt man das richtig in den JS-Tab? Ist das möglich oder sollte ich eine Theme-Komponente erstellen?

  2. Gibt es eine elegantere Möglichkeit, den Tag-Selektor des Komponisten nur in bestimmten Kategorien auszublenden/anzuzeigen? Ich verwende Tags nur für 1 Kategorie in meinem Forum (eine Anzeigen-Kategorie mit den Tags #search und #offer)

1 „Gefällt mir“

Man könnte CSS verwenden, um das Tag-Feld basierend auf der Kategorieklasse im Body ein-/auszublenden, aber ob das eleganter ist, sei dahingestellt :slight_smile:

1 „Gefällt mir“

Das löst es nicht für Mitarbeiter [1], aber wenn Sie die Tags als auf diese Kategorie beschränkt festlegen, können sie (von Nicht-Mitarbeitern) in anderen Kategorien nicht verwendet werden. Aus einer Kategorie /edit/tags:

Die oben angegebenen Tags und Tag-Gruppen sind nur in dieser Kategorie und anderen Kategorien verfügbar, die sie ebenfalls angeben. Sie sind nicht für die Verwendung in anderen Kategorien verfügbar.


  1. es sei denn, wir Make category tag rules / restrictions apply to moderators too ↩︎

1 „Gefällt mir“

Ich habe mir angesehen, wie es funktioniert, da es schon lange her ist.

  • Tag-Eingaben erscheinen im Composer, wenn ein neues Thema erstellt wird, unabhängig von der ausgewählten Kategorie (auch wenn die Kategorie keine verfügbaren Tags für andere als Administratoren hat), was ich verhindern möchte.
  • Nur CSS funktioniert nicht, da der Composer auf jeder Seite geöffnet werden kann und es kein übergeordnetes CSS-Targeting für die gewünschte Kategorie gibt, das helfen würde, die Tag-Eingabe des Composers auszublenden, was meiner Meinung nach der Grund ist, warum ich JavaScript verwendet habe.

Wenn ich also nichts übersehe, benötige ich immer noch ein Skript, um mein Ziel zu erreichen.

Das ursprüngliche #feature-Thema dazu war hier:

Ich schätze, es gab nicht genug Zuspruch, um diese Funktion zu bearbeiten, und pr-welcome war laut Sam hier nicht erwünscht.

Also bleibe ich bei einer benutzerdefinierten JS-Lösung (die ich dann reparieren muss :smiling_face_with_tear: )

1 „Gefällt mir“

Es sollte möglich sein, es einfach zu kopieren und einzufügen. Dinge im JS-Tab werden auf genau die gleiche Weise ausgeführt wie <script type='text/discourse-plugin'>. Wenn es nicht funktioniert, können Sie den Code teilen?

Mit etwas verrücktem modernem CSS ist es möglich:

.d-editor-container:has(.category-input .select-kit-header[data-name="Support"]) .tags-input {
    display: none !important;
}

^^ dies blendet die Tag-Eingabe für die Kategorie „Support“ auf Meta aus.

Sie können [data-name="Support"] durch :not(data-name="Support") ersetzen, um die Logik umzukehren.

4 „Gefällt mir“

Heiliger Bimbam! Anscheinend reichen meine CSS-Kenntnisse von 2012 nicht mehr aus. Was irgendwie seltsam ist, denn ich hätte schwören können, 2012 war buchstäblich gestern!


Ich habe mich für Folgendes entschieden:

.d-editor-container:not(:has(.category-input .select-kit-header[data-name=“Trading Post”])) .tags-input {
    display: none;
}

Damit wird es in jeder Kategorie außer Trading Post ausgeblendet.

Danke euch allen!

5 „Gefällt mir“