Button zum TOC-Theme-Komponente hinzufügen

Ich hoffe, Sie können die Funktion für versteckte Verzeichnisse hinzufügen.

Benutzerdefinierte Plugins

Dies wurde unter Bezugnahme auf Ihr Plugin erstellt, hauptsächlich wurde ein weiterer Button hinzugefügt und dann JavaScript für das dynamische Rendering verwendet.

discourse-----------------------hide-toc (1).zip (3,3 KB)

CSS / JavaScript

css

// Stile für das Verzeichnis, das im Editor angezeigt wird

// Definiert die Stile für die Anzeige des Verzeichnisses in der Editor-Vorschau
.edit-title .d-editor-preview [data-theme-toc="false"],
body.toc-for-replies-enabled .d-editor-preview [data-theme-toc="false"] {
  // Setzt die Hintergrundfarbe auf die dritte Farbe des Themas
  background: var(--tertiary);
  // Setzt die Textfarbe auf die zweite Farbe des Themas
  color: var(--secondary);
  // Setzt das Element auf "sticky" Positionierung, damit es beim Scrollen am oberen Rand des Ansichtsfensters bleibt
  position: sticky;
  // Setzt z-index auf 1, um sicherzustellen, dass dieses Element über anderen Elementen angezeigt wird
  z-index: 1;
  // Setzt den Abstand des Elements vom oberen Rand des Ansichtsfensters auf 0
  top: 0;
  // Setzt die Höhe des Elements auf 30 Pixel
  height: 30px;
  // Setzt die Anzeige des Elements auf Flexbox, um den Inhalt einfach auszurichten
  display: flex;
  // Zentriert die Elemente vertikal in der Flexbox
  align-items: center;
  // Zentriert die Elemente horizontal in der Flexbox
  justify-content: center;
  
  // Fügt mit dem Pseudo-Element :before Inhalt vor dem Element ein
  
  &:before {
    // Setzt den eingefügten Inhalt auf den Wert der Variablen $composer_toc_text
    // content: "#{$composer_toc_text}";
    content: "Dieses Thema wird kein Verzeichnis anzeigen";
  }
}

JavaScript

<script>
    // Definiert eine Funktion zum Festlegen des Stils eines Elements
    function setStyle(selector, styles) {
        // Sucht das Element mit dem angegebenen Selektor
        const element = document.querySelector(selector);
        // Wenn das Element gefunden wird, werden die Stile angewendet
        if (element) {
            Object.assign(element.style, styles);
        }
    }

    // Definiert eine Funktion, die prüft, ob der Seiteninhalt ein bestimmtes TOC-Markup enthält
    function checkForTOCMarkup() {
        // Prüft, ob der Seiteninhalt eine bestimmte Zeichenkette enthält
        if (document.body.innerHTML.includes('<div data-theme-toc="false">')) {
            // Versteckt das Zeitleistenelement
            setStyle('.with-timeline', { display: 'none' });
            // Ändert die Spaltenstile des Beitragscontainers auf 100%
            setStyle('.container.posts', { gridTemplateColumns: '100%' });
            // Setzt die Breite des Thema-Inhalts auf 100%
            setStyle('.topic-body', { width: '100%' });
            // Setzt die maximale Breite und den linken Innenabstand der Thema-Karte
            setStyle('.topic-map', { maxWidth: '100%', paddingLeft: '0px' });
            // Versteckt das Thema-Avatar-Element
            setStyle('.topic-avatar', { display: 'none' });
            // Setzt die maximale Breite und den linken Innenabstand des Lücken-Elements
            setStyle('.gap', { maxWidth: '100%', paddingLeft: '0px' });
            // Setzt die maximale Breite und den linken Innenabstand der Thema-Fußzeilen-Schaltflächen
            setStyle('#topic-footer-buttons', { maxWidth: '100%', paddingLeft: '0px' });

        } else {
            // Denken Sie daran, nicht den Standardcode vor der Änderung zu verwenden, da dies die mobile Ansicht beeinträchtigt. Lassen Sie das System die automatische Verarbeitung durchführen.
            // setStyle('.topic-body', { width: 'calc(var(--topic-body-width) + var(--topic-body-width-padding)*2)' }); // Wiederherstellung der Standardbreite
            
            setStyle('.with-timeline', { display: '' }); // Standardstil wiederherstellen
            setStyle('.container.posts', { gridTemplateColumns: '' }); // Standard-Spaltenstil wiederherstellen
            setStyle('.topic-body', { width: '' }); // Standardbreite wiederherstellen
            setStyle('.topic-map', { maxWidth: '', paddingLeft: '' }); // Standardstil wiederherstellen
            setStyle('.topic-avatar', { display: '' }); // Standardanzeige wiederherstellen
            setStyle('.gap', { maxWidth: '', paddingLeft: '' }); // Standardstil wiederherstellen
            setStyle('#topic-footer-buttons', { maxWidth: '', paddingLeft: '' }); // Standardstil wiederherstellen
        }
        
    }

    // Erstellt eine Beobachterinstanz, um DOM-Änderungen zu überwachen
    const observer = new MutationObserver(checkForTOCMarkup);
    // Konfiguriert die Beobachteroptionen, um Änderungen an untergeordneten und allen nachfolgenden Knoten zu überwachen
    const config = { childList: true, subtree: true };

    // Beginnt die Beobachtung von Änderungen im Dokument
    observer.observe(document.body, config);

    // Führt sofort eine Prüfung durch, wenn die Seite geladen wird
    checkForTOCMarkup();
</script>

1 „Gefällt mir“

Wenn Sie meinen, die TOC (Inhaltsverzeichnis) auszublenden, können Sie dies bereits tun, indem Sie auf die Schaltfläche “Timeline” unten rechts klicken.

Dann erhalten Sie die übliche Zeitleiste mit einer Schaltfläche “Contents” (Inhalt), mit der Sie das Inhaltsverzeichnis wieder aktivieren können.

2 „Gefällt mir“

Nein, es geht darum, die gesamte Seitenleiste auszublenden und den Inhaltsbereich groß genug zu machen, da Ihr Plugin auf dieser Grundlage eine bessere Kompatibilität aufweist und Sie es nach Belieben hinzufügen können.

2 „Gefällt mir“

@Lilly kannst du mir vorschlagen, was mir fehlen könnte, da ich diesen Timeline-Button auf meinen Websites nicht finden kann, z. B.

2 „Gefällt mir“

Ich glaube, das liegt daran, dass das Thema keine Antworten hat.
Ich kann diesen Button auf Customizing your site with existing theme components nicht sehen. Aber er ist sichtbar auf Understanding stats for 'topic views', 'posts read', and 'reading time', das eine Antwort hat.

3 „Gefällt mir“

Danke @Moin, das war’s! Ich habe eine Testantwort zu diesem Thema hinzugefügt und jetzt erscheint tatsächlich der Timeline / TOC-Umschaltknopf!

3 „Gefällt mir“

Warum habe ich diese Schaltfläche nicht?

Hat Ihr Thema eine Antwort?

2 „Gefällt mir“

ahha, du hast Recht!
unglaublich

aber ich denke, das ist ein Fehler, denn ohne diese Schaltfläche haben wir keinen Zugriff auf Benachrichtigungen und die Themenoptionen (und den Lesemodus)

2 „Gefällt mir“

Außerdem ist es nicht intuitiv. Ich habe meinen Kollegen, der neu bei Discourse ist, gebeten, ein Thema anzuheften. Er sagte, es gäbe keinen Button. Also ging ich zu ihm, um es ihm zu zeigen, und siehe da, kein Button, nur ein Inhaltsverzeichnis. Ich scrollte auf und ab, und der Schraubenschlüssel erschien kurz und verschwand dann wieder. Also scrollte ich wieder zufällig, bis ich auf die erste Antwort stieß, und wir erkannten, wie es funktionierte. Es war überhaupt nicht offensichtlich. Besonders bei längeren Themen (die genau die sind, bei denen ein Inhaltsverzeichnis sinnvoll ist) könnte es eine Herausforderung sein.

1 „Gefällt mir“