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. Boersenfeger

Beiträge von Boersenfeger

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Boersenfeger
    • 9. Juli 2023 um 16:45

    Nee,

    Zitat von Boersenfeger

    Es geht um die Auflistung vorn in schwarz... :)

    ..als Verursacher konnte ich dieses zusätzliche Script verantwortlich machen:

    JavaScript
    (function() {
    
      if (!window.gBrowser)
        return;
    
      function setFunction() {
        PlacesViewBase.prototype._onPopupShowing = function PVB__onPopupShowing(aEvent) {
    
          let popup = aEvent.originalTarget;
          this._ensureMarkers(popup);
          if ("_delayedRemovals" in popup) {
            while (popup._delayedRemovals.length) {
              popup.removeChild(popup._delayedRemovals.shift());
            }
          }
          if (popup._placesNode && PlacesUIUtils.getViewForNode(popup) == this) {
            if (!popup._placesNode.containerOpen) {
              popup._placesNode.containerOpen = true;
            }
            if (!popup._built) {
              this._rebuildPopup(popup);
            }
            this._mayAddCommandsItems(popup);
          }
    
          /* original function end */
    
          for (let item of popup.children) {
            if (item.localName != 'menu' || item.id?.startsWith('history'))
              continue;
            setTimeout(() => {
              let itemPopup = item.menupopup;
              itemPopup.openPopup();
              itemPopup.hidePopup();
              let menuitemCount = 0;
              let menuCount = 0;
              for (let subitem of itemPopup.children) {
                if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                  if (subitem.localName == 'menuitem') {
                    menuitemCount++;
                  } else if (subitem.localName == 'menu') {
                    menuCount++;
                  }
                }
              }
              if (!item.labelOriginal) {
                item.labelOriginal = item.label;
              }
              item.labelSuffix = '  (' + menuCount + '/' + menuitemCount + ')';
    //          item.setAttribute("id", "menu-menuitem-count");
    //          item.labelSuffix.setAttribute("color", "red");
    //          item.labelSuffix = className("menu-menuitem-count");
    //          item.labelSuffix.className = "menu-menuitem-count";
    //          menuitemCount.setAttribute("id", "menu-menuitem-count");
              item.label = item.labelOriginal + item.labelSuffix;
            }, 100);
          }
    
          popup.addEventListener('popuphidden', function onPopuphidden(event) {
            if (event.target != this)
              return;
            popup.removeEventListener('popuphidden', onPopuphidden);
            for (let item of popup.children) {
              if (item.localName == 'menu') {
                if (item.labelOriginal) {
                  item.label = item.labelOriginal;
                  item.labelOriginal = undefined;
                }
              }
            }
          });
    
        }
    
      }
    
      setTimeout(function() {
          setFunction();
      },50);
      
    })();
    Alles anzeigen

    Nun passt es. Danke für deine Hilfe! :)

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Boersenfeger
    • 9. Juli 2023 um 16:25

    Prima, jetzt kloppt mir nur wieder ein anderer Code dazwischen, den muss ich erstmal suchen... auf die Schnelle wurde er nicht identifiziert

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Boersenfeger
    • 9. Juli 2023 um 16:05
    Zitat von grisu2099

    Ich habe die Anzeige noch mal durchgemischt... ;)

    Kann man die Bezeichnungen "Ordner" und "Links" auch entfernen? :)

  • Kann mich bei Etsy nicht ausloggen

    • Boersenfeger
    • 5. Juli 2023 um 16:24

    ..über Profil... ;)

  • Mal den head mit den Metatags zu aktualisieren

    • Boersenfeger
    • 5. Juli 2023 um 16:07

    jo, loshombre Eigentlich kannste dich mal wieder raustrauen aus der Hölle... :D

  • Video DownloadHelper Version 7.6.6

    • Boersenfeger
    • 5. Juli 2023 um 15:26

    Ich werde eh nie begreifen, warum man sich Filme auf sein Gerät runtermüllt. Wer Konserve gucken muss, kann Streamen, legal und für "relativ" wenig Geld. Aber vermutlich sehen das nur Nutzer in meinem Alter (Ü60) das so... ;)

  • CSS-Dateien werden nicht geladen

    • Boersenfeger
    • 5. Juli 2023 um 14:45

    .. dann einmal im abgesicherten Modus starten, danach wieder normal...

  • CSS-Dateien werden nicht geladen

    • Boersenfeger
    • 5. Juli 2023 um 14:09

    :/

    Ich nutze anscheinend eine andere Version... die aber in 115 und 117 funktioniert:

    JavaScript
    // ==UserScript==
    // @name UserCSSLoader
    // @description CSS Codes - Styles laden und verwalten
    // @namespace https://d.hatena.ne.jp/Griever/
    // @author Griever
    // @include main
    // @license MIT License
    // @compatibility Firefox 4 - 102*
    // @charset UTF-8
    // @version 0.0.4k
    // @note Fx92: getURLSpecFromFile() -> getURLSpecFromActualFile()
    // @note AUTHOR_SHEET Verwendung hinzugefügt, wichtig: am Ende des Dateinamens .author.css
    // @note Version 0.0.4.g ermoeglicht "Styles importieren" per Mittelklick und Verwendung
    // @note eines anderen Dateimanager (s. vFileManager in Zeile 53)
    // @note Frei verschiebbare Schaltfläche eingebaut von aborix
    // @note 0.0.4 Remove E4X
    // @note CSSEntry-Klasse erstellt
    // @note Style-Test-Funktion überarbeitet
    // @note Wenn die Datei gelöscht wurde, CSS beim Neu erstellen und Löschen des Menüs abbrechen
    // @note uc einlesen .uc.css temporäre Korrespondenz zum erneuten Lesen
    // ==/UserScript==
    
    /****** Bedienungsanleitung ******
    
    Da der CSS-Ordner im Chrome-Ordner erstellt wurde, CSS-Dateien dort ablegen - speichern.
    Diejenigen, deren Dateiname mit "xul-" beginnen, diejenigen, die mit ".as.css" enden, sind AGENT_SHEET,
    andere außer USER_SHEET werden gelesen. Da der Inhalt der Datei nicht überprüft wird,
    darauf achten, @ Namespace Angabe nicht zu vergessen!
    
    CSS-Menü wird zur Menüleiste hinzugefügt
    Linksklick auf Stil, zum aktivieren/deaktivieren
    Mittelklick auf Stil zum aktivieren/deaktivieren, ohne Menü zu schließen
    Rechtsklick auf Stil zum Öffnen im Editor
    
    Verwenden des in "view_source.editor.path" angegebenen Editors
    Ordner kann geändert werden, indem ein Pfad in "UserCSSLoader.FOLDER" eingefügt wird
    
    **** Anleitung Ende ****/
    
    (function(){
    
    let { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components;
    if (!window.Services)
    Cu.import("resource://gre/modules/Services.jsm");
    // Wenn beim Start ein anderes Fenster angezeigt wird (das zweite Fenster), wird es beendet
    let list = Services.wm.getEnumerator("navigator:browser");
    while(list.hasMoreElements()){ if(list.getNext() != window) return; }
    
    if (window.UCL) {
    window.UCL.destroy();
    delete window.UCL;
    }
    
    window.UCL = {
    vFileManager: 'H:\\Total Commander\\TOTALCMD64.EXE',
    vFMParameter: '/T',
    USE_UC: "UC" in window,
    AGENT_SHEET: Ci.nsIStyleSheetService.AGENT_SHEET,
    USER_SHEET : Ci.nsIStyleSheetService.USER_SHEET,
    AUTHOR_SHEET: Ci.nsIStyleSheetService.AUTHOR_SHEET,
    readCSS : {},
    get disabled_list() {
    let obj = [];
    try {
    obj = this.prefs.getCharPref("disabled_list").split("|");
    } catch(e) {}
    delete this.disabled_list;
    return this.disabled_list = obj;
    },
    get prefs() {
    delete this.prefs;
    return this.prefs = Services.prefs.getBranch("UserCSSLoader.")
    },
    get styleSheetServices(){
    delete this.styleSheetServices;
    return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
    },
    get FOLDER() {
    let aFolder;
    try {
    // UserCSSLoader.FOLDER verwenden
    let folderPath = this.prefs.getCharPref("FOLDER");
    aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile)
    aFolder.initWithPath(folderPath);
    } catch (e) {
    aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile);
    aFolder.appendRelativePath("CSS");
    }
    if (!aFolder.exists() || !aFolder.isDirectory()) {
    aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0664);
    }
    delete this.FOLDER;
    return this.FOLDER = aFolder;
    },
    getFocusedWindow: function() {
    let win = document.commandDispatcher.focusedWindow;
    if (!win || win == window) win = content;
    return win;
    },
    
    init: function() {
    const cssmenu = $C("menu", {
    id: "usercssloader-menu",
    label: "CSS",
    accesskey: "C",
    onclick: "if (event.button == 1) UCL.rebuild()"
    });
    const menupopup = $C("menupopup", {
    id: "usercssloader-menupopup"
    });
    cssmenu.appendChild(menupopup);
    
    let menu = $C("menu", {
    label: "Style Loader Menü",
    accesskey: "M"
    });
    menupopup.appendChild(menu);
    let mp = $C("menupopup", { id: "usercssloader-submenupopup" });
    menu.appendChild(mp);
    mp.appendChild($C("menuitem", {
    label: "Styles importieren",
    accesskey: "R",
    acceltext: "Alt + R",
    oncommand: "UCL.rebuild();"
    }));
    mp.appendChild($C("menuseparator"));
    mp.appendChild($C("menuitem", {
    label: "CSS Datei erstellen",
    accesskey: "D",
    oncommand: "UCL.create();"
    }));
    mp.appendChild($C("menuitem", {
    label: "CSS Ordner öffnen",
    accesskey: "O",
    oncommand: "UCL.openFolder();"
    }));
    mp.appendChild($C("menuitem", {
    label: "userChrome.css bearbeiten",
    hidden: false,
    oncommand: "UCL.editUserCSS(\'userChrome.css\');"
    }));
    mp.appendChild($C("menuitem", {
    label: "userContent.css bearbeiten",
    hidden: false,
    oncommand: "UCL.editUserCSS(\'userContent.css\');"
    }));
    mp.appendChild($C("menuseparator"));
    mp.appendChild($C("menuitem", {
    label: "Style Test (Chrome)",
    id: "usercssloader-test-chrome",
    hidden: true,
    accesskey: "C",
    oncommand: "UCL.styleTest(window);"
    }));
    mp.appendChild($C("menuitem", {
    label: "Style Test (Web)",
    id: "usercssloader-test-content",
    hidden: true,
    accesskey: "W",
    oncommand: "UCL.styleTest();"
    }));
    mp.appendChild($C("menuitem", {
    label: "Styles dieser Seite auf userstyles.org finden",
    accesskey: "S",
    oncommand: "UCL.searchStyle();"
    }));
    
    menu = $C("menu", {
    label: ".uc.css",
    accesskey: "U",
    hidden: !UCL.USE_UC
    });
    menupopup.appendChild(menu);
    mp = $C("menupopup", { id: "usercssloader-ucmenupopup" });
    menu.appendChild(mp);
    mp.appendChild($C("menuitem", {
    label: "Importieren(.uc.js)",
    oncommand: "UCL.UCrebuild();"
    }));
    mp.appendChild($C("menuseparator", { id: "usercssloader-ucseparator" }));
    
    CustomizableUI.createWidget({
    id: 'usercssloader-menu-item',
    type: 'custom',
    defaultArea: CustomizableUI.AREA_NAVBAR,
    onBuild: function(aDocument) {
    let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbaritem');
    toolbaritem.id = 'usercssloader-menu-item';
    toolbaritem.className = 'chromeclass-toolbar-additional';
    return toolbaritem;
    }
    });
    $('usercssloader-menu-item').appendChild(cssmenu);
    
    //let refNode = $('helpMenu');
    //refNode.parentNode.insertBefore(cssmenu, refNode.nextSibling);
    
    $("mainKeyset").appendChild($C("key", {
    id: "usercssloader-rebuild-key",
    oncommand: "UCL.rebuild();",
    key: "R",
    modifiers: "alt",
    }));
    this.rebuild();
    this.initialized = true;
    if (UCL.USE_UC) {
    setTimeout(function() {
    UCL.UCcreateMenuitem();
    }, 1000);
    }
    window.addEventListener("unload", this, false);
    },
    uninit: function() {
    const dis = [];
    for (let x of Object.keys(this.readCSS)) {
    if (!this.readCSS[x].enabled)
    dis.push(x);
    }
    this.prefs.setCharPref("disabled_list", dis.join("|"));
    window.removeEventListener("unload", this, false);
    },
    destroy: function() {
    var i = document.getElementById("usercssloader-menu");
    if (i) i.parentNode.removeChild(i);
    var i = document.getElementById("usercssloader-rebuild-key");
    if (i) i.parentNode.removeChild(i);
    this.uninit();
    },
    handleEvent: function(event) {
    switch(event.type){
    case "unload": this.uninit(); break;
    }
    },
    rebuild: function() {
    let ext = /\.css$/i;
    let not = /\.uc\.css/i;
    let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
    while (files.hasMoreElements()) {
    let file = files.getNext().QueryInterface(Ci.nsIFile);
    if (!ext.test(file.leafName) || not.test(file.leafName)) continue;
    let CSS = this.loadCSS(file);
    CSS.flag = true;
    }
    for (let leafName of Object.keys(this.readCSS)) {
    const CSS = this.readCSS[leafName];
    if (!CSS.flag) {
    CSS.enabled = false;
    delete this.readCSS[leafName];
    }
    delete CSS.flag;
    this.rebuildMenu(leafName);
    }
    if (this.initialized) {
    if (typeof(StatusPanel) !== "undefined")
    StatusPanel._label = "Style importiert";
    else
    XULBrowserWindow.statusTextField.label = "Styles importieren";
    }
    },
    loadCSS: function(aFile) {
    var CSS = this.readCSS[aFile.leafName];
    if (!CSS) {
    CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile);
    if (this.disabled_list.indexOf(CSS.leafName) === -1) {
    CSS.enabled = true;
    }
    } else if (CSS.enabled) {
    CSS.enabled = true;
    }
    return CSS;
    },
    rebuildMenu: function(aLeafName) {
    var CSS = this.readCSS[aLeafName];
    var menuitem = document.getElementById("usercssloader-" + aLeafName);
    if (!CSS) {
    if (menuitem)
    menuitem.parentNode.removeChild(menuitem);
    return;
    }
    if (!menuitem) {
    menuitem = $C("menuitem", {
    label        : aLeafName,
    id            : "usercssloader-" + aLeafName,
    class        : "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET? "AGENT_SHEET" : CSS.SHEET == this.AUTHOR_SHEET? "AUTHOR_SHEET": "USER_SHEET"),
    type        : "checkbox",
    autocheck    : "false",
    oncommand    : "UCL.toggle('"+ aLeafName +"');",
    onclick        : "UCL.itemClick(event);"
    });
    document.getElementById("usercssloader-menupopup").appendChild(menuitem);
    }
    menuitem.setAttribute("checked", CSS.enabled);
    },
    toggle: function(aLeafName) {
    var CSS = this.readCSS[aLeafName];
    if (!CSS) return;
    CSS.enabled = !CSS.enabled;
    this.rebuildMenu(aLeafName);
    },
    itemClick: function(event) {
    if (event.button == 0) return;
    event.preventDefault();
    event.stopPropagation();
    let label = event.currentTarget.getAttribute("label");
    if (event.button == 1) {
    this.toggle(label);
    }
    else if (event.button == 2) {
    closeMenus(event.target);
    this.edit(this.getFileFromLeafName(label));
    }
    },
    getFileFromLeafName: function(aLeafName) {
    let f = this.FOLDER.clone();
    f.QueryInterface(Ci.nsIFile); // use appendRelativePath
    f.appendRelativePath(aLeafName);
    return f;
    },
    styleTest: function(aWindow) {
    aWindow || (aWindow = this.getFocusedWindow());
    new CSSTester(aWindow, function(tester){
    if (tester.saved)
    UCL.rebuild();
    });
    },
    searchStyle: function() {
    let word;
    try {
    word = gBrowser.currentURI.host;
    } catch {
    word = gBrowser.currentURI.spec;
    }
    openWebLinkIn("https://userstyles.org/styles/search/" + word, "tab", {});
    },
    openFolder:function(){
    if (this.vFileManager.length != 0) {
    var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
    var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
    var args=[this.FOLDER.path];
    file.initWithPath(this.vFileManager);
    process.init(file);
    // Verzeichnis mit anderem Dateimanager öffnen
    process.run(false, args, args.length);
    } else {
    // Verzeichnis mit Dateimanager des Systems öffnen
    this.FOLDER.launch();
    }
    },
    editUserCSS: function(aLeafName) {
    let file = Services.dirsvc.get("UChrm", Ci.nsIFile);
    file.appendRelativePath(aLeafName);
    this.edit(file);
    },
    edit: function(aFile) {
    var editor = Services.prefs.getCharPref("view_source.editor.path");
    if (!editor) return alert("Unter about:config den vorhandenen Schalter:\n view_source.editor.path mit dem Editorpfad ergänzen");
    try {
    var UI = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
    UI.charset = window.navigator.platform.toLowerCase().indexOf("win") >= 0? "Shift_JIS": "UTF-8";
    var path = UI.ConvertFromUnicode(aFile.path);
    var app = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
    app.initWithPath(editor);
    var process = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
    process.init(app);
    process.run(false, [path], 1);
    } catch (e) {}
    },
    create: function(aLeafName) {
    if (!aLeafName) aLeafName = prompt("Name des Styles", dateFormat(new Date(), "%Y_%m%d_%H%M%S"));
    if (aLeafName) aLeafName = aLeafName.replace(/\s+/g, " ").replace(/[\\/:*?\"<>|]/g, "");
    if (!aLeafName || !/\S/.test(aLeafName)) return;
    if (!/\.css$/.test(aLeafName)) aLeafName += ".css";
    let file = this.getFileFromLeafName(aLeafName);
    this.edit(file);
    },
    UCrebuild: function() {
    let re = /^file:.*\.uc\.css(?:\?\d+)?$/i;
    let query = "?" + new Date().getTime();
    Array.slice(document.styleSheets).forEach(function(css){
    if (!re.test(css.href)) return;
    if (css.ownerNode) {
    css.ownerNode.parentNode.removeChild(css.ownerNode);
    }
    let pi = document.createProcessingInstruction('xml-stylesheet','type="text/css" href="'+ css.href.replace(/\?.*/, '') + query +'"');
    document.insertBefore(pi, document.documentElement);
    });
    UCL.UCcreateMenuitem();
    },
    UCcreateMenuitem: function() {
    let sep = $("usercssloader-ucseparator");
    let popup = sep.parentNode;
    if (sep.nextSibling) {
    let range = document.createRange();
    range.setStartAfter(sep);
    range.setEndAfter(popup.lastChild);
    range.deleteContents();
    range.detach();
    }
    
    let re = /^file:.*\.uc\.css(?:\?\d+)?$/i;
    Array.slice(document.styleSheets).forEach(function(css) {
    if (!re.test(css.href)) return;
    let fileURL = decodeURIComponent(css.href).split("?")[0];
    let aLeafName = fileURL.split("/").pop();
    let m = $C("menuitem", {
    label        : aLeafName,
    tooltiptext    : fileURL,
    id            : "usercssloader-" + aLeafName,
    type        : "checkbox",
    autocheck    : "false",
    checked        : "true",
    oncommand    : "this.setAttribute('checked', !(this.css.disabled = !this.css.disabled));",
    onclick        : "UCL.UCItemClick(event);"
    });            
    m.css = css;
    popup.appendChild(m);
    });
    },
    UCItemClick: function(event) {
    if (event.button == 0) return;
    event.preventDefault();
    event.stopPropagation();
    
    if (event.button == 1) {
    event.target.doCommand();
    }
    else if (event.button == 2) {
    closeMenus(event.target);
    let fileURL = event.currentTarget.getAttribute("tooltiptext");
    let file = Services.io.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getFileFromURLSpec(fileURL);
    this.edit(file);
    }
    },
    };
    
    function CSSEntry(aFile) {
    this.path = aFile.path;
    this.leafName = aFile.leafName;
    this.lastModifiedTime = 1;
    this.SHEET = /^xul-|\.as\.css$/i.test(this.leafName) ?
    Ci.nsIStyleSheetService.AGENT_SHEET:
    Ci.nsIStyleSheetService.USER_SHEET;
    }
    CSSEntry.prototype = {
    sss: Components.classes["@mozilla.org/content/style-sheet-service;1"]
    .getService(Components.interfaces.nsIStyleSheetService),
    _enabled: false,
    get enabled() {
    return this._enabled;
    },
    set enabled(isEnable) {
    var aFile = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile)
    aFile.initWithPath(this.path);
    
    var isExists = aFile.exists(); // Wenn die Datei existiert true
    var lastModifiedTime = isExists ? aFile.lastModifiedTime : 0;
    var isForced = this.lastModifiedTime != lastModifiedTime; // Wenn es eine Änderung in der Datei gibt true
    
    var fileURL = Services.io.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile);
    var uri = Services.io.newURI(fileURL, null, null);
    
    if (this.sss.sheetRegistered(uri, this.SHEET)) {
    // Wenn diese Datei bereits gelesen wurde
    if (!isEnable || !isExists) {
    this.sss.unregisterSheet(uri, this.SHEET);
    }
    else if (isForced) {
    // Nach Stornierung erneut einlesen
    this.sss.unregisterSheet(uri, this.SHEET);
    this.sss.loadAndRegisterSheet(uri, this.SHEET);
    }
    } else {
    // Datei wurde nicht gelesen
    if (isEnable && isExists) {
    this.sss.loadAndRegisterSheet(uri, this.SHEET);
    }
    }
    if (this.lastModifiedTime !== 1 && isEnable && isForced) {
    log(this.leafName + " wurde aktualisiert");
    }
    this.lastModifiedTime = lastModifiedTime;
    return this._enabled = isEnable;
    },
    };
    
    function CSSTester(aWindow, aCallback) {
    this.win = aWindow || window;
    this.doc = this.win.document;
    this.callback = aCallback;
    this.init();
    }
    CSSTester.prototype = {
    sss: Components.classes["@mozilla.org/content/style-sheet-service;1"]
    .getService(Components.interfaces.nsIStyleSheetService),
    preview_code: "",
    saved: false,
    init: function() {
    this.dialog = openDialog(
    "data:text/html;charset=utf8,"+encodeURIComponent('<!DOCTYPE HTML><html lang="de"><head><title>CSSTester</title></head><body></body></html>'),
    "",
    "width=550,height=400,dialog=no");
    this.dialog.addEventListener("load", this, false);
    },
    destroy: function() {
    this.preview_end();
    this.dialog.removeEventListener("unload", this, false);
    this.previewButton.removeEventListener("click", this, false);
    this.saveButton.removeEventListener("click", this, false);
    this.closeButton.removeEventListener("click", this, false);
    },
    handleEvent: function(event) {
    switch(event.type) {
    case "click":
    if (event.button != 0) return;
    if (this.previewButton == event.currentTarget) {
    this.preview();
    }
    else if (this.saveButton == event.currentTarget) {
    this.save();
    }
    else if (this.closeButton == event.currentTarget) {
    this.dialog.close();
    }
    break;
    case "load":
    var doc = this.dialog.document;
    doc.body.innerHTML = '\
    <style type="text/css">\
    :not(input):not(select) { padding: 0px; margin: 0px; }\
    table { border-spacing: 0px; }\
    body, html, #main, #textarea { width: 100%; height: 100%; }\
    #textarea { font-family: monospace; }\
    </style>\
    <table id="main">\
    <tr height="100%">\
    <td colspan="4"><textarea id="textarea"></textarea></td>\
    </tr>\
    <tr height="40">\
    <td><input type="button" value="Vorschau" id="Vorschau"/></td>\
    <td><input type="button" value="Speichern" id="Speichern"/></td>\
    <td width="80%"><span class="log"></span></td>\
    <td><input type="button" value="Schließen" id="Schliessen"/></td>\
    </tr>\
    </table>\
    ';
    this.textbox = doc.querySelector("textarea");
    this.previewButton = doc.querySelector('input[value="Vorschau"]');
    this.saveButton = doc.querySelector('input[value="Speichern"]');
    this.closeButton = doc.querySelector('input[value="Schließen"]');
    this.logField = doc.querySelector('.log');
    
    var code = "@namespace url(" + this.doc.documentElement.namespaceURI + ");\n";
    code += this.win.location.protocol.indexOf("http") === 0?
    "@-moz-document domain(" + this.win.location.host + ") {\n\n\n\n}":
    "@-moz-document url(" + this.win.location.href + ") {\n\n\n\n}";
    this.textbox.value = code;
    this.dialog.addEventListener("unload", this, false);
    this.previewButton.addEventListener("click", this, false);
    this.saveButton.addEventListener("click", this, false);
    this.closeButton.addEventListener("click", this, false);
    
    this.textbox.focus();
    let p = this.textbox.value.length - 3;
    this.textbox.setSelectionRange(p, p);
    
    break;
    case "unload":
    this.destroy();
    this.callback(this);
    break;
    }
    },
    preview: function() {
    var code = this.textbox.value;
    if (!code || !/\:/.test(code))
    return;
    code = "data:text/css;charset=utf-8," + encodeURIComponent(this.textbox.value);
    if (code == this.preview_code)
    return;
    this.preview_end();
    var uri = Services.io.newURI(code, null, null);
    this.sss.loadAndRegisterSheet(uri, Ci.nsIStyleSheetService.AGENT_SHEET);
    this.preview_code = code;
    this.log("Preview");
    },
    preview_end: function() {
    if (this.preview_code) {
    let uri = Services.io.newURI(this.preview_code, null, null);
    this.sss.unregisterSheet(uri, Ci.nsIStyleSheetService.AGENT_SHEET);
    this.preview_code = "";
    }
    },
    save: function() {
    var data = this.textbox.value;
    if (!data) return;
    
    var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
    fp.init(window, "", Ci.nsIFilePicker.modeSave);
    fp.appendFilter("CSS Files","*.css");
    fp.defaultExtension = "css";
    if (window.UCL)
    fp.displayDirectory = UCL.FOLDER;
    var res = fp.show();
    if (res != fp.returnOK && res != fp.returnReplace) return;
    
    var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
    suConverter.charset = "UTF-8";
    data = suConverter.ConvertFromUnicode(data);
    var foStream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.nsIFileOutputStream);
    foStream.init(fp.file, 0x02 | 0x08 | 0x20, 0664, 0);
    foStream.write(data, data.length);
    foStream.close();
    this.saved = true;
    },
    log: function() {
    this.logField.textContent = dateFormat(new Date(), "%H:%M:%S") + ": " + $A(arguments);
    }
    };
    
    UCL.init();
    
    function $(id) { return document.getElementById(id); }
    function $A(arr) { return Array.slice(arr); }
    function $C(name, attr) {
    var el = document.createXULElement(name);
    if (attr) Object.keys(attr).forEach(function(n) { el.setAttribute(n, attr[n]) });
    return el;
    }
    function dateFormat(date, format) {
    format = format.replace("%Y", ("000" + date.getFullYear()).substr(-4));
    format = format.replace("%m", ("0" + (date.getMonth()+1)).substr(-2));
    format = format.replace("%d", ("0" + date.getDay()).substr(-2));
    format = format.replace("%H", ("0" + date.getHours()).substr(-2));
    format = format.replace("%M", ("0" + date.getMinutes()).substr(-2));
    format = format.replace("%S", ("0" + date.getSeconds()).substr(-2));
    return format;
    }
    
    function log() { Application.console.log(Array.slice(arguments)); }
    
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 5. Juli 2023 um 14:03

    :) Danke..

  • CSS-Dateien werden nicht geladen

    • Boersenfeger
    • 5. Juli 2023 um 14:01

    Bei mir ist diese Zeile 88 mit Anführungsstrichen...

    aFolder.appendRelativePath("CSS");

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 5. Juli 2023 um 13:13

    Habe den Fehler gefunden! :love:

    CSS
    /* vorgegebene Höhe der Zeilen */
    menupopup > menu ,
    menupopup > menuitem,popup > menu ,
    popup > menuitem  {
        appearance: none!important;
        min-height: 34px !important; /* Höhe in px anpassbar */
        max-height: 34px !important;
    }

    in diesem CSS-Codeschnipsel war die Höhe von 34 px angegeben, habe ich nun geändert auf 22px und alles ist schön.

    Was ich nicht verstehe, das dieser Code erst jüngstens diese Auswirkung hatte. Imho seit der neuen Version vom Script UndoListInTabMenuToo.uc.js.

    Sei es drum, erledigt... für Mitlesende der entsprechende geänderte Code... Danke an alle Beteiligten! 8) :) :thumbup:

    CSS
    /***** POPUP und KONTEXT Menus ******/
    
    /* Hintergrund/Umrandung/Ausrichtung - aller Popup */
    
    menupopup {
       background: #87cefa !important; /* Hintergrund */
    }
    
    /* Vorgegebene Breite der Popup-Fenster */
    
    .menupopup-arrowscrollbox,
    menupopup, 
    popup {
       appearance: none!important;
       width: 250px !important; /* Breite in px anpassbar */
    } 
    
    /* vorgegebene Höhe der Zeilen */
    menupopup > menu ,
    menupopup > menuitem,popup > menu ,
    popup > menuitem  {
        appearance: none!important;
        min-height: 22px !important; /* Höhe in px anpassbar */
        max-height: 22px !important;
    }
    
      .searchbar-textbox, #urlbar {
        border-radius: 20px !important;
        min-height: 33px !important;
        padding: 0 !important;
        margin: 0 2px !important;
        }
    
    /************* SEPARATOREN ***********************/
    
    /* Separatoren werden entfernt (Querlinien) */
    menuseparator {
        display: none !important; 
    }
        
    /************ KONTEXT-MENÜ ****************************
    
    /* Icon Farbe */
    
    #context-navigation > menuitem > hbox.menu-iconic-left {
        appearance: none !important;
        color: #3300ff ! important; /* Farbe */
        font-size: 15px !important;
        padding: 0px  4px 0px 4px !important; /* Ausrichtung */
    }
    
    /* Hintergrund hinter den Icons */
    
    #context-navigation {
        background: activecaption !important; /* Farbe */
        padding: 4px  4px 4px 4px !important; /* Ausrichtung */
    }
    
    /****************** MENÜBAR ********************/
    
    
    :is(menu,menuitem):not(#context-navigation > .menuitem-iconic):hover {
      background-color: lightblue !important;
    } 
    
    /*Höhenverschiebung Menülleiste durch Hovereffekt verhindern*/
    
    #main-menubar {
        height: 28px !important;
    }
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 5. Juli 2023 um 12:08

    Zu groß zum Hochladen. In dieser .css werden im allgemeinen Kontextmenü Abstände von Zeilen geändert. Ob man dort etwas machen kann, damit auch im PopUp der Tabs etwas passiert übersteigt mein Wissen.

    Ich teste nun noch die Auswirkungen der Scripte...

    Dateien

    Kontextmenu Rechtsklick.zip 172,12 kB – 126 Downloads
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 5. Juli 2023 um 11:43

    ..wenn ich dort mit den Werten spiele, ändern sich nur die Abstände im PopUp des Scripts.. ich werde jetzt mal alles durchprüfen.. :rolleyes:

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 5. Juli 2023 um 11:34

    Hier ist keine userChrome.css vorhanden.. :)

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 5. Juli 2023 um 11:30

    Dann werde ich mal suchen... :whistling:

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 5. Juli 2023 um 11:19
    Zitat von 2002Andreas

    Aber in einem anderen, denn Standard sind sie ja nicht.


    Zitat von Boersenfeger

    TabNumber.uc.js

    JavaScript
    /* Tabs nummerieren */
    // ==UserScript==
    // @name           Numbered Tabs
    // @namespace      http://anttirt.net/
    // @description    Adds numbers to tab labels (useful with eg. Pentadactyl)
    // @include        main
    // @compatibility  Firefox 4.0
    // @author         anttirt
    // @version        1.0b
    // @homepage       https://github.com/anttirt/numbered-tabs-firefox
    // ==/UserScript==
    
    (function() {
        var stripPat = /^\d\d*  /;
        var container = gBrowser.tabContainer;
    
        function update(event) {
            var tab = event.target;
            if(typeof tab.tabIndex == "undefined") {
                updateAll();
            }
            else {
                tab.label = String(tab.tabIndex) + "  " + tab.label.replace(stripPat, "");
            }
        }
    
        function updateAll(event) {
            var skip = false;
            for(var i = 0; i < container.allTabs.length; ++i) {
                var tab = container.allTabs[i];
                if(event.type == "TabClose" && tab == event.target) {
                    skip = true;
                    continue;
                }
                tab.tabIndex = i + (skip ? 0 : 1);
                tab.label = String(tab.tabIndex) + "  " + tab.label.replace(stripPat, "");
            }
        }
    
        container.addEventListener("TabAttrModified", update, false);
        container.addEventListener("TabOpen", updateAll, false);
        container.addEventListener("TabMove", updateAll, false);
        container.addEventListener("TabClose", updateAll, false);
    })();
    Alles anzeigen

    Wo wäre da ein entsprechend störender Code? :/

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 4. Juli 2023 um 16:45

    Jetzt nochmal mit der Version aus #3392 getestet, auch damit keine Änderung in den Abständen... :(

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 4. Juli 2023 um 15:51

    Ich hatte das letzte veröffentlichte Script genutzt...

    Übrigens gleiches Bild in Nightly 117

    JavaScript
    // ==UserScript==
    // @name           UndoListInTabmenuToo.uc.js
    // @namespace      http://space.geocities.yahoo.co.jp/gl/alice0775
    // @description    Kürzlich geschlossene Tabsliste in Tab-Kontext und Hauptkontextmenü einfügen.
    // @include        main
    // @compatibility  Firefox 115
    // @author         Alice0775
    // @version        2023/07/02 Einträge für Fenster entfernt
    // @version        2023/06/16 08:00 Bug 1819675 - Expand recently closed tabs to include all Windows
    // @version        2022/05/10 fix ref to context-media-eme-separator
    // @version        2021/12/09 remove JSON.parse (Bug 1733425)
    // @version        2021/04/25 fix 1689378
    // @version        2019/11/14 remove eval
    // @version        2019/06/30 10:00 Bug 1555060 Convert <tabs> to a custom element
    // @version        2019/06/24 23:00 wait for gBrowser initialized
    // @version        2019/05/21 08:30 fix 69.0a1 Bug 1551320 - Replace all createElement calls in XUL documents with createXULElement
    // @version        2018/05/10 60
    // @version        2017/11/18 nsIPrefBranch to nsIPrefBranch
    // @version        2010/09/18 00:00 4.0b7pre
    // @version        2009/02/03 13:00 Tab-Verlauf im Tooltip anzeigen
    // @Note           Fügt die UndoClose-Tab-Liste zu Tabs und Kontextmenüs hinzu
    // @OriginalCode   Orginalcode aus browser.js für populateUndoSubmenu verwenden
    // @version        2018/05/09 15:00 61
    // ==/UserScript==
    // @version        2010/03/26 13:00  Minefield/3.7a4pre Bug 554991 -  allow tab context menu to be modified by normal XUL overlays
    // @version        2010/03/15 00:00  Minefield/3.7a4pre Bug 347930 -  Tab strip should be a toolbar instead
    // @version        2009/09/09 15:00 Mittelklick-Handhabung
    // @version        2009/09/03 22:00 Firefox3.7a1pre Funktion wurde wieder hergestellt. (Bug 489925. getElementById should not return anonymous nodes)
    // @version        2009/08/22 00:00 Firefox3.6 Ändern des stringbandle
    // @version        2009/04/24 00:00 #394759 [Firefox:Session Restore]-Add undo close window feature
    // @version        2008/10/12 18:00 Fx3.0.4pre Mittelklick-Popupmenü wurde nicht geschlossen und andere Korrekturen
    // @version        2007/10/05 10:00
    
    var UndoListInTabmenu = {
    // -- config --
      TABCONTEXTMENU : true , //Im Tabkontextmenü: anzeigen: true, nicht anzeigen: false
      CONTEXTMENU    : true,  //Im Hauptkontextmenü: anzeigen: true , nicht anzeigen: false
    // -- config end--
      ss: null,
    
      get tabContext() {
        return document.getElementById("tabContextMenu");
      },
    
      get navigatorBundle() {
        return Services.strings.createBundle(
               "chrome://browser/locale/browser.properties"
               );
      },
    
      init: function(){
          
           var css =`
        .restoreallitem {
      display: none !important;
    }
    #tabContextUndoList > menupopup > menuitem:nth-child(1), 
    #ContextUndoList > menupopup  > menuitem:nth-child(1) {
      display: none !important;
    }
    
    #tabContextUndoList :is(menu,menuitem),
    #ContextUndoList :is(menu,menuitem) {
      min-height: 20px !important;
      padding-top: 0 !important; 
      padding-bottom: 0 !important;
    }
        
      `;
      
      var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
      var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
      sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
    
    
        if (this.TABCONTEXTMENU){
          //Tabkontextmenü
          var tabContext = this.tabContext;
          this.makePopup(tabContext, null, "tabContextUndoList");
        }
        if (this.CONTEXTMENU){
          //Hauptkontextmenü
          var contextMenu = document.getElementById("contentAreaContextMenu");
          var refItem = document.getElementById("context-media-eme-separator");
          this.makePopup(contextMenu, refItem, "ContextUndoList");
        }
        // Geschlossene Tabs dem NS-Sitzungsspeicher entnehmen
        this._ss = SessionStore;
    
      },
    
      makePopup: function(popup, refItem, id){
        var menu;
        //label
        const locale = "de";
        
        /* "Liste Kürzlich geschlossener Fenster"
        menu = document.createXULElement("menu");
        menu.setAttribute("id", "historyUndoWindowMenu3");
        menu.setAttribute("label", "K\u00FCrzlich geschlossene Fenster");
        menu.setAttribute("accesskey", "F");
        menu.setAttribute("disabled", "true");
        popup.insertBefore(menu, refItem);
    
        this.historyUndoWindowPopup3 = menu = menu.appendChild(document.createXULElement("menupopup"));
        menu.setAttribute("id", "historyUndoWindowPopup3");
        menu.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoWindowSubmenu(this);"); */
    
        //Liste kürzlich geschlossener Tabs
        const LABELTEXT = "Kürzlich geschlossene Tabs";    //create menu
        menu = document.createXULElement("menu");
        menu.setAttribute("label", LABELTEXT);
        menu.setAttribute("accesskey", "T");
        if (id)
          menu.setAttribute("id", id);
        //menu.setAttribute("disabled", true);
        var menupopup = document.createXULElement("menupopup");
        menupopup.setAttribute("onpopupshowing", "UndoListInTabmenu.populateUndoSubmenu(this);");
        menu.appendChild(menupopup);
        popup.insertBefore(menu, refItem);
    
        //Eventlistener hinzufügen
        popup.addEventListener('popupshowing',function(event) {
          UndoListInTabmenu.toggleRecentlyClosedWindows();
          // no restorable tabs, so make sure menu is disabled, and return
          if (UndoListInTabmenu._ss.getClosedTabCount(window) == 0) {
            menu.setAttribute("disabled", true);
            //menu.setAttribute("hidden", true);
            return;
          }
          menu.removeAttribute("disabled");
          //menu.setAttribute("hidden", false);
        },false);
      },
      
       /* Befüllen, wenn das Chronik-Menü geöffnet ist (Fx3.6) */
       
      populateUndoSubmenu: function(undoPopup) {
            while (undoPopup.hasChildNodes()) {
                undoPopup.removeChild(undoPopup.firstChild);
            }
            var utils = RecentlyClosedTabsAndWindowsMenuUtils;
            var tabsFragment = utils.getTabsFragment(
              window,
          "menuitem",
           aPrefixRestoreAll =  true,
          //"menu-history-reopen-all-tabs"
        ); 
            undoPopup.appendChild(tabsFragment);
            undoPopup.firstChild.setAttribute("accesskey", "R");
            var m = undoPopup.insertBefore(document.createXULElement("menuitem"), undoPopup.childNodes[0]);
            // m.setAttribute("label", "Letzten geschlossenen Tab wieder öffnen (s)");
            //m.setAttribute("oncommand", "undoCloseTab()");
            //m.setAttribute("accesskey", "o");
            //undoPopup.insertBefore(document.createXULElement(""), undoPopup.childNodes[2]); 
      
        // populate tab historis for tooltip
        var undoItems = UndoListInTabmenu._ss.getClosedTabDataForWindow(window);
        for (var i = 0; i < undoItems.length; i++) {
          var entries = undoItems[i].state.entries;
          var tooltiptext = "";
          for (var j = entries.length - 1; j > -1; j--){
            if (j != entries.length - 1)
              tooltiptext += "\n";
            tooltiptext += parseInt(j + 1, 10) + ". " + entries[j].title;
          }
          undoPopup.childNodes[i + 2/*restore all, sep*/].setAttribute("tooltiptext", tooltiptext);
        }
    
        // "Append Clear undo close tb list"
        undoPopup.appendChild(document.createXULElement(""));
    
        m = undoPopup.appendChild(document.createXULElement("menuitem"));
        m.setAttribute("label", "Liste der letzten Tabs l\u00F6schen");
        m.setAttribute("accesskey", "h");
        m.addEventListener("command", function() {
          let prefs = Services.prefs;
          let max_undo = prefs.getIntPref("browser.sessionstore.max_tabs_undo");
          prefs.setIntPref("browser.sessionstore.max_tabs_undo", 0);
          prefs.setIntPref("browser.sessionstore.max_tabs_undo", max_undo);
        }, false);
      },
    
      toggleRecentlyClosedWindows: function PHM_toggleRecentlyClosedWindows() {
        // enable/disable the Recently Closed Windows sub menu
        let undoPopup = this.historyUndoWindowPopup3;
        // no restorable windows, so disable menu
        if (this._ss.getClosedWindowCount() == 0)
          this.historyUndoWindowPopup3.parentNode.setAttribute("disabled", true);
        else
          this.historyUndoWindowPopup3.parentNode.removeAttribute("disabled");
      },
    
      /**
       * Populate when the history menu is opened
       */
      populateUndoWindowSubmenu: function PHM_populateUndoWindowSubmenu(undoPopup) {
            while (undoPopup.hasChildNodes()) {
                undoPopup.removeChild(undoPopup.firstChild);
            }
            let utils = RecentlyClosedTabsAndWindowsMenuUtils;
            let windowsFragment = utils.getWindowsFragment(
          window,
          "menuitem",
           aPrefixRestoreAll =  true,
          "menu-history-reopen-all-windows"
        );
        undoPopup.appendChild(windowsFragment);
        undoPopup.firstChild.setAttribute("accesskey", "R");
        undoPopup.insertBefore(document.createXULElement(""), undoPopup.childNodes[1]);
        } 
        };
    
    // Wir sollten die Weiterleitung nur starten, wenn das Browserfenster den Startprozess abgeschlossen hat
    // Ansonsten sollten wir warten, bis der Start abgeschlossen ist.
        if (gBrowserInit.delayedStartupFinished) {
        UndoListInTabmenu.init();
        } 
        else {
        let delayedStartupFinished = (subject, topic) => {
        if (topic == "browser-delayed-startup-finished" &&
            subject == window) {
          Services.obs.removeObserver(delayedStartupFinished, topic);
          UndoListInTabmenu.init();
        }
        };
        Services.obs.addObserver(delayedStartupFinished,
                               "browser-delayed-startup-finished");
        }
    Alles anzeigen

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 4. Juli 2023 um 14:38
    Zitat von 2002Andreas

    Sei nicht zu fleißig.

    Ja, doch viel zu tun gehabt... Leider stehe ich immer noch vor dem Problem..

    Anscheinend bewirken Änderungen in diesem Codeteil (bei mir ab Zeile 62) überhaupt nix, habe mal 40 px genommen... es sieht dann immer noch wie vorher aus

    CSS
    #tabContextUndoList > menupopup > menuitem:nth-child(1), 
    #ContextUndoList > menupopup  > menuitem:nth-child(1) {
      display: none !important;
    }
    
    #tabContextUndoList :is(menu,menuitem),
    #ContextUndoList :is(menu,menuitem) {
      min-height: 40px !important;
      padding-top: 0 !important; 
      padding-bottom: 0 !important;
    }
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Boersenfeger
    • 2. Juli 2023 um 17:49

    Leider keine Änderung

    Für heute Feierabend, muss zur Schicht...

    Danke einstweilen :)

Unterstütze uns!

Jährlich (2025)

94,2 %

94,2% (612,48 von 650 EUR)

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