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

Beiträge von Endor

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

    • Endor
    • 11. Juni 2025 um 21:10

    Klammer weg und nun geht es auch.
    Es lag also an den Tomaten auf meinen Augen....
    Vielen Dank für Deine Hilfe Horstmann .
    Tolles Script. Darf ich das bei mir auf Github hoch laden?
    Mfg.
    Endor

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

    • Endor
    • 11. Juni 2025 um 20:09

    Hallo Horstmann .
    Danke für Dein Script. Funktioniert sehr gut. Nur eine Frage
    wo im Script kann ich die Farbe des Textes der Ordneranzahl ändern.

    Habe es hier probiert, Absatz D ab Zeile 109, da wirkt es nur für die Lesezeichen.

    Code
           /* D */
           /* Farben Text / svg! Icons aendern , anpassen nach Belieben */
           /* Info: HSL Farben: https://www.w3schools.com/css/css_colors_hsl.asp */
           /* Ordner Icon, Zahl / Links Icon, Zahl / Trennlinie */
           #bmContent.bm_my_colors {
              --folder_fill:  hsl(0, 100%, 50%, 1));
              --folder_color: hsl(0, 100%, 50%, 1));
              --link_fill:    hsl(0, 100%, 50%, 1);
              --link_color:   hsl(0, 100%, 50%, 1);
              --trenn_color:  hsl(250, 60%, 30%, 1);
              }
    Alles anzeigen

    Mfg.
    Endor

  • Script für Button um about-Dialog aufzurufen -

    • Endor
    • 10. Juni 2025 um 21:14

    harff182

    Bitte mal testen:

    JavaScript
    (function() {
    
    
        if (location != "chrome://browser/content/browser.xhtml") return;
    
        try {
            // Firefox 'Über Firefox'
            // Tooltiptext: 'Über Firefox öffnen',
            CustomizableUI.createWidget({
                id: 'openAboutDialog-ToolBarButton',
                type: 'custom',
                onBuild: function(aDocument) {
                    let toolbaritem = aDocument.createXULElement('toolbarbutton');
                    let props = {
                        id: 'openAboutDialog-ToolBarButton',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'Über Firefox',
                        accesskey: 'i',
                        tooltiptext: 'Über Firefox öffnen',
                        style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABnlBMVEVHcEwAAAAABQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGi8AAAAAAAAACAwAIzcAHTIABQoAHjMAGCsAHjEAPV0ANlgAAAAAHDAAAAAAAAAABAcALVAAAAAABAcANlIANVAAMlQAHzEAAwUAJ0QAAAAALEkAAAAAAAAABAYAdsIAcb0Aa7kAfMcAgswAh9EAldwAZrQAjdUAlNsAargAcb4AdrEAd8MAkNgAj9cAktr///8AZ7UAeLwAY68AXKQAe74AhM4AgcsAZ7YAZZkAg80AY5gAbrMAidIAcL0AfscJfMQAidAaic0Ae8UAeLkAeroAhc8AfMgCg8wAS4MAecUAUYgAWJgAWZ40jssAW5q01+2w2O/j7/g0jsoAlt3O5fQAZ5YAaZgAjdYBg8wAk9tCntYAhLvK5vVwv+j1+v36/P7f8PnS6vYAi9MAhbwAjNRcuudaueft9vuAxuqn2vKj2PIzm9YAiNLN6PYBk9rL5/YEidEDidEAaLbZ6fQAZrUAa63J3/CSvd8AV5aHttsAWZgAdMAARnsATIBnpYJbAAAAKnRSTlMAJJU3QlpXDAURC9shD5Td3pLe19r19VvZDUSG9COF7Oz12oPrOO02WIa8WgzIAAAA7UlEQVQY02NgAAEOZjY2Zg4GGGCXU0hMz0+Sl2aH8BklAuKNLY0Kkv1FGEF8TgEfg1RjA2OLCj0vIU6gAJODgZVVUWlZYVVekDsTA4OkmIGlUaZ1daV1iVGguSI7g5Sbhb5+Rk5tTXGuvr55GAuDuJmHnl5wil55doyeXmgUKwOrmasuEKRlJfjq6mqFszKwuDhpAUF0rDeQ9AxhYWAXdTTV1taOiwQS2iYyXAwMfLZaOjo6TfVAwsReEOQwfj/TBsPWZkNDZztuXpBTZZUa23VsDG3qIoR5oJ7TVOtsa+lQUeaC+5dDVYNNHeJ9AMPoLvVmYcZtAAAAAElFTkSuQmCC)',
                    };
                    for (var p in props) {
                        toolbaritem.setAttribute(p, props[p]);
                    }
                    toolbaritem.addEventListener("command", (event) => {
                        event.target.ownerGlobal.openAboutDialog();
                    });
                    return toolbaritem;
                }
            });
    	    } catch(e){};
    
    })();
    Alles anzeigen

    Mfg.
    Endor

  • Der Glückwunsch-Thread

    • Endor
    • 10. Juni 2025 um 18:06

    Hallo *Nobbi* .

    Auch von mir alles alles Gute zum Geburtstag. Vor allem viel Gesundheit aber auch viel Glück und Wohlergehen wünsche ich dir von ganzem Herzen bleibt gesund.

    Viele Grüße
    Endor

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

    • Endor
    • 9. Juni 2025 um 18:05

    bege
    erledigt:

    userChrome.js/Firefox 139/SaveTo.uc.js at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

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

    • Endor
    • 9. Juni 2025 um 16:56

    Halle bege

    Kann ich gerne machen.
    Würde vorschlagen mein vorhandenes mit obigem ersetzen.
    Was meinst Du - Ihr?

    Mfg.
    Endor

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

    • Endor
    • 2. Juni 2025 um 08:15

    Hallo zusammen.
    Für das Script saveto.uc.js gibt es eine neue Version für Firefox 139
    Denkt daran eure Anpassungen - Änderungen zu übertragen.

    CSS
    // ==UserScript==
    // @include       chrome://mozapps/content/downloads/unknownContentType.xhtml
    // @charset       UTF-8
    // @sandbox       true
    // @version       Fx139+
    // ==/UserScript==
    
    (function() {
    
    	const {FileUtils} = ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs');
    	const {setTimeout} = ChromeUtils.importESModule('resource://gre/modules/Timer.sys.mjs');
    
    	const css = `
    		hbox.dialog-button-box button.dialog-button menupopup {
    			background: #F0F0F0 !important;
    			border: 1px solid #CCCCCC !important;
    			padding: 2px !important;
    		}
    		hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic:hover {
    			background: #91C9F7 !important;
    		}
    		hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic hbox.menu-iconic {
    			padding: 3px !important;
    		}
    		hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text{
    			padding: 3px !important;
    			padding-left: 5px !important;
    			padding-right: 12px !important;
    		}`;
    	const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
    	try {
    		const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
    		if(!sss.sheetRegistered(uri, sss.AGENT_SHEET))
    		sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    	} catch (ex) {}
    	
    	setTimeout(function() {
    		saveTo()
    	}, 200);
    
    	function saveTo() {
    		// config
    		const dirArray = [
    			['C:\\', 'System'],
    			['D:\\', 'DATA'],
    			['D:\\Software', 'Software'],
    			['D:\\Downloads', 'herunterladen'],
    			['D:\\Video', 'Video'],
    			['' + FileUtils.getDir('UChrm', []).path + '', 'chrome'],
    			//['' + FileUtils.getDir('UChrm', ['SubScript']).path + '', 'SubScript'],
    
    			['F:\\', 'F:'],
    			['G:\\', 'G:'],
    			['H:\\', 'H:'],
    		];
    
    		const button = document.getElementById('unknownContentType').getButton('cancel');
    		const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button);
    		const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup'));
    		saveTo.classList.toggle('dialog-button');
    		saveTo.label = 'Speichern nach';
    		saveTo.type = 'menu';
    		dirArray.forEach(function(dir) {
    			const name = dir[1];
    			dir = dir[0];
    			const mi = document.createXULElement('menuitem');
    			const item = saveToMenu.appendChild(mi);
    			item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0]));
    			item.setAttribute('image', 'moz-icon:file:///' + dir + '\\');
    			item.setAttribute('class', 'menuitem-iconic');
    			item.addEventListener('click', function() {
    				const locationtext = document.getElementById('locationtext');
    				const file = new FileUtils.File(dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value));
    				dialog.mLauncher.saveDestinationAvailable(file);
    				dialog.onCancel = function() {};
    				close();
    			});
    		});
    	}
    }());
    Alles anzeigen

    Diese Version ist nun auch bei Github zu finden:

    userChrome.js/Firefox 139/saveto.uc.js at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

  • UndoListInTabmenuToo mit funktionierendem Tooltip

    • Endor
    • 31. Mai 2025 um 20:39

    Hallo 2002Andreas

    Danke für den Hinweis.
    Ich warte damit noch bis der Autor Alice sich bei Github meldet.
    Mal sehen.
    Mfg.
    Endor

  • UndoListInTabmenuToo mit funktionierendem Tooltip

    • Endor
    • 31. Mai 2025 um 12:38

    Hallo Speravir .
    Vielen Dank. Habe Deinen fix in meine deutsche Version übertragen:

    userChrome.js/Firefox 135/UndoListInTabmenuToo.uc.js at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

  • extras_config_menu.uc.js in Fx 139 keine Funktion mehr

    • Endor
    • 20. Mai 2025 um 19:18

    Hallo omar1979
    Hast Du in Firefox 139 in about:config den Eintrag
    security.browser_xhtml_csp.enabled auf false gesetzt?
    Sonst geht das Script nicht mehr.

    Wenn ja, müsstest Du bitte deine Version vom Script
    mal ganz hier einstellen. Dann kann man es vergleichen.

    Mfg.
    Endor

  • about:about Button

    • Endor
    • 12. Mai 2025 um 14:18

    Ja die Scripte werden in der Reihenfolge wie sie im Ordner sind geladen.
    Daher habe ich hier alle Scripe die mit Leisten zu tun haben bei der Bezeichnung
    eine 0- Null mit Bindestrich voran gestellt.
    Also zbs: 0-Leiste1.uc.js , 0-Leiste2.uc.js usw.
    So werden die als erstes geladen und dann erst andere Scripte die sich auf diese
    Leisten beziehen.
    Mfg.
    Endor

  • Einbindung von Icons in Skripts

    • Endor
    • 8. Mai 2025 um 08:08
    Zitat von Speravir

    Endor hat geschrieben, dass er kaum Zeit hat.

    Danke Speravir.
    Genau so ist es. Beruf und schwer kranker Vater, da bleibt fast keine Zeit mehr
    für was anderes. Ich aktualisiere gerne alle Scripte sobald ihr sie fertig habt.
    Gebt mir bitte Bescheid. Auch wenn ich nicht ein geloggt bin lese ich immer mit.
    Viele Grüße
    Endor

  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Endor
    • 7. Mai 2025 um 14:23

    Speravir und Mira_Belle .
    Habe alle drei Scripte hoch geladen.
    Bitte kontrollieren:

    userChrome.js/Firefox 138 at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

  • AddOnLister.uc.js funktioniert in Fx 138 nicht mehr.

    • Endor
    • 4. Mai 2025 um 20:48

    Hallo milupo und Mira_Belle .
    Vielen Dank nochmals und habe ich schon erledigt:

    userChrome.js/Firefox 138/AddOnLister.uc.js at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Mira_Belle
    Danke für das Einfügen der neuen Versionsnummer.
    :thumbup:

    Mfg.
    Endor

  • AddOnLister.uc.js funktioniert in Fx 138 nicht mehr.

    • Endor
    • 4. Mai 2025 um 19:59

    Hallo milupo.
    Vielen Dank funktioniert wieder bestens.
    Habe es in Firefox 138.0.1 und 139.0b3 getestet.
    Alles funktioniert wie es soll.
    :thumbup:

    Mfg.
    Endor

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Endor
    • 1. Mai 2025 um 19:33

    Hallo GermanFreme82
    Ne das schaff ich nicht. Ich brauche auch immer Hilfe....
    Ändere in Zeile 35 bei TabBar_Position die 0 auf 1, starte Firefox neu mit Cache leeren
    dann müsste die Tableiste wieder unten sein.
    Mfg.
    Endor

  • AddOnLister.uc.js funktioniert in Fx 138 nicht mehr.

    • Endor
    • 1. Mai 2025 um 17:32

    Das wäre die Version für Firefox.
    Das Script hat seinerzeit Mithrandir gemacht.

    HTML
    // ==UserScript==
    // @name           AddOnLister.uc.js
    // @compatibility  Firefox 36.*, 37.*, 60.*, 63.*,113.*
    // @include        main
    // @version        1.0.20230519
    // ==/UserScript==
    
    var ADONLI = {
    
    // ----- Start Konfiguration
    	// folgende Add-ons nicht auflisten Beispiel: ["InfoLister","AddOnLister.uc.js"]
    	BLACKLIST:			[],
    	// einige Tests der Konfiguration durchführen (true oder false)?
    	CHECKCONFIG:		true,
    	// ans eigene System anpassen - Pfad mit Verzeichnistrenner abschliessen. Unter Windows den \ bitte verdoppeln
    	EXPORTPATH:			"C:\\Users\\Paulmichl\\Documents\\Firefox\\",
    	//Dateinamen ohne(!) Erweiterung eingeben - diese wird weiter unten im Wert "fileext" pro Ausgabeformat definiert
    	EXPORTFILE:			"addonlister",
    	// Ausgabeformat bbcode, html oder custom
    	FORMAT:				"bbcode",
    	// Erstellungsdatum anzeigen (true oder false)
    	SHOWDATE:			true,
    	// Useragent anzeigen (true oder false)
    	SHOWUSERAGENT:		true,
    	// Versuche folgende userChromeJS-Skripte *nicht* mit GitHub zu verlinken, weil nicht gewünscht oder möglich. ["*"] für gar keine Verlinkung
    	GITHUBBLACKLIST:	["about-config.uc.js", "about-plugins.uc.js" ,"AddonsSidebar.uc.xul", "autopopupablepatch1.uc.js", "autopopupablepatch3.uc.js", "Chronik-Lesezeichen.uc.js", "Close-other-tabs.uc.js", "ContextHistory.uc.xul", "CustomAppMenu.uc.js", "Download-button.uc.js", "Einstellungen-Customize.uc.js", "element_inspector.uc.js", "Entwickler-Werkzeug.uc.js", "expandsidebar40.uc.js", "favicon-about-plugins.uc.js", "feedbutton-urlbar.uc.js",	"Fehlerkonsole.uc.js", "Link-per-Email.uc.js", "liste-leeren.uc.js", "memorymonitor.uc.js", "open-folder.uc.js", "OpenDownloadFolderButtonM.uc.js", "OpenLibraryContextMenu.uc.xul", "Preferences.uc.js", "RestartFirefox_plus.uc.js", "savefoldermodoki.uc.xul", "scrollTotop-bottom.uc.js", "searchplugin-4-aboutconfig.uc.js", "speedupErrorConsole.uc.js", "Statusbar-Date.uc.js", "Stylish-Fenster-Sidebar.uc.js", "Tabmixplus-Einstelungen-in-Tabkontext.uc.js", "Tabmixplus-Options.uc.js", "ucjs_PrivateToolMenus-APP.uc.js", "ucjs_statusbar_zoom_panel_1.3.uc.js", "WebDeveloper-Menu.uc.js"],
    	// In der folgenden Zeile  den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
    	TEXTOPENEXE :		'C:\\Program Files\\Notepad++\\notepad++.exe',
    	// Aufzulistende Add-On-Typen festlegen - möglich sind: ["extension","theme","plugin","dictionary","service","userstyle","greasemonkey-user-script","userchromejs"]
    	WHICHTYPES:			["extension","theme","plugin","dictionary","userchromejs"],
    // ----- Ende Konfiguration
    
    // ----- Start Expertenkonfiguration
    	ICON_URL:	"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAACGUlEQVR42mL8//8/AzJYtWy+G5ByB2IrINaECl8H4mNAvDMsKnEXsnqAAGIEGXDv1nmGM2cuKAD5OUCcAcTcDNjBVyCeAcRTTEwMHiipGTIABBALSBSquRmIY5iZmT8ICvI/FxQU4OHm5mID6/r67df79x++vH//kfPv37/FQCFxoJ5aoAEPAAKIBWoyyOYYdnb2Z9LSkqxCQgKSyNby8/OxAzEvH9+H10+fPn/28+fPGKDwSyAuAQggZi01eZCfu4E2f5OVlWYAahaFaTx95jyDnaM3Ax8fL4OhgS4DJycHNysr649Pnz7/Bnrd/OrlC2cAAogJGmDcQGd/Q9YMAv8YORmSkpIY+Hh54GIgNSC10HByBwggFmhoMwD9LIgeYrKSAgz+Ps4MOtqaKOIgtW/evAMxrQACiAkWVcAAY0JWBHQmg7d/ONgb6ABJrSZAADHhiC6G3Xv2gw1xdXFgwAcAAogJmkhAUfUPWeL+w8cMamoqDDLSUgxMbKi+Q1J7HSCAmKApjAEYz++RFV2/fouBg52dYeXqDQzHj+xGMQBJ7TGAAAIZsBNkKDCRcL179+E1TJGXpysDCysbw4dPPxjMzUzgmkFqQGqhqXInQACBkzIw/fcAOcVICUkUm39BmoEJ6TcwIUkBub3AfFECEECwlDgFlDxBKezhw8cfPn36hC8pgwxfAtXDABBAFGcmgABipDQ7AwQYAOqo3UvZE3l2AAAAAElFTkSuQmCC",
    	MYTPLS:{
    		'html':	//für Darstellung als vollständiges html5-Dokument
    			{
    			'fileext':'html',
    			'opendatauri': false,
    			'intro':'<!DOCTYPE html>\n<html>\n<head>\n<meta charset="UTF-8">\n'
    				+'<title>Meine Firefox-Informationen</title>\n</head>\n<body>\n<h1>Meine Firefox-Informationen</h1>\n',
    			'tpllastupd':'<div>\nLetzte Aktualisierung: %%lastupd%%\n</div>',
    			'tpluseragent':'<div>\nUser Agent: %%useragent%%\n</div>',
    			'tpladdongrp_title':{
    								'extension':'<div id="extensions">\n<h2>Erweiterungen <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>',
    								'theme':'<div id="themes">\n<h2>Themes <small>(%%count%%)</small></h2>',
    								'plugin':'<div id="plugins">\n<h2>Plugins <small>(%%count%%)</small></h2>',
    								'dictionary':'<div id="dictionaries">\n<h2>Wörterbücher <small>(%%count%%)</small></h2>',
    								'service':'<div id="services">\n<h2>Dienste <small>(%%count%%)</small></h2>',
    								'userstyle':'<div id="userstyles">\n<h2>Userstyles <small>(%%count%%)</small></h2>',
    								'greasemonkey-user-script':'<div id="gmscripts">\n<h2>Greasemonkey <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>',
    								'userchromejs':'<div id="userchromejs">\n<h2>userChromeJS <small>(%%count%%)</small></h2>'
    								},
    			'tpladdongrp_intro':{
    								'default':'',
    								'greasemonkey-user-script':'<p>Greasemonkey-Skripte können Webseiten um diverse Funktionen erweitern.</p>',
    								'userchromejs':'<p>Durch die Erweiterung <a href="http://userchromejs.mozdev.org/">userChromeJS</a> eingebundene Skripte ergänzen den Firefox um diverse Funktionen.</p>'
    								},
    			'tpladdongrp_list_intro':{
    								'default':'<ul>'
    								},
    			'tpladdon':'<li class="%%class%%"><a href="%%homepageURL%%">%%name%%</a> %%version%%: %%description%%%%disabled%%</li>\n',
    			'tpladdon_without_url':'<li class="%%class%%">%%name%% %%version%%: %%description%%%%disabled%%</li>\n',
    			'activeclass':'addonactive',
    			'inactiveclass':'addoninactive',
    			'disabledtext':'<small><span style="color:#ff0000;">[deaktiviert]</span></small>',
    			'tpladdongrp_list_outro':'</ul>\n',
    			'tpladdongrp_outro':'</div>\n\n',
    			'outro':'</body>\n</html>'
    			},
    		'bbcode':	//für Postings in Foren, die bbcode unterstützen
    			{
    			'fileext':'txt',
    			'opendatauri': true,
    			'intro':'Meine Firefox-Informationen\n\n',
    			'tpllastupd':'Letzte Aktualisierung: %%lastupd%%',
    			'tpluseragent':'User Agent: %%useragent%%\n',
    			'tpladdongrp_title':{
    								'extension':'[b]Erweiterungen[/b] (aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)',
    								'theme':'[b]Themes[/b] (%%count%%)',
    								'plugin':'[b]Plugins[/b] (%%count%%)',
    								'dictionary':'[b]Wörterbücher[/b] (%%count%%)',
    								'service':'[b]Dienste[/b] (%%count%%)',
    								'userstyle':'[b]Userstyles[/b] (%%count%%)',
    								'greasemonkey-user-script':'[b]Greasemonkey[/b] (aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)',
    								'userchromejs':'[b]userChromeJS[/b] (%%count%%)'
    								},
    			'tpladdongrp_intro':{
    								'default':'',
    								'greasemonkey-user-script':'Greasemonkey-Skripte können Webseiten um diverse Funktionen erweitern.',
    								'userchromejs':'Durch die Erweiterung [url=http://userchromejs.mozdev.org/]userChromeJS[/url] eingebundene Skripte ergänzen den Firefox um diverse Funktionen.'
    								},
    			'tpladdongrp_list_intro':{
    								'default':'[list]'
    								},
    			'tpladdon':'[*][url=%%homepageURL%%]%%name%%[/url] %%version%%: %%description%%%%disabled%%\n',
    			'tpladdon_without_url':'[*]%%name%% %%version%%: %%description%%%%disabled%%\n',
    			'activeclass':'addonactive',
    			'inactiveclass':'addoninactive',
    			'disabledtext':' [color=red][deaktiviert][/color]',
    			'tpladdongrp_list_outro':'[/list]\n',
    			'tpladdongrp_outro':'\n',
    			'outro':''
    			},
    		'custom':	//Beispiel - für Darstellung als "include" in einem anderen (x)html-Dokument
    			{
    			'fileext':'txt',
    			'opendatauri': true,
    			'intro':'<p id="bsbuttons">\n'
    				+'<a class="tab active" href="http://www.ardiman.de/sonstiges/fxconfig.html?mode=windows">Windows 7</a>\n'
    				+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html?mode=ubuntu">XUbuntu</a>\n'
    				+'</p>\n'
    				+'<div id="buttons">\n'
    				+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#extensions">Erweiterungen</a>\n'
    				+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#themes">Themes</a>\n'
    				+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#plugins">Plugins</a>\n'
    				//+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#dictionaries">Wörterbücher</a>\n'
    				//+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#services">Dienste</a>\n'
    				//+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#userstyles">Userstyles</a>\n'
    				+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#gmscripts">Greasemonkey</a>\n'
    				+'<a class="tab" href="http://www.ardiman.de/sonstiges/fxconfig.html#userchromejs">userChromeJS</a>\n'
    				+'<br/></div>\n',
    			'tpllastupd':'<div class="lastupd">\nLetzte Aktualisierung: %%lastupd%%\n</div>',
    			'tpluseragent':'<div class="useragent">\nUser Agent: %%useragent%%\n</div>',
    			'tpladdongrp_title':{
    								'extension':'<div id="extensions" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_extensions.png" />Erweiterungen <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>',
    								'theme':'<div id="themes" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_themes.png" />Themes <small>(%%count%%)</small></h2>',
    								'plugin':'<div id="plugins" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_plugins.gif" />Plugins <small>(%%count%%)</small></h2>',
    								'dictionary':'<div id="dictionaries" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_dictionaries.png" />Wörterbücher <small>(%%count%%)</small></h2>',
    								'service':'<div id="services" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_services.png" />Dienste <small>(%%count%%)</small></h2>',
    								'userstyle':'<div id="userstyles" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_styles.png" />Userstyles <small>(%%count%%)</small></h2>',
    								'greasemonkey-user-script':'<div id="gmscripts" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_monkey.png" />Greasemonkey <small>(aktiviert: %%countactive%%, deaktiviert: %%countinactive%%, gesamt: %%count%%)</small></h2>',
    								'userchromejs':'<div id="userchromejs" class="tab-element">\n<h2><img alt="" style="float: right; margin: 0.5ex 1ex 0 0;" width="16" height="16" src="/assets/images/fx_javascript.gif" />userChromeJS <small>(%%count%%)</small></h2>'
    								},
    			'tpladdongrp_intro':{
    								'default':'',
    								'greasemonkey-user-script':'<p>Einige Skripte stammen direkt von mir (s. auch <a href="http://www.ardiman.de/sonstiges/fxconfig/gmskripte.html">Greasemonkey-Skripte</a> bzw. <a class="extlink" href="https://openuserjs.org/users/ardiman/scripts" rel="nofollow">https://openuserjs.org/users/ardiman/scripts</a>), andere wurden nur geringf&uuml;gig angepasst.</p>',
    								'userchromejs':'<p id="fxcuclisteintro">Durch die Erweiterung userChromeJS eingebundene Skripte erg&auml;nzen den Firefox um diverse Funktionen.</p>'
    								},
    			'tpladdongrp_list_intro':{
    								'default':'<ul>',
    								'userchromejs':'<ul id="fxcucliste">'
    								},
    			'tpladdon':'<li class="%%class%%"><a href="%%homepageURL%%" rel="nofollow" class="extlink">%%name%%</a> %%version%%: %%description%%%%disabled%%</li>\n',
    			'tpladdon_without_url':'<li class="%%class%%">%%name%% %%version%%: %%description%%%%disabled%%</li>\n',
    			'activeclass':'addonactive',
    			'inactiveclass':'addoninactive',
    			'disabledtext':' <small>[deaktiviert]</small>',
    			'tpladdongrp_list_outro':'</ul>\n',
    			'tpladdongrp_outro':'</div>\n\n',
    			'outro':''
    			}
    	},
    // ----- Ende Expertenkonfiguration
    
    	MYSTOR: {},
        FILEUTILS: ChromeUtils.importESModule('resource://gre/modules/FileUtils.sys.mjs').FileUtils,
    
    	init: function() {
    		// legt verschiebbaren Button und Menü unter Extras an
    		// Button
    		if (location != "chrome://browser/content/browser.xhtml") return;
    		try {
    			CustomizableUI.createWidget({
    				id: 'adonli-button',
    				type: 'custom',
    				// defaultArea: CustomizableUI.AREA_NAVBAR,
    				onBuild: function(aDocument) {
    					var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
    					var attributes = {
    						id: 'adonli-button',
    						class: 'toolbarbutton-1 chromeclass-toolbar-additional',
    						removable: 'true',
    						label: 'AddonLister',
    						tooltiptext: 'AddOnLister starten (Erstellung im Format »'+ADONLI.FORMAT+'«):\nLinksklick öffnet Ergebnis im Editor\nMittelklick öffnet Ergebnis als Tab im Browser\nRechtsklick exportiert die Liste ohne Anzeige im Editor oder Browser',
    						style: 'list-style-image: url(' + ADONLI.ICON_URL + ')',
    						onclick: 'event.preventDefault(); return ADONLI.launch(event.button, \"' + ADONLI.FORMAT +'\");'
    					};
    				for (var a in attributes)
    					toolbaritem.setAttribute(a, attributes[a]);
    					return toolbaritem;
    				}
    			});
    		} catch(e) { };
    		// Menü
    		function addNode(parentId, type, attributes) {
    			let node = document.createXULElement(type);
    			for (let a in attributes) {
    				node.setAttribute(a, attributes[a]);
    			};
    			document.getElementById(parentId).appendChild(node);
    		};
    		addNode("menu_ToolsPopup", "menu", {
    			id: "menu_ucjsAddonLister",
    			accesskey: "L",
    			label: "AddonLister",
    			class: "menu-iconic",
    			style: "list-style-image: url(" + ADONLI.ICON_URL + ")"
    		});
    		document.getElementById("menu_ToolsPopup")
    			.insertBefore(document.getElementById("menu_ucjsAddonLister"),
    			              document.getElementById("menu_openAddons").nextSibling);
    		addNode("menu_ucjsAddonLister", "menupopup", {
    			id: "menu_ucjsAddonLister-popup"
    		});
    		addNode("menu_ucjsAddonLister-popup", "menu", {
    			id: "menu_ucjsAddonLister-bbcode",
    			accesskey: "B",
    			label: "BBCODE",
    			class: "menu-iconic"
    		});
    		addNode("menu_ucjsAddonLister-bbcode", "menupopup", {
    			id: "menu_ucjsAddonLister-popup-bbcode"
    		});
    		addNode("menu_ucjsAddonLister-popup-bbcode", "menuitem", {
    			id: "menu_ucjsAddonLister_editor-bbcode",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(0,\'bbcode\')",
    			accesskey: "E",
    			label: "Liste erstellen und im Editor anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup-bbcode", "menuitem", {
    			id: "menu_ucjsAddonLister_browser-bbcode",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(1,\'bbcode\')",
    			accesskey: "A",
    			label: "Liste erstellen und im Browser anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup-bbcode", "menuitem", {
    			id: "menu_ucjsAddonLister_write-bbcode",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(2,\'bbcode\')",
    			accesskey: "o",
    			label: "Liste erstellen ohne Anzeige"
    		});
    		addNode("menu_ucjsAddonLister-popup", "menu", {
    			id: "menu_ucjsAddonLister-html",
    			accesskey: "H",
    			label: "HTML",
    			class: "menu-iconic"
    		});
    		addNode("menu_ucjsAddonLister-html", "menupopup", {
    			id: "menu_ucjsAddonLister-popup-html"
    		});
    		addNode("menu_ucjsAddonLister-popup-html", "menuitem", {
    			id: "menu_ucjsAddonLister_editor-html",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(0,\'html\')",
    			accesskey: "E",
    			label: "Liste erstellen und im Editor anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup-html", "menuitem", {
    			id: "menu_ucjsAddonLister_browser-html",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(1,\'html\')",
    			accesskey: "A",
    			label: "Liste erstellen und im Browser anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup-html", "menuitem", {
    			id: "menu_ucjsAddonLister_write-html",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(2,\'html\')",
    			accesskey: "o",
    			label: "Liste erstellen ohne Anzeige"
    		});
    		addNode("menu_ucjsAddonLister-popup", "menu", {
    			id: "menu_ucjsAddonLister-custom",
    			accesskey: "C",
    			label: "Custom",
    			class: "menu-iconic"
    		});
    		addNode("menu_ucjsAddonLister-custom", "menupopup", {
    			id: "menu_ucjsAddonLister-popup-custom"
    		});
    		addNode("menu_ucjsAddonLister-popup-custom", "menuitem", {
    			id: "menu_ucjsAddonLister_editor-custom",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(0,\'custom\')",
    			accesskey: "E",
    			label: "Liste erstellen und im Editor anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup-custom", "menuitem", {
    			id: "menu_ucjsAddonLister_browser-custom",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(1,\'custom\')",
    			accesskey: "A",
    			label: "Liste erstellen und im Browser anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup-custom", "menuitem", {
    			id: "menu_ucjsAddonLister_write-custom",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(2,\'custom\')",
    			accesskey: "o",
    			label: "Liste erstellen ohne Anzeige"
    		});
    		addNode("menu_ucjsAddonLister-popup", "menuitem", {
    			tooltiptext: "Erstellung im Format »" + ADONLI.FORMAT + "«",
    			id: "menu_ucjsAddonLister_editor",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(0,\'" + ADONLI.FORMAT + "\')",
    			accesskey: "E",
    			label: "Liste erstellen und im Editor anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup", "menuitem", {
    			tooltiptext: "Erstellung im Format »" + ADONLI.FORMAT + "«",
    			id: "menu_ucjsAddonLister_browser",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(1,\'" + ADONLI.FORMAT + "\')",
    			accesskey: "A",
    			label: "Liste erstellen und im Browser anzeigen"
    		});
    		addNode("menu_ucjsAddonLister-popup", "menuitem", {
    			tooltiptext: "Erstellung im Format »" + ADONLI.FORMAT + "«",
    			id: "menu_ucjsAddonLister_write",
    			class: "menAddonLister_item",
    			oncommand: "ADONLI.launch(2,\'" + ADONLI.FORMAT + "\')",
    			accesskey: "o",
    			label: "Liste erstellen ohne Anzeige"
    		});
    	},
    
    	launch: function(e,format) {
    		// ruft alle noetigen Funktionen nach Klick auf Toolbarbutton auf
    		var ctrlConf = "";
    		if (this.CHECKCONFIG) ctrlConf = this.configCheck();
    		if (ctrlConf === "") {
    			var expfile =  this.EXPORTPATH + this.EXPORTFILE + "." + this.MYTPLS[format].fileext;
    			this.getOtherValues();
    			this.resetStor();
    			this.getAddons();
    			if (this.WHICHTYPES.indexOf('userchromejs') !== -1) this.getScripts();
    			var result = this.writeAddons(expfile,format);
    			this.showAddons(e,this.TEXTOPENEXE,expfile,format,result);
    		} else {
    			alert ("Lt. Konfigurationstest des AddonListers muss folgendes kontrolliert werden:\n" + ctrlConf);
    		}
    	},
    
    	configCheck: function() {
    		var fehler = "";
    		// Kontrolle des Pfades
    		if (this.EXPORTPATH.substr(-1) !== "\\" && this.EXPORTPATH.substr(-1) !== "/") fehler += "\n - Der Pfad in EXPORTPATH endet nicht mit einem Verzeichnistrenner.";
    		if (!this.fileExists(this.EXPORTPATH)) fehler += "\n - Der Pfad »" + this.EXPORTPATH + "« in EXPORTPATH existiert nicht.";
    		// Kontrolle des Dateinamens
    		if (this.EXPORTFILE.indexOf(".") !== -1) fehler += "\n - Der Dateiname in EXPORTFILE sollte keinen Punkt enthalten (ohne Erweiterung sein).";
    		if (this.EXPORTFILE.length === 0) fehler += "\n - Es wurde kein Dateiname in EXPORTFILE hinterlegt.";
    		// Kontrolle des Formates
    		var formate = ["bbcode", "custom", "html"];
    		if (formate.indexOf(this.FORMAT) === -1) fehler += "\n - Ungültiges FORMAT »" + this.FORMAT + "«.";
    		// Kontrolle des Editors
    		if (!this.fileExists(this.TEXTOPENEXE)) {
    			var pref = Cc["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
    			if (!this.fileExists(pref.getCharPref("view_source.editor.path"))) {
    				fehler += "\n - Der in TEXTOPENEXE und about:config [view_source.editor.path] hinterlegte Editor kann nicht gefunden werden.";
    			}
    		}
    		// Kontrolle der gewünschten Addon-Typen, folgende sind momentan gültig:
    		var addontypes = ["extension","theme","plugin","dictionary","service","userstyle","greasemonkey-user-script","userchromejs"];
    		var w;
    		for (w = 0; w < this.WHICHTYPES.length; w++) {
    			if (addontypes.indexOf(this.WHICHTYPES[w]) === -1) {
    				fehler += "\n - In WHICHTYPES wurden ein oder mehrere unbekannte Add-on-Typen (z.B. »" + this.WHICHTYPES[w] + "«) gewählt.";
    				break;
    			}
    		}
    		return fehler;
    	},
    
    	fileExists: function(mypath) {
    		// kontrolliert, ob Pfad oder Datei gültig/vorhanden ist
    		var file = new this.FILEUTILS.File(mypath);
    		return file.exists();
    	},
    
    	resetStor: function() {
    		// setzt das JSON-Object (bzw. die "Listen" darin) zurueck
    		var h;
    		for (h = 0; h < this.WHICHTYPES.length; h++) {
    			this.MYSTOR[this.WHICHTYPES[h]] = [];
    		}
    	},
    
    	getOtherValues: function() {
    		// speichert momentan Auswertungsdatum und useragent im JSON-Object
    		var options;
    		options = {weekday: "long", year: "numeric", month: "long", day: "numeric", hour: "numeric", minute: "numeric", second: "numeric", hour12: false};
    		if (this.SHOWDATE) this.MYSTOR["lastupd"] = new Date().toLocaleDateString("de-DE", options);
    		if (this.SHOWUSERAGENT) this.MYSTOR["useragent"] = window.navigator.userAgent;
    	},
    
    	getAddons: function() {
    		// speichert die gewaehlten Addons (s. WHICHTYPES) im JSON-Object
    		var i, x, j, iAo, Addons, added, storedItems;
    		AddonManager.getAddonsByTypes(this.WHICHTYPES).then(function(addonlist) {
    			Addons = addonlist;
    		});
    		var thread = Cc['@mozilla.org/thread-manager;1'].getService().mainThread;
    		while (Addons === void(0)) {
    			thread.processNextEvent(true);
    		}
    		// Schleife ueber Addons
    		for (i = 0; i < Addons.length; i++) {
    			iAo = Addons[i];
    			added = false;
    			storedItems = this.MYSTOR[iAo.type].length;
    			// nächste Aktionen nur, wenn Addon *nicht* in BLACKLIST steht
    			if (this.BLACKLIST.indexOf(iAo.name) === -1) {
    				// Ablage gleich sortiert vornehmen
    				for (j = 0; j < storedItems; j++) {
    					if (iAo.name.toLowerCase() < this.MYSTOR[iAo.type][j].name.toLowerCase()) {
    						this.MYSTOR[iAo.type].splice(j,0,{ 'name': iAo.name, 'version': iAo.version, 'active': iAo.isActive, 'homepage': iAo.homepageURL});
    						added = true;
    						break;
    					}
    				}
    				if (!added) this.MYSTOR[iAo.type].push({ 'name': iAo.name, 'version': iAo.version, 'active': iAo.isActive, 'homepage': iAo.homepageURL});
    			}
    		}
    	},
    
    	getScripts: function() {
    		// speichert ggf. im Chrome-Ordner vorhandene uc.js und uc.xul-Dateien im JSON-Object
    		var hp, j, storedItems, added;
    		// Suchmuster, also die Dateierweiterungen uc.js und uc.xul
    		let extjs = /\.uc\.js$/i;
    		let extxul = /\.uc\.xul$/i;
    		let aFolder = Cc["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties).get("UChrm", Components.interfaces.nsIFile);
    		// files mit Eintraegen im Chrome-Ordner befuellen
    		let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
    		// Ordner bzw. Dateien durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind
    		while (files.hasMoreElements()) {
    			let file = files.getNext().QueryInterface(Ci.nsIFile);
    			// keine gewuenschte Datei, deshalb continue
    			if ((!extjs.test(file.leafName) && !extxul.test(file.leafName)) || this.BLACKLIST.indexOf(file.leafName) !== -1) continue;
    			// uc.js bzw. uc.xul gefunden, die nicht in der Blacklist stehen -> Ablage sortiert (unter Linux erforderlich) im JSON vornehmen
    			hp = this.githubLink(file.leafName);
    			added = false;
    			storedItems = this.MYSTOR.userchromejs.length;
    			for (j = 0; j < storedItems; j++) {
    				if (file.leafName.toLowerCase() < this.MYSTOR.userchromejs[j].name.toLowerCase()) {
    					this.MYSTOR.userchromejs.splice(j,0,{'name': file.leafName, 'version': undefined, 'active': true, 'description': undefined, 'homepage': hp});
    					added = true;
    					break;
    				}
    			}
    			if (!added) this.MYSTOR.userchromejs.push({'name': file.leafName, 'version': undefined, 'active': true, 'description': undefined, 'homepage': hp});
    		}
    	},
    
    	githubLink: function(sName) {
    		// übergibt für gegebenen Skriptnamen den Link zu github
    		// früher Ausstieg, da Skript nicht verlinkt werden soll
    		if (this.GITHUBBLACKLIST.indexOf(sName) !== -1 || this.GITHUBBLACKLIST.indexOf("*") !== -1) return null;
    		sName = sName.toLowerCase();
    		/* Das folgende Array enthaelt regulaere Ausdruecke, um ungueltige Zeichenfolgen entfernen:
    		/Datei-Erweiterungen am Ende/, /"ucjs_" am Anfang/, /"_"gefolgtVonZahlUndDanachBeliebigenZeichen/
    		/ "_fx"gefolgtVonZahl(en)/, /"-" oder "+" oder "."/, /"_v"gefolgtVonZahlen
    		*/
    		var regs = [/\.uc\.js$/,/\.uc\.xul$/,/^ucjs_/,/_\d.+/,/_fx\d+/,/[-+\.]/g,/_v\d+/];
    		for (var i = 0; i < regs.length; i++) {
    			sName = sName.replace(regs[i],"");
    		}
    		return "https://github.com/endor8/userChrome.js/tree/master/" + sName;
    	},
    
    	writeAddons: function(file,format){
    		var a, t, c, n, d, atype, aout, thisaddon;
    		var output = "";
    		var addontpl = "";
    		var addontplwithouturl = "";
    		//Cu.import("resource://gre/modules/osfile.jsm");
    
    		addontpl = this.MYTPLS[format].tpladdon;
    		addontplwithouturl = this.MYTPLS[format].tpladdon_without_url;
    		output += this.MYTPLS[format].intro;
    
    		if (this.SHOWDATE) output +=  this.MYTPLS[format].tpllastupd.replace(/%%lastupd%%/g,this.MYSTOR.lastupd)+"\n";
    		if (this.SHOWUSERAGENT) output +=  this.MYTPLS[format].tpluseragent.replace(/%%useragent%%/g,this.MYSTOR.useragent)+"\n";
    
    		for (t = 0; t < this.WHICHTYPES.length; t++) {
    			atype = this.WHICHTYPES[t];
    			c = this.MYSTOR[atype].length;
    			n = 0;
    			d = 0;
    			output += this.MYTPLS[format].tpladdongrp_title[atype].replace(/%%count%%/g,c)+"\n";
    			if (this.MYTPLS[format].tpladdongrp_intro[atype] == undefined) {
    				output += this.MYTPLS[format].tpladdongrp_intro.default + (this.MYTPLS[format].tpladdongrp_intro.default.length > 0 ? "\n" : "");
    			} else {
    				output += this.MYTPLS[format].tpladdongrp_intro[atype] + (this.MYTPLS[format].tpladdongrp_intro[atype].length > 0 ? "\n" : "");
    			}
    			if (this.MYTPLS[format].tpladdongrp_list_intro[atype] == undefined) {
    				output += this.MYTPLS[format].tpladdongrp_list_intro.default+"\n";
    			} else {
    				output += this.MYTPLS[format].tpladdongrp_list_intro[atype]+"\n";
    			}
    			for (a = 0; a < c; a++) {
    				thisaddon =  this.MYSTOR[atype][a];
    				// console.log(atype + " " + thisaddon.name + " " + thisaddon.active);
    				if (thisaddon.homepage == undefined) {
    					aout = addontplwithouturl;
    				} else {
    					aout = addontpl;
    					aout = aout.replace(/%%homepageURL%%/g,thisaddon.homepage.replace(/&(?!amp;)/g,'&amp;'));
    				}
    				aout = aout.replace(/%%name%%/g,thisaddon.name);
    				if (thisaddon.version == undefined) {
    					if (thisaddon.description != undefined) {
    						aout = aout.replace(/ %%version%%: /g,": ");
    					} else {
    						aout = aout.replace(/ %%version%%: /g,"");
    					}
    				}
    				aout = aout.replace(/%%version%%/g,thisaddon.version);
    				if (thisaddon.description != undefined) {
    					aout = aout.replace(/%%description%%/g,thisaddon.description);
    				} else {
    					aout = aout.replace(/%%description%%/g,"");
    				}
    				if (thisaddon.active !== true) {
    					aout = aout.replace(/%%class%%/g,this.MYTPLS[format].inactiveclass);
    					aout = aout.replace(/%%disabled%%/g,this.MYTPLS[format].disabledtext);
    					d++;
    				} else {
    					aout = aout.replace(/%%class%%/g,this.MYTPLS[format].activeclass);
    					aout = aout.replace(/%%disabled%%/g,"");
    					n++;
    				}
    				output += aout;
    			}
    			output = output.replace(/%%countactive%%/g,n).replace(/%%countinactive%%/g,d);
    			output += this.MYTPLS[format].tpladdongrp_list_outro;
    			output += this.MYTPLS[format].tpladdongrp_outro;
    		}
    		output += this.MYTPLS[format].outro+"\n";
    		let encoder = new TextEncoder();
    		let myarray = encoder.encode(output);
    		let promise = IOUtils.write(file, myarray);
    		return output;
    	},
    
    	showAddons: function(e,RanPath,OpenPath,format,myoutput) {
    		// zeigt das EXPORTFILE im Editor oder im Browser (Mittelklick) an
    		switch (e) {
    			case 0:
    				var file = new this.FILEUTILS.File(RanPath);
    				var proc = Cc["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
    				var args = [OpenPath];
    				// falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen:
    				if (!this.fileExists(RanPath)) {
    					console.log("AddonLister meldet: Editor nicht gefunden, ausweichen auf about:config.");
    					var pref = Cc["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
    					RanPath = pref.getCharPref("view_source.editor.path");
    					file = new this.FILEUTILS.File(RanPath);
    				}
    				proc.init(file);
    				proc.run(false, args, args.length);
    				break;
    			case 1:
    				if (this.MYTPLS[format].opendatauri) {
    					var datastring = myoutput.replace(/\n/g,"%0A").replace(/#/g,"%23");
    					// getBrowser().selectedTab = getBrowser().addTrustedTab('data:text/plain;charset=utf-8,' + datastring);
    					openTrustedLinkIn('data:text/plain;charset=utf-8,' + datastring, "tab");
    					XULBrowserWindow.statusTextField.label = "Export nach  »"+ OpenPath + "« ist erfolgt.";
    				} else {
    					// alert sorgt ein wenig dafür, dem OS Zeit fürs Speichern der Datei zu geben ...
    					alert("Export nach »"+ OpenPath + "« ("+ format + "-format) ist erfolgt.");
    					openTrustedLinkIn(OpenPath, "tab");
    					//getBrowser().selectedTab = getBrowser().addTrustedTab(OpenPath);
    				}
    				break;
    			default:
    				XULBrowserWindow.statusTextField.label = "Export nach  »"+ OpenPath + "« ist erfolgt.";
    				break;
    		}
    	}
    
    };
    
    ADONLI.init();
    Alles anzeigen

    Funktioniert natürlich nicht mehr ab Firefox 138.
    Schaltfläche wird angezeigt, und unter Extras der Menüeintrag mit Untermenüs usw.
    Nur bei klick auf was auch immer tut sich nichts.
    Mfg.
    Endor

  • Skripte funktionieren nicht mehr

    • Endor
    • 1. Mai 2025 um 17:05

    Schön wäre es.
    Arbeiten, liegengebliebenes aufräumen und und und und.
    Mein Vater braucht mich auch praktisch immer usw.

    Dir ein schönes langes erholsames WE.

    Mfg.
    Endor

  • Skripte funktionieren nicht mehr

    • Endor
    • 1. Mai 2025 um 16:56

    Hallo .DeJaVu .
    Ja bei mir hat es leider bei Firefox 135 aufgehört.
    Hatte keinerlei Zeit mehr zum kümmern.
    Habe für Firefox 139 schon mal den Ordner erstellt.
    Scripte fehlen noch.

    MultiRowTabLiteforFx.uc.js habe ich heute endlich die Deutsche Version hoch geladen.

    userChrome.js/Multirowtabs/Firefox 138/MultiRowTabLiteforFx.uc.js at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Beruf und RL nehmen mich zur Zeit ganz in Anspruch.
    Mfg.
    Endor

  • Mehrzeilige Tableiste für aktuelle Firefox-Versionen

    • Endor
    • 1. Mai 2025 um 16:26

    So die aktuelle Version des Scriptes auf Deutsch ist jetzt verfügbar:

    userChrome.js/Multirowtabs/Firefox 138/MultiRowTabLiteforFx.uc.js at master · Endor8/userChrome.js
    Skripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.
    github.com

    Mfg.
    Endor

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