1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. Mitleser

Beiträge von Mitleser

  • Freiwillige gesucht für Tests an einem JavaScript

    • Mitleser
    • 15. August 2023 um 20:09

    Sören Hentzschel

    Kein Problem, dachte file.initWithPath sollte Betriebssystemunabhängig werden? Benötige den Button eigenlich nicht. Teste trotzdem.

    Der Pfad hier auf Linux mit dem Benutzer 'hanswurst' ist:

    file.initWithPath("/home/hanswurst/Programme/Firefox/firefox/firefox");

    Ergebnis:

    Testversion_1.js Icon ja Profilmanager ja

    Testversion_1a.js Icon ja Profilmanager ja

    Testversion_2.js Icon ja Profilmanager ja

    Testversion_2a.js Icon ja Profilmanager ja

  • Freiwillige gesucht für Tests an einem JavaScript

    • Mitleser
    • 15. August 2023 um 19:11

    Sorry, bin da raus, weil das hier mit Linux garantiert nicht funktioniert:

    file.initWithPath("C:\\Program Files\\Mozilla Firefox\\firefox.exe");

  • Wie bearbeitet man Vektor-Grafiken am "leichtesten"?

    • Mitleser
    • 14. August 2023 um 00:29
    Zitat von Mira_Belle

    hier ganz rechts, oben, in Rot, kaum noch zu erkennen.

    Das kann ich nirgends finden.

    Kannst Du es mir bitte rauf laden?

    ReloadButton.zip

    Edit

    Noch besser, hier ist die Quelle:

    "synchronization" - iconmonstr

  • Wie bearbeitet man Vektor-Grafiken am "leichtesten"?

    • Mitleser
    • 13. August 2023 um 23:48

    Einen Tipp hätte ich noch:

    Sollte der style im icon mal fehlen, wird diese Angabe beim scallieren mit diesem Onlinetool hinzugefügt, allerdings mit fill:rgb(0%,0%,0%);fill-opacity:1; :

    Online die Bildgröße mehrerer Bilder gleichzeitig ändern
    Verändern Sie kostenlos die Größen mehrerer JPG-, PNG-, SVG- oder GIF-Bilder in nur wenigen Sekunden. Durch eine Änderung der Prozent- oder Pixelvorgaben…
    www.iloveimg.com

    Mache Feierabend, Icon kommt morgen...

  • Wie bearbeitet man Vektor-Grafiken am "leichtesten"?

    • Mitleser
    • 13. August 2023 um 22:45
    Zitat von Mira_Belle

    Nein, so nicht,

    So, so!

    Ist ja sehr merkwürdig...

    Funktioniert hier bestens!

  • Wie bearbeitet man Vektor-Grafiken am "leichtesten"?

    • Mitleser
    • 13. August 2023 um 21:47
    Zitat von Mira_Belle

    Letzte beiden sind im Übrigen die gleichen Symbole, aber unteres ist das "originale", schwarz und leider nicht per CSS-Code einfärbbar

    So gehts:

    XML
    <svg enable-background="new 0 0 512 512" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg">
    <path style="stroke:none;fill-rule:nonzero;fill:context-fill;fill-opacity:context-fill-opacity;" d="M96 128a128 128 0 1 1 256 0A128 128 0 1 1 96 128zM0 482.3C0 383.8 79.8 304 178.3 304h91.4C368.2 304 448 383.8 448 482.3c0 16.4-13.3 29.7-29.7 29.7H29.7C13.3 512 0 498.7 0 482.3zM609.3 512H471.4c5.4-9.4 8.6-20.3 8.6-32v-8c0-60.7-27.1-115.2-69.8-151.8c2.4-.1 4.7-.2 7.1-.2h61.4C567.8 320 640 392.2 640 481.3c0 17-13.8 30.7-30.7 30.7zM432 256c-31 0-59-12.6-79.3-32.9C372.4 196.5 384 163.6 384 128c0-26.8-6.6-52.1-18.3-74.3C384.3 40.1 407.2 32 432 32c61.9 0 112 50.1 112 112s-50.1 112-112 112z"/></svg>
  • Wie bearbeitet man Vektor-Grafiken am "leichtesten"?

    • Mitleser
    • 13. August 2023 um 20:54

    Mit Win kann ich nicht dienen, aber hier die Vorschau auf Lin mit Nemo:

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 13. August 2023 um 14:37

    Mira_Belle

    In den .svg's ändere ich:

    fill:context-fill;fill-opacity:context-fill-opacity;

    Und im .css 'färbe' ich sie mit:

    fill: orange !important;

    fill-opacity: 1 !important;

    ein.

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 13. August 2023 um 13:54

    Danke, habe ich geändert.

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 13. August 2023 um 13:38

    Mira_Belle

    Die Icons habe ich quasi im Vorbeigehen eingesammelt.

    Aber eine umfangreiche freie Quelle für .svg's ist:

    Material Design Icons - Icon Library - Pictogrammers
    The original. Following Google's Material Design guidelines for system icons, MDI is our largest library, touting over 7200 unique icons!
    pictogrammers.com

    (nicht von 'Material Design Icons' täuschen lassen...)

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 12. August 2023 um 21:56

    Ja. Und tooltip[label] sollte die richtige Syntax sein. Funktioniert hier bloß nicht. Hier ein Screenshot mit einem Text ohne Leerzeichen:

    Das geht:

    CSS
    tooltip[label*=" "] {
        appearance: none !important;
        background-color: #3f3f3f !important;
        color: #F9F9F9 !important;
        font-size: 12px !important;
        line-height: unset !important;
        border: 1px solid #b03b0099 !important;
        border-radius: 4px !important;
        box-shadow: none !important;
        width: auto !important;
        height: auto !important;
        justify-content: center !important;
        align-items: center !important;
        align-content: center !important;
        vertical-align: middle !important;
        overflow: hidden !important;
        padding: 3px 7px 5px 7px !important;
    } 
    Alles anzeigen

    Das nicht:

    CSS
    tooltip[label] {
        appearance: none !important;
        background-color: #3f3f3f !important;
        color: #F9F9F9 !important;
        font-size: 12px !important;
        line-height: unset !important;
        border: 1px solid #b03b0099 !important;
        border-radius: 4px !important;
        box-shadow: none !important;
        width: auto !important;
        height: auto !important;
        justify-content: center !important;
        align-items: center !important;
        align-content: center !important;
        vertical-align: middle !important;
        overflow: hidden !important;
        padding: 3px 7px 5px 7px !important;
    } 
    Alles anzeigen

    Finde den Fehler.

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 12. August 2023 um 21:11

    Scheint irgendwie Betriebssystemabhängig zu sein. Bin auf LIN. Bei tooltip[label] wird nichts angesprochen, es muss schon tooltip[label*=" "] sein. tooltip habe ich schlicht vergessen.

    Dieses Prob kann ich hier nicht nachvollziehen:

    Zitat von Horstmann

    Das Überhangsmenü und Erweiterungsmenü scheint beim ersten Öffnen aber immer noch etwas Probleme zu machen, schliessen sich bei Hover.

    Das kann ich hier nicht feststellen. Egal wie ich das css in js einbette ('Methode Endor' oder wie ich es gemacht habe ). Das macht hier keinen Unterschied und bereitet keine Probleme.

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 12. August 2023 um 01:30

    Hier die Icons, einfach umbenennen (wenn nötig)...auf .svg

    16_tooltip-empty_contprop.txt16_tooltip-text_contprop.txt

  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 12. August 2023 um 00:58

    Hier mal meine Lösung (mit Links/Mittel-Klick-Button):

    JavaScript
    /*1. Verhalten des Tooltips beim start*/
    (function ttstart() {
    // start config area--------------------------------------------
    
      let IconPath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'css', 'image')); // Pfad zum Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
    
    // end config area----------------------------------------------
    g1_tooltip_b = "0";
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
    
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    tooltip[label*=" "],
    tooltip,
    #tabbrowser-tab-tooltip {
        appearance: none !important;
        background-color: #3f3f3f !important;
        color: #F9F9F9 !important;
        font-size: 12px !important;
        line-height: unset !important;
        border: 1px solid #b03b0099 !important;
        border-radius: 4px !important;
        box-shadow: none !important;
        width: auto !important;
        height: auto !important;
        justify-content: center !important;
        align-items: center !important;
        align-content: center !important;
        vertical-align: middle !important;
        overflow: hidden !important;
        padding: 3px 7px 5px 7px !important;
        display: none !important;
    }
    .places-tooltip {
        display: flex !important;
    }
    #remoteBrowserTooltip{
        display: none !important;
    }
    #toggle-tt-button .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #cc5200 !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:hover .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #dddddd !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:active .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-text_contprop.svg") !important;
        fill: gold !important;
        transition: fill 0.0s ease-in-out 0.0s !important;
    } 
        `), null, null);
    
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    })();
    
    /*2. Einschalten des Tooltips per Button*/
    function tton() {
    // start config area--------------------------------------------
    
      let IconPath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'css', 'image')); // Pfad zum Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
    
    // end config area----------------------------------------------
    g1_tooltip_b = "1";
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
    
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    tooltip[label*=" "],
    tooltip,
    #tabbrowser-tab-tooltip {
        display: flex !important;
    }
    .places-tooltip {
        display: flex !important;
    }
    #remoteBrowserTooltip{
        display: none !important;
    }
    #toggle-tt-button .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-text_contprop.svg") !important;
        fill: gold !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:hover .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-text_contprop.svg") !important;
        fill: #dddddd !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:active .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #cc5200 !important;
        transition: fill 0.0s ease-in-out 0.0s !important;
    }
        `), null, null);
    
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    }
    
    /*2a. Einschalten aller Tooltips per Button*/
    function ttallon() {
    // start config area--------------------------------------------
    
      let IconPath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'css', 'image')); // Pfad zum Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
    
    // end config area----------------------------------------------
    g1_tooltip_b = "2";
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
    
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    tooltip[label*=" "],
    tooltip,
    #tabbrowser-tab-tooltip {
        display: flex !important;
    }
    .places-tooltip {
        display: flex !important;
    }
    #remoteBrowserTooltip{
        display: flex !important;
        padding: 4px 7px 4px 7px !important;
    
    }
    #toggle-tt-button .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-text_contprop.svg") !important;
        fill: #72a572 !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:hover .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-text_contprop.svg") !important;
        fill: #dddddd !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:active .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #cd0e14 !important;
        transition: fill 0.0s ease-in-out 0.0s !important;
    }
        `), null, null);
    
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    }
    
    /*3. Ausschalten des Tooltips per Button*/
    function ttoff() {
    // start config area--------------------------------------------
    
      let IconPath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'css', 'image')); // Pfad zum Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
    
    // end config area----------------------------------------------
    g1_tooltip_b = "0";
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
    
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    tooltip[label*=" "],
    tooltip,
    #tabbrowser-tab-tooltip {
        display: none !important;
    }
    .places-tooltip {
        display: flex !important;
    }
    #remoteBrowserTooltip{
        display: none !important;
    }
    #toggle-tt-button .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #cc5200 !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:hover .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #dddddd !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:active .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-text_contprop.svg") !important;
        fill: gold !important;
        transition: fill 0.0s ease-in-out 0.0s !important;
    }
        `), null, null);
    
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    }
    
    /*3a. Ausschalten aller Tooltips per Button*/
    function ttalloff() {
    // start config area--------------------------------------------
    
      let IconPath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'css', 'image')); // Pfad zum Ordner der das .svg-Symbol (mit: fill="context-fill" fill-opacity="context-fill-opacity") beinhaltet.
    
    // end config area----------------------------------------------
    g1_tooltip_b = "3";
        let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService);
    
        let uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(`
    tooltip[label*=" "],
    tooltip,
    #tabbrowser-tab-tooltip {
        display: none !important;
    }
    .places-tooltip {
        display: none !important;
    }
    #remoteBrowserTooltip{
        display: none !important;
    }
    #toggle-tt-button .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #cd0e14 !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:hover .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-empty_contprop.svg") !important;
        fill: #dddddd !important;
        transition: fill 0.4s ease-in-out 0.0s !important;
    }
    #toggle-tt-button:active .toolbarbutton-icon {
        list-style-image: url("${IconPath}/16_tooltip-text_contprop.svg") !important;
        fill: #72a572 !important;
        transition: fill 0.0s ease-in-out 0.0s !important;
    }
        `), null, null);
    
    sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    }
    
    /*4. Button Tooltip on/off*/
    (function() {
    /*Icon + Iconpfad wird durch 1.-3. geregelt (sollte der Pfad oder die Icons dort entfernt werden, muss das hier wieder aktiviert werden); Nachteil: nur ein Icon, keine transition; kein fill*/
    /*
    // start config area
    
    let ButtonIcon = "16_tooltip-text_contprop.svg" // Name & Dateiendung des anzuzeigenden Symbols.
    let ButtonIconPath = "/chrome/css/image/" // Pfad zum Ordner der das Symbol beinhaltet.
    
    // end config area
    */
    
        if (location.href !== 'chrome://browser/content/browser.xhtml') return;
           try {
              CustomizableUI.createWidget({
                 id: 'toggle-tt-button',
                 type: 'custom',
                 defaultArea: CustomizableUI.AREA_NAVBAR,
                 onBuild: function(aDocument) {         
                    let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                    var props = {
                       id: 'toggle-tt-button',
                       class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                       removable: 'true',
                       label: 'Toggle Tooltip',
                       accesskey: '',
                       tooltiptext: 'Tooltip on/off\n\nLinksklick: Tt-in-Content auch \'on\' ausgeblendet,\nTt-Bookmarks auch \'off\' sichtbar\nMittelklick: ALLE Tt\'s \'on/off\' sichtbar/ausgeblendet',
    /*                   style: "list-style-image: url('" + PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)) + ButtonIconPath + ButtonIcon + "');",*/
    /*Icon+Pfad wird durch 1.-3. geregelt (sollte der Pfad oder die Icons dort entfernt werden, muss das hier wieder aktiviert werden)*/
                   };                  
               for(var p in props)
               toolbaritem.setAttribute(p, props[p]);
               return toolbaritem;                
               }
            });
        } catch(e) { };
    
    document.getElementById('toggle-tt-button').addEventListener( "click", onClick );
    
        function onClick(aEvent) {
    
    if (event.button == 0) {
                if(g1_tooltip_b == '')  {
                   g1_tooltip_b = '1';
                tton();
                }
        else if(g1_tooltip_b == '0') {
                   g1_tooltip_b = '1';
                tton();
                }
        else if(g1_tooltip_b == '1') {
                   g1_tooltip_b = '0';
                ttoff();
                }/**/
        else if(g1_tooltip_b == '3') {
                   g1_tooltip_b = '0';
                ttoff();
                }
        else if(g1_tooltip_b == '2') {
                   g1_tooltip_b = '1';
                ttoon();
                }
    }
    else
    if (event.button == 1) {
             if(g1_tooltip_b == '')  {
                   g1_tooltip_b = '2';
                tton();
                }            
        else if(g1_tooltip_b == '2')  {
                   g1_tooltip_b = '3';
                ttalloff();
                }
        else if(g1_tooltip_b == '3') {
                   g1_tooltip_b = '2';
                ttallon();
                }/**/
        else if(g1_tooltip_b == '1') {
                   g1_tooltip_b = '2';
                ttallon();
                }
        else if(g1_tooltip_b == '0') {
                   g1_tooltip_b = '3';
                ttalloff();
                }
    }
    else
    if (event.button == 2) {
    event.button.stopPropagation();
    alert("Rechtsklick wird nicht unterstützt");
    }
    else {
    alert("ERROR: B_Tooltip_toggle.uc.js");
        };
      }
    })();
    Alles anzeigen
  • Tooltips nur für die Bedienoberfläche ausschalten?

    • Mitleser
    • 11. August 2023 um 23:54

    @Horstmann

    Ich habe mich erneut mit dem Thema beschäftigt und bin zu folgendem Ergebnis gekommen:

    JavaScript
    (function () {
        let css = `
    tooltip[label*=" "],
    #tabbrowser-tab-tooltip,
    .places-tooltip {
        display: none !important;
    }
    #remoteBrowserTooltip{
        display: flex !important;
    }
        `;
        let sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
        let uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
        sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    })();
    Alles anzeigen
  • Tab-Menü rechte Maustaste "linke Tabs schließen" ausblenden

    • Mitleser
    • 9. August 2023 um 23:25

    M_M

    hast du das Vorgeschlagene mal probiert?

    funktioniert der Ratschlag von 2002Andreas nicht?

    hat das einen Einfluss auf den "rechten Tabs"-Eintrag?

    Eine einfache Lösung unter WIN7 wäre es in die Eingabeaufforderung einfach nur: format c:/s einzugeben. Damit wären deine Probleme endgültig gelöst.

  • Button um weiteres Profil zu öffnen

    • Mitleser
    • 2. August 2023 um 20:43
    Spoiler anzeigen

    Mira_Belle

    Diese Variante müsste auch funktionieren - konnte ich leider nicht ausprobieren bei diesem Button (bin auf Linux, müsste ich erst einmal viel anpassen!)?

    JavaScript
    // start configuration----------------------------------
    
    let buttonIcon = "bookmark-hollow.svg"  // Name.file extension of the symbol to be displayed
    let buttonPath = "/chrome/icons/" // Path to folder containing the icon
    
    // end configuration-----------------------------------
    
    let props = {
        style: "list-style-image: url('" + PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)) + buttonPath + buttonIcon + "');",
                };
  • Frage zum Firefox Nightly Updates

    • Mitleser
    • 30. Juli 2023 um 22:52

    Da will ich bestimmt nicht stören, wo du doch gerade "diese Tage" hast.


    Nee! Ist gut jetzt! Reicht! Ende.

  • Was hört Ihr gerade?

    • Mitleser
    • 30. Juli 2023 um 21:28

    Alles mit Stil - "Bipolar"

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Frage zum Firefox Nightly Updates

    • Mitleser
    • 30. Juli 2023 um 21:03

    @.DeJaVu

    Verstehe ich nicht, ist mir zu hoch, geht das auch mit einfachen Erklärungen? Sozusagen für Blöde? Also ganz einfach?

Unterstütze uns!

Jährlich (2025)

101,9 %

101,9% (662,48 von 650 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon