Beiträge von Endor
-
-
hatte ich schon bemerkt und geändert.
-
Ja ohne Änderung geht es in 115 und 116.
Obiges Script wurde erst heute vom Autor aktualisiert.
Damit es in Firefox 115 und 116 überhaupt geht.In Firefox 114 läuft hier noch die vorgänger- Version:
Code
Alles anzeigen// ==UserScript== // @name UndoCloseTabButtonN // @description Kürzlich geschlossene Tabs, mit Klick auf Schaltfläche in der Navbar oder Mittelklick auf freie Stelle in Tableiste, wiederherstellen. // @version 1.2.6 // @include main // @charset UTF-8 // @note 2021/12/12 Fx95 SessionStore.getClosedTabData / getClosedWindowData // @note 2021/12/12 Rückgabe Wert von JSON in Array geändert // @note 2019/01/23 Fx66 Problem, bei dem das Klicken in die Tableiste nicht funktionierte - behoben // @note 2019/07/04 Fx69 // @note 2019/09/03 Fx70 // @note 2019/12/09 Fx72 // @note 2021/11/21 FX95 Anpassung von aborix // ==/UserScript== // Schaltfläche wird standardmäßig in die Navigationsleiste eingefügt. (function() { "use strict"; const useTabbarMiddleClick = false; // Kürzlich geschlossene Tabs mit Mittelklick auf Tableiste oder neuen Tab // Schaltfläche wiederherstellen, aktivieren? ( true = ja false = nein ) const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; window.ucjsUndoCloseTabButtonService = { prepareMenu(event) { const doc = (event.view && event.view.document) || document; const menu = event.originalTarget; this.removeChilds(menu); // Geschlossene Tabs let data = SessionStore.getClosedTabData(window); if (typeof(data) === "string") { data = JSON.parse(data); } const tabLength = data.length; for (let i = 0; i < tabLength; i++) { const item = data[i]; const m = this.createFaviconMenuitem(doc, item.title, item.image, i, this.undoTab); const state = item.state; let idx = state.index; if (idx == 0) idx = state.entries.length; if (--idx >= 0 && state.entries[idx]) m.setAttribute("targetURI", state.entries[idx].url); menu.appendChild(m); } // Geschlossenes Fenster data = SessionStore.getClosedWindowData(); if (typeof(data) === "string") { data = JSON.parse(data); } const winLength = data.length; if (winLength > 0) { if (tabLength > 0) menu.appendChild(this.$C(doc, "menuseparator")); menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label: "Geschlossene Fenster" })); for (let i = 0; i < winLength; i++) { const item = data[i]; let title = item.title; const tabsCount = item.tabs.length - 1; if (tabsCount > 0) title += " und ( " + tabsCount + " weitere Tabs )"; const tab = item.tabs[item.selected - 1]; const m = this.createFaviconMenuitem(doc, title, tab.image, i, this.undoWindow); menu.appendChild(m); } } if (tabLength + winLength === 0) { /* menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label : "履歴がありません" }));*/ event.preventDefault(); } }, createFaviconMenuitem(doc, label, icon, value, command) { const attr = { class: "menuitem-iconic bookmark-item menuitem-with-favicon", label: label, value: value }; if (icon) { if (/^https?:/.test(icon)) icon = "moz-anno:favicon:" + icon; attr.image = icon; } const m = this.$C(doc, "menuitem", attr); m.addEventListener("command", command, false); return m; }, undoTab(event) { undoCloseTab(event.originalTarget.getAttribute("value")); }, undoWindow(event) { undoCloseWindow(event.originalTarget.getAttribute("value")); }, removeChilds(element) { const range = document.createRange(); range.selectNodeContents(element); range.deleteContents(); }, onClick(event) { if (event.button === 1) { switch (event.originalTarget.localName) { case "box": // -Fx65 case "scrollbox": // Fx66- case "toolbarbutton": event.preventDefault(); event.stopPropagation(); undoCloseTab(); break; } } }, $C(doc, tag, attrs) { const e = tag instanceof Node? tag: doc.createElementNS(XULNS, tag); if (attrs) { Object.entries(attrs).forEach(([key, value]) => e.setAttribute(key, value)); } return e; }, }; function run() { if (useTabbarMiddleClick) { gBrowser.tabContainer.addEventListener("click", ucjsUndoCloseTabButtonService.onClick, true); } const buttonId = "undo1-close-tab-button"; if (document.getElementById(buttonId)) { return; } try { Cu.import("resource:///modules/CustomizableUI.jsm"); CustomizableUI.createWidget({ id : buttonId, defaultArea : CustomizableUI.AREA_NAVBAR, type : "custom", onBuild : doc => { const btn = ucjsUndoCloseTabButtonService.$C(doc, "toolbarbutton", { id : buttonId, class : "toolbarbutton-1 chromeclass-toolbar-additional", type : "menu", anchor : "dropmarker", label: "Geschlossene Tabs", tooltiptext: "Geschlossene Tabs wieder herstellen", image : "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADgUlEQVR42mL8//8/AyUAIIBYYIzVq1dLC4mIrvr08ZPV379/vjEzMwOZnycmxMV04DMAIIAYQC4A4dXr1oU+fvLk/5/fv/9//fzl/9ev3/6vWLnqK0weFwYIIBZ0A79//crw5+9fhh+//jBYWlhz1dc3fgIqZeDh4WHk4uaqysnKmoysHiCAwAbceHRD6uLdQ0kGunoMv9hYGX79/sPw7cdvhn///jNYWJjzgtRw8/AwvHz5smzutlbN4yeP/k8Pqeo11bW5BxBAjCBnFPbHd7EIMJRoiZgx8nBwMvz+85fhJ9CQf3//Mzx9+pQBFM483FwMQG8xMDL/ZXj46cZ/9v/sk6ZWriwACCCwC25eviprEKbGeOP/AYavb34wsHCwMPz9AzTg9z+GP7x/Gf7++ws07B/Djz+/GZiYGBhYBdgYrx68JwXUyggQQGADePgFfjD+ZGHgF+Bl+P7yHZDPycDGws2gKW7GIMAhwnDs4XaGJ1/uMPz+8Z2BnYOZ4fOnzwwsrMxfgVr/AwQQ2ABpGYkv/GLcDELSfEDn/2HgFeZh8JdLYfjw6SODvqw5g4KiPMOsMw0MDEDbOYWABrz5zsAtI/wJpBcggJhABD+P8MefX38x/AU6k+EvIwPHHx4GNgYuhuuPLzCcuL2f4QswZozEHBjYGDmAdjIw/Pn+l0FCVOoNSC9AAIENEBEQe/Pjy0+GP8CA42LgZ/BXTWb48OUdw6m7+xmm7W5hePTqLoOLaigD+28+hnfv3jN8ePMJaIDMc5BegAACGyApLPX82+fvDB/ev2f4/eU/Ax+bEMOLd08ZpITkGbTl9IHp4jfDsev7GL59/8Lw+9dvhp/ffjPISio+BekFCCCwAQpiyrdfPn3F8OrVa4bHr+8zXHxwioGbjY+hwq+PwVkzmCHYMpFBS84A6Pp/DP/+/2P4+/Mvg5Ks+gOQXoAAggSimNqTb59+/v7x7SfL289vGRccmMDAxyrEsO3sKmCC+sKw9+xmhicf7gLxfQZ2QSaG/38YfkvyyoPCgBEggMAGfPnyhV2eV6vzxs7LWr9//Gf+yPKS6f/fl8zAhMgISkX//11h+M/I+A/ohL/f2P7/1VA2uvb161cOkAMAAogRmp1Znz17xsrCwsL07ds3lu/fvzOD2D9+/GCCpXk2Nra/XFxc/4Bif7i5uf9ISUn9Bgr/BggwAMhljD12v/akAAAAAElFTkSuQmCC", onclick : "ucjsUndoCloseTabButtonService.onClick(event);", oncontextmenu : "event.preventDefault();", }); const menu = ucjsUndoCloseTabButtonService.$C(doc, "menupopup", { tooltip : "bhTooltip", popupsinherittooltip: "true", oncontextmenu : "event.preventDefault();", onpopupshowing : "ucjsUndoCloseTabButtonService.prepareMenu(event);", }); btn.appendChild(menu); return btn; }, }); } catch (e) {} } if (gBrowserInit.delayedStartupFinished) { run(); } else { const OBS_TOPIC = "browser-delayed-startup-finished"; const delayedStartupFinished = (subject, topic) => { if (topic === OBS_TOPIC && subject === window) { Services.obs.removeObserver(delayedStartupFinished, topic); run(); } }; Services.obs.addObserver(delayedStartupFinished, OBS_TOPIC); } })();
-
Man soll ja zbs.:
Zeile 168
Cu.import("resource:///modules/CustomizableUI.jsm");so ändern:
Cu.import("resource:///modules/CustomizableUI.sys.mjs");
warum geht dann dieses Script in Firefox 115 - 116 aber nicht mehr?
JavaScript
Alles anzeigen// ==UserScript== // @name UndoCloseTabButtonN // @description Kürzlich geschlossene Tabs, mit Klick auf Schaltfläche in der Navbar oder Mittelklick auf freie Stelle in Tableiste, wiederherstellen. // @version 1.2.6a // @include main // @charset UTF-8 // @note 2023/06/08 Fx115 SessionStore.getClosedTabData → SessionStore.getClosedTabDataForWindow // @note 2022/11/12 Das Verhalten der linken, mittleren und rechten Taste verändern // @note 2021/12/12 Fx95 SessionStore.getClosedTabData / getClosedWindowData // @note 2019/01/23 Fx66 Problem, bei dem das Klicken in die Tableiste nicht funktionierte - behoben // @note 2019/07/04 Fx69 // @note 2019/09/03 Fx70 // @note 2019/12/09 Fx72 // ==/UserScript== // Schaltfläche wird standardmäßig in die Tableiste eingefügt. (function () { "use strict"; const useTabbarMiddleClick = false; // Kürzlich geschlossene Tabs mit Mittelklick auf Tableiste oder neuen Tab // Schaltfläche wiederherstellen, aktivieren? ( true = ja false = nein ) const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; window.ucjsUndoCloseTabButtonService = { prepareMenu(event) { const doc = (event.view && event.view.document) || document; const menu = event.originalTarget; this.removeChilds(menu); // Geschlossene Tabs let data = (SessionStore.getClosedTabData || SessionStore.getClosedTabDataForWindow)(window); if (typeof (data) === "string") { data = JSON.parse(data); } const tabLength = data.length; for (let i = 0; i < tabLength; i++) { const item = data[i]; const m = this.createFaviconMenuitem(doc, item.title, item.image, i, this.undoTab); const state = item.state; let idx = state.index; if (idx == 0) idx = state.entries.length; if (--idx >= 0 && state.entries[idx]) m.setAttribute("targetURI", state.entries[idx].url); menu.appendChild(m); } // Geschlossenes Fenster data = SessionStore.getClosedWindowData(); if (typeof (data) === "string") { data = JSON.parse(data); } const winLength = data.length; if (winLength > 0) { if (tabLength > 0) menu.appendChild(this.$C(doc, "menuseparator")); menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label: Services.locale.appLocaleAsBCP47.includes("de") ? "Geschlossene Fenster" : "閉じたウインドウ" })); for (let i = 0; i < winLength; i++) { const item = data[i]; let title = item.title; const tabsCount = item.tabs.length - 1; if (tabsCount > 0) title += " (他:" + tabsCount + ")"; const tab = item.tabs[item.selected - 1]; const m = this.createFaviconMenuitem(doc, title, tab.image, i, this.undoWindow); menu.appendChild(m); } } if (tabLength + winLength === 0) { /* menu.appendChild(this.$C(doc, "menuitem", { disabled: true, label : "履歴がありません" }));*/ event.preventDefault(); } }, createFaviconMenuitem(doc, label, icon, value, command) { const attr = { class: "menuitem-iconic bookmark-item menuitem-with-favicon", label: label, value: value }; if (icon) { if (/^https?:/.test(icon)) icon = "moz-anno:favicon:" + icon; attr.image = icon; } const m = this.$C(doc, "menuitem", attr); m.addEventListener("command", command, false); return m; }, undoTab(event) { undoCloseTab(event.originalTarget.getAttribute("value")); }, undoWindow(event) { undoCloseWindow(event.originalTarget.getAttribute("value")); }, removeChilds(element) { const range = document.createRange(); range.selectNodeContents(element); range.deleteContents(); }, onClick(event) { if (event.button === 0 && event.target.id === "undo1-close-tab-button") { console.log(event.target.id) event.preventDefault(); event.stopPropagation(); undoCloseTab(); } else if (event.button == 1) { switch (event.originalTarget.localName) { case "box": // -Fx65 case "scrollbox": // Fx66- event.preventDefault(); event.stopPropagation(); undoCloseTab(); break; } } else if (event.button === 2 && event.target.id === "undo1-close-tab-button") { event.preventDefault(); event.stopPropagation(); let pos = "after_end", x, y; if ((event.target.ownerGlobal.innerWidth / 2) > event.pageX) { pos = "after_position"; x = 0; y = 0 + event.target.clientHeight; } event.target.querySelector("menupopup").openPopup(event.target, pos, x, y); } }, $C(doc, tag, attrs) { const e = tag instanceof Node ? tag : doc.createElementNS(XULNS, tag); if (attrs) { Object.entries(attrs).forEach(([key, value]) => e.setAttribute(key, value)); } return e; }, }; function run() { if (useTabbarMiddleClick) { gBrowser.tabContainer.addEventListener("click", ucjsUndoCloseTabButtonService.onClick, true); } const buttonId = "undo1-close-tab-button"; if (document.getElementById(buttonId)) { return; } try { Cu.import("resource:///modules/CustomizableUI.jsm"); CustomizableUI.createWidget({ id: buttonId, defaultArea: CustomizableUI.AREA_NAVBAR, type: "custom", onBuild: doc => { const btn = ucjsUndoCloseTabButtonService.$C(doc, "toolbarbutton", { id: buttonId, class: "toolbarbutton-1 chromeclass-toolbar-additional", type: "contextmenu", anchor: "dropmarker", label: Services.locale.appLocaleAsBCP47.includes("de") ? "Kürzlich geschlossene Tabs" : "閉じたタブ", tooltiptext: Services.locale.appLocaleAsBCP47.includes("de") ? "Kürzlich geschlossene Tabs wieder herstellen" : "閉じたタブ\n中クリックで最後に閉じたタブを復元", image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADgUlEQVR42mL8//8/AyUAIIBYYIzVq1dLC4mIrvr08ZPV379/vjEzMwOZnycmxMV04DMAIIAYQC4A4dXr1oU+fvLk/5/fv/9//fzl/9ev3/6vWLnqK0weFwYIIBZ0A79//crw5+9fhh+//jBYWlhz1dc3fgIqZeDh4WHk4uaqysnKmoysHiCAwAbceHRD6uLdQ0kGunoMv9hYGX79/sPw7cdvhn///jNYWJjzgtRw8/AwvHz5smzutlbN4yeP/k8Pqeo11bW5BxBAjCBnFPbHd7EIMJRoiZgx8nBwMvz+85fhJ9CQf3//Mzx9+pQBFM483FwMQG8xMDL/ZXj46cZ/9v/sk6ZWriwACCCwC25eviprEKbGeOP/AYavb34wsHCwMPz9AzTg9z+GP7x/Gf7++ws07B/Djz+/GZiYGBhYBdgYrx68JwXUyggQQGADePgFfjD+ZGHgF+Bl+P7yHZDPycDGws2gKW7GIMAhwnDs4XaGJ1/uMPz+8Z2BnYOZ4fOnzwwsrMxfgVr/AwQQ2ABpGYkv/GLcDELSfEDn/2HgFeZh8JdLYfjw6SODvqw5g4KiPMOsMw0MDEDbOYWABrz5zsAtI/wJpBcggJhABD+P8MefX38x/AU6k+EvIwPHHx4GNgYuhuuPLzCcuL2f4QswZozEHBjYGDmAdjIw/Pn+l0FCVOoNSC9AAIENEBEQe/Pjy0+GP8CA42LgZ/BXTWb48OUdw6m7+xmm7W5hePTqLoOLaigD+28+hnfv3jN8ePMJaIDMc5BegAACGyApLPX82+fvDB/ev2f4/eU/Ax+bEMOLd08ZpITkGbTl9IHp4jfDsev7GL59/8Lw+9dvhp/ffjPISio+BekFCCCwAQpiyrdfPn3F8OrVa4bHr+8zXHxwioGbjY+hwq+PwVkzmCHYMpFBS84A6Pp/DP/+/2P4+/Mvg5Ks+gOQXoAAggSimNqTb59+/v7x7SfL289vGRccmMDAxyrEsO3sKmCC+sKw9+xmhicf7gLxfQZ2QSaG/38YfkvyyoPCgBEggMAGfPnyhV2eV6vzxs7LWr9//Gf+yPKS6f/fl8zAhMgISkX//11h+M/I+A/ohL/f2P7/1VA2uvb161cOkAMAAogRmp1Znz17xsrCwsL07ds3lu/fvzOD2D9+/GCCpXk2Nra/XFxc/4Bif7i5uf9ISUn9Bgr/BggwAMhljD12v/akAAAAAElFTkSuQmCC", onclick: "ucjsUndoCloseTabButtonService.onClick(event);", }); const menu = ucjsUndoCloseTabButtonService.$C(doc, "menupopup", { tooltip: "bhTooltip", popupsinherittooltip: "true", oncontextmenu: "event.preventDefault();", onpopupshowing: "ucjsUndoCloseTabButtonService.prepareMenu(event);", }); btn.appendChild(menu); return btn; }, }); } catch (e) { } } if (gBrowserInit.delayedStartupFinished) { run(); } else { const OBS_TOPIC = "browser-delayed-startup-finished"; const delayedStartupFinished = (subject, topic) => { if (topic === OBS_TOPIC && subject === window) { Services.obs.removeObserver(delayedStartupFinished, topic); run(); } }; Services.obs.addObserver(delayedStartupFinished, OBS_TOPIC); } })();
Mfg.
Endor -
/*Space_and_Separator_Restorer.uc.js*/
Nur als Hinweis, davon gibt es eine neuere Version:
CustomJSforFx/space_and_separator_restorer.uc.js at master · Aris-t2/CustomJSforFxcustom scripts. Contribute to Aris-t2/CustomJSforFx development by creating an account on GitHub.github.comob da die Änderungen schon gemacht sind weiß ich jetzt aber nicht.
Mfg.
Endor -
Gern geschehen.
Mfg.
Endor -
Hallo 2002Andreas.
Stimmt genau.
Hatte Zitronellas Betrag erst nachher gesehen.
Da war mein Beitrag mit Script schon fertig.Nun hat er wenigstens eine Auswahl.
Schönes Wochenende wünsche ich Dir.
Hier viel Sonne und warm 30°+
Mfg.
Endor -
Ansonsten hier noch ein Script dazu:
Notwendige Vorarbeiten zu Verwendung von Scripten:
userChrome.js/readme.md at master · Endor8/userChrome.jsSkripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.github.comJavaScript
Alles anzeigen// save-page.uc.js (function() { if (location != 'chrome://browser/content/browser.xhtml') return; try { CustomizableUI.createWidget({ id: 'save-page-toolbar-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 props = { id: 'save-page-toolbar-button', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Seite speichern', tooltiptext: 'Seite speichern unter', style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAmxJREFUeNqUU0tIVFEY/s7jztzRGedBaVMQJAMt3LjrAVaGzmjQKmphiyAialsrA7HotW8RGO0kRsighdVEhlBWRoSLkigse0jBCDWTijpz7z3958xtGA2KDlzuz//8/u98hyUv3P+xWHJjZQ/wFMCgDxm+tdZmjMHiQH1AFCzB41IXF891439PtP9erCHIwMt6rD7jncDTfcCzLvTfnQUmMuZbZd/5DDxpN+m6TldK+PV93wfAhYAkeDYv42LhmgFeJx1cJlufkHRxvnAdfTVIpPI7HO5oBqeKgABuj71FT2YryMTww2kcTKdM1s3RaRzIpCqFrMKM/N3JpsmmAddTGU4Nv8KNFx9M7ERuqsrlydxrQDA0BC0iXX2rNrg1OgVBHSzaIWpbyL78iInT+1FyPLRtlKsIfPzVoVuQyFzNbahGjnS10BUBQcI9Mv6+YsPDzsEZ5I834sHYI5PX2b4LewbzmDy6BR4RWW0QJOiVIsDy95tbdtEUFnBJJNt2tJk8bWufjumkaoMsraBFEqAV4iHL+ApLLhrrJHKfVrDbB5ubdYyvuOSB117jsXSL+WvnyPMKeT/LCglbYOCdgytvHOgbs4nABDFe1NLVCJivUl5DklAUVAoLJY/Y5uhpljjUup4iHoYm55Cd8bBYUmZNTnr+Q6bd21N0UwwrLkOE1unYbKP3zFl8yS9g76YAIrbEsufroF6yedJ1pOx65jFpLeim9FjAuEAybCMRDSC5LoymmE3oyuQjPpigXGaatGrUa1Eke4cuqVA07dAqjuJQlKxoAqP1tNwtmkR6m2d/eXDN9MX/8SjdXwIMAOhU0E/NNxUYAAAAAElFTkSuQmCC)', oncommand: 'saveBrowser(gBrowser.selectedBrowser)' }; for (var p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); CustomizableUI.registerToolbarNode(tb); } catch(e) { }; }) ();
Mfg.
Endor -
Traurig.
R.I.P.
Mfg.
Endor -
Das klingt ja gar nicht gut.
Dann alles Gute an sie, und gute Besserung.
Dem schließe ich mich von herzen an.
Alles Gute.Mfg.
Endor -
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Mfg.
Endor -
Firefox 113.0.2 ist verfügbar.
Firefox 113.0.2, See All New Features, Updates and Fixeswww.mozilla.orgMfg.
Endor -
Externer Inhalt www.youtube.comInhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.
Mfg.
Endor -
Gern geschehen.
Mfg.
Endor -
Hallo zusammen.
Technisches Update für folgende Scripte:
AddOnLister.uc.js
DownloadsStatusModoki.uc.js
expandsidebar_fx.uc.jsScripte und CSS Code sind bereits bei Github zu finden: https://github.com/endor8/userChrome.js
Hinweis: Da ich keinen Kontakt mehr zu Mithrandir habe und er auch nicht
mehr hier aktiv ist, werden vorläufig alle aktuellen Versionen nur bei mir
hochgeladen.Diskussionen, bzw. Änderungswünsche oder Hilfe bei Problemen immer im
Diskussions-Thread schreiben: ➜ https://www.camp-firefox.de/forum/viewtopic.php?f=16&t=112673
Danke!
Mfg.
Endor
-
Prima. Danke für die Rückmeldung.
Bei Github bei mir, habe ich es nun aktualisiert.
GitHub - Endor8/userChrome.js: Skripte für die Firefox-Erweiterung userChromeJSSkripte für die Firefox-Erweiterung userChromeJS. Contribute to Endor8/userChrome.js development by creating an account on GitHub.github.comWas ardiman - Mithrandir betrifft da kein Kontakt mehr vorhanden,
kann ich es leider auch nicht aktualisieren ändern.Mfg.
Endor
Hier Deine Version mit obigen Aktualisierungen.
Teste mal:
JavaScript: AddOnLister.uc.js
Alles anzeigen/* AddonLister */ // ==UserScript== // @name AddOnLister.uc.js // @compatibility Firefox 36.*, 37.*, 60.*, 63.* 115.* // @include main // @version 1.0.20230519 // @Note Aktualisiert von milupo - camp-firefox.de // ==/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:\\Unzipped\\", //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 : 'H:\\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 geringfuegig angepasst.</p>', 'userchromejs':'<p id="fxcuclisteintro">Durch die Erweiterung userChromeJS eingebundene Skripte ergä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: Cu.import("resource://gre/modules/FileUtils.jsm").FileUtils, 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/ardiman/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,'&')); } 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();
Müsste passen.
Mfg.
Endor -
Genau so ist es ja gedacht und in der readme beschrieben.
Trotzdem danke für den Hinweis.Mfg.
Endor -
Das ist die Version von Mithrandir bei Github.
Ich habe alle Änderungen, da waren einige nicht übertragen worden,jetzt übertragen, aber den Einstellungen Teil so gelassen wie er ihn hatte.
JavaScript
Alles anzeigen// ==UserScript== // @name AddOnLister.uc.js // @compatibility Firefox 36.*, 37.*, 60.* ,63.*, 115.* // @include main // @version 1.0.20230519 // @Note Aktualisiert von milupo - camp-firefox.de // ==/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\\XXXX\\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: [], // 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 (x86)\\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ügig angepasst.</p>', 'userchromejs':'<p id="fxcuclisteintro">Durch die Erweiterung userChromeJS eingebundene Skripte ergä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,'&')); } 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();
Müsste passen.
Wie gesagt im Script müssen sämtliche individuellen Anpassungen noch gemacht werden.Mfg.
Endor -
Habe ich hier auch so gemacht.
-
Hallo milupo.
Prima. Danke für den Test im Firefox 113.
Na dann werde ich mal bei Github aktualisieren.
Mfg.
Endor