Hallo Sören Hentzschel .
Danke für den Link usw.
Muss dass hier dann auch geändert werden?
SessionStore.getClosedTabData(window);
Mfg.
Endor
Hallo Sören Hentzschel .
Danke für den Link usw.
Muss dass hier dann auch geändert werden?
SessionStore.getClosedTabData(window);
Mfg.
Endor
Hallo zusammen.
Leider geht ab Firefox 115 aktuell beta,
das Script: newTabButtonUndoTabList.uc.js
wieder nicht mehr.
// ==UserScript==
// @name newTabButtonUndoTabList.uc.js
// @description Bei Rechtsklick auf die Neuen Tab Schaltfläche, wird im Kontextmenü,
// @description der Eintrag zum Wiederherstellen des zuletzt geschlossenen Tabs angezeigt.
// @include main
// ==/UserScript==
(function () {
if (!window.gBrowser){
return;
}
gBrowser.tabContainer.addEventListener('click', function (e) {
if (e.originalTarget.id != 'tabs-newtab-button') return;
switch (e.button) {
case 1:
undoCloseTab(0);
break;
case 2:
UCT.makePopup(e);
event.preventDefault();
break;
}
}, false);
})();
var UCT = {
init: function () {
var mp = document.createXULElement("menupopup");
mp.id = "undo-close-tab-list";
mp.setAttribute("onpopupshowing", "UCT.onpopupshowing(event);");
mp.setAttribute("placespopup", true);
mp.setAttribute("tooltip", "bhTooltip");
mp.setAttribute("popupsinherittooltip", true);
document?.getElementById("mainPopupSet")?.appendChild(mp);
},
makePopup: function (e) {
if (SessionStore.getClosedTabCount(window) != 0) {
document.getElementById("undo-close-tab-list").openPopupAtScreen(e.screenX +2, e.screenY +2, false);
}
else
{
console.log("--- Es gibt keinen Tab, der wiederhergestellt werden kann ---");
}
},
onpopupshowing: function (e) {
var popup = e.target;
while (popup.hasChildNodes())
popup.removeChild(popup.firstChild);
let undoItems = SessionStore.getClosedTabData(window);
undoItems.map(function (item, id) {
var m = document.createXULElement('menuitem');
m.setAttribute('label', item.title);
m.setAttribute('image', item.image );
m.setAttribute('class', 'menuitem-iconic bookmark-item');
m.setAttribute('oncommand', 'undoCloseTab(' + id + ')');
popup.appendChild(m);
});
popup.appendChild(document.createXULElement("menuseparator"));
m = document.createXULElement("menuitem");
m.setAttribute("label", "Chronik in der Sidebar öffnen");
m.setAttribute("image", "chrome://browser/skin/history.svg");
m.setAttribute("class", "menuitem-iconic");
m.setAttribute("oncommand", "SidebarUI.toggle('viewHistorySidebar');");
popup.appendChild(m);
},
};
setTimeout(function() {
UCT.init();
},250);
Alles anzeigen
Konsole sagt:
Uncaught TypeError: SessionStore.getClosedTabCount is not a function
makePopup file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:40
<anonymous> file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:20
NewTabButtonUndoTabList.uc.js:40:26
makePopup file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:40
<anonym> file:///F:/Firefox/Beta/Profilordner/chrome/NewTabButtonUndoTabList.uc.js:20
Das wären diese Zeilen:
20:
UCT.makePopup(e);
40:
if (SessionStore.getClosedTabCount(window) != 0) {
Hat wer eine Idee wie man das wieder zum laufen brigen kann?
Vielen Dank im Voraus für eure Mühe.
Mfg.
Endor
Anzahl Scripte usw.
So sieht das bei mir aus:
Ja ja selber Schuld...
Mfg.
Endor
Hallo pirate man !
Und wie weiter oben schon steht, immer den Scriptcache löschen lassen.
Sonst siehst du natürlich keine Änderungen.
Wenn noch nicht, verwende ein SCript zum neustarten von Firefox.
Dabei wird der Scriptcache mit gelöscht.
Script:
// RestartFirefox.uc.js 2
(function() {
if (location != 'chrome://browser/content/browser.xhtml') return;
try {
CustomizableUI.createWidget({
id: 'restart-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: 'restart-button',
class: 'toolbarbutton-1 chromeclass-toolbar-additional',
removable: false,
label: 'Neustart',
tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
style: 'list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89%2BbN%2FrXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz%2FSMBAPh%2BPDwrIsAHvgABeNMLCADATZvAMByH%2Fw%2FqQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf%2BbTAICd%2BJl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA%2Fg88wAAKCRFRHgg%2FP9eM4Ors7ONo62Dl8t6r8G%2FyJiYuP%2B5c%2BrcEAAAOF0ftH%2BLC%2BzGoA7BoBt%2FqIl7gRoXgugdfeLZrIPQLUAoOnaV%2FNw%2BH48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl%2FAV%2F1s%2BX48%2FPf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H%2FLcL%2F%2Fwd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s%2BwM%2B3zUAsGo%2BAXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93%2F%2B8%2F%2FUegJQCAZkmScQAAXkQkLlTKsz%2FHCAAARKCBKrBBG%2FTBGCzABhzBBdzBC%2FxgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD%2FphCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8%2BQ8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8%2BxdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR%2BcQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI%2BksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG%2BQh8lsKnWJAcaT4U%2BIoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr%2Bh0uhHdlR5Ol9BX0svpR%2BiX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK%2BYTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI%2BpXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q%2FpH5Z%2FYkGWcNMw09DpFGgsV%2FjvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY%2FR27iz2qqaE5QzNKM1ezUvOUZj8H45hx%2BJx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4%2FOBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up%2B6Ynr5egJ5Mb6feeb3n%2Bhx9L%2F1U%2FW36p%2FVHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm%2Beb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw%2B6TvZN9un2N%2FT0HDYfZDqsdWh1%2Bc7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc%2BLpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26%2FuNu5p7ofcn8w0nymeWTNz0MPIQ%2BBR5dE%2FC5%2BVMGvfrH5PQ0%2BBZ7XnIy9jL5FXrdewt6V3qvdh7xc%2B9j5yn%2BM%2B4zw33jLeWV%2FMN8C3yLfLT8Nvnl%2BF30N%2FI%2F9k%2F3r%2F0QCngCUBZwOJgUGBWwL7%2BHp8Ib%2BOPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo%2Bqi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt%2F87fOH4p3iC%2BN7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi%2FRNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z%2Bpn5mZ2y6xlhbL%2BxW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a%2FzYnKOZarnivN7cyzytuQN5zvn%2F%2FtEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1%2B1dT1gvWd%2B1YfqGnRs%2BFYmKrhTbF5cVf9go3HjlG4dvyr%2BZ3JS0qavEuWTPZtJm6ebeLZ5bDpaql%2BaXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO%2FPLi8ZafJzs07P1SkVPRU%2BlQ27tLdtWHX%2BG7R7ht7vPY07NXbW7z3%2FT7JvttVAVVN1WbVZftJ%2B7P3P66Jqun4lvttXa1ObXHtxwPSA%2F0HIw6217nU1R3SPVRSj9Yr60cOxx%2B%2B%2Fp3vdy0NNg1VjZzG4iNwRHnk6fcJ3%2FceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w%2B0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb%2B%2B6EHTh0kX%2Fi%2Bc7vDvOXPK4dPKy2%2BUTV7hXmq86X23qdOo8%2FpPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb%2F1tWeOT3dvfN6b%2FfF9%2FXfFt1%2Bcif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v%2B3Njv3H9qwHeg89HcR%2FcGhYPP%2FpH1jw9DBY%2BZj8uGDYbrnjg%2BOTniP3L96fynQ89kzyaeF%2F6i%2FsuuFxYvfvjV69fO0ZjRoZfyl5O%2FbXyl%2FerA6xmv28bCxh6%2ByXgzMV70VvvtwXfcdx3vo98PT%2BR8IH8o%2F2j5sfVT0Kf7kxmTk%2F8EA5jz%2FGMzLdsAAAAEZ0FNQQAAsY58%2B1GTAAAAIGNIUk0AAHolAACAgwAA%2Bf8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAN8SURBVHjaVJFNTBxlAIafb2Z29gd2l4VdYCkokAUt1AJplQRTrVqjUWMPPWHSCzb21IOn9qIHY2xMahoTTb00NmkUm5qAjdpUI61VaCxCpCVYixt%2ByvKzCwu7LDs7zMw3HmhM%2Bt6fJ0%2FyCp69wiOzZBCPcqSmIXg0HPHuC4R8nkLWyOXyYiIzfuVHzMIA%2BZsLtH18EApntUdhpzUSD5577nDLi%2FGWKjx%2BHVfR8HpFwNwsxTMzza%2BOXJ1%2B58Ev2sVEV%2ByEawXqxf8FllNWEQ9ePXzsqQOecIDU8jampSAVD76Al2BIIx4Dv2Nz7%2FYq%2B5%2BP8sNXE6WdAhdQlOM9rzUdaGiN8M9UjnKvQjzuA0UjV3AxDIcHywqRoEbXoVrKgyBtKXYEUvprmiN9oaoyvr9wl62NHJbtJeDzOo17YmprVzWOppLO2RRNwf1FSOzSUAXsCIR4QdP13UPfjhUde2mjuBXUjcXNEabOnJmq7Y4Nd7z1fu%2BJ%2FR2Jpgrm0jauAI8GlnSlBi4I0bO6sLBWHc9esxRdmjOZf5n%2B5CLWzCzOvsbKupBZ1xgmElUoC%2BgoKtRGQfNomoaND8P8XS%2Bby1olO7O6GHTl1DejGDOrNB%2BvpO7I%2Ba31%2FDP9Z28YUmqoqhCKcG2EYD6ZMUTojZ8WHmsqD%2BI6wnWFajugCkuuZaV%2FZS47wp99R7E3LbxPV6rtr7dV1pmyuBWs3hr7dZ380LC2tzseffvUHm86C1JC2A%2FrGcn509cn%2BPvTk9ibc1R06qL91Ms1CadF000ll9rVS2VykLzVr0lHOgtpuJ9yUFyXxqhKZjbH2nJRI9IZwyw2kXjvXV%2FIOWgaBcc2a%2BtjdVXR1J3iBDx8QUpQUJAuJJclseogxz441H5vrPO72cm0VSyVPJq27ZaHm8ST3Y0M9d9Kkr19A1A1x4VIObTGBfNrsJ5XmE9b6KqgvrOGhr1Vns2sgeNIkXiigvHf1liZuHWZYjINSEXRVLewZjN6bYmYbvN4rcDvVzFKLnOpErMLBpvbklClznyyyPDA6DjTX3wJWICr%2Bnb3ffjXSGpl5Nxnn88uh2ORUCBaHfVQU%2BsjVuGhKqJT5lFYShr8fGH4j42bH53EnJ4EtgEEPQOTzHx9mqXLl9AT9TS82RvreOmVcMTXVh4JhIr5kp3LFu6u3Lk%2ByMylQazU3ENYAvw3AFUTimFqj5i7AAAAAElFTkSuQmCC)',
onclick: 'if (event.button == 0) { \
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
}; \
if (event.button == 1 || event.button == 2) { \
Services.appinfo.invalidateCachesOnRestart(); \
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
};'
};
for (var p in props)
toolbaritem.setAttribute(p, props[p]);
return toolbaritem;
}
});
CustomizableUI.registerToolbarNode(tb);
} catch(e) { };
var menuitem = document.createXULElement('menuitem');
var props = {
id: 'restartfirefox-fileMenu2',
label: 'Neustart',
tooltiptext: 'Neustart (mit Rechts- und Mittelklick wird userChrome.js-Cache geleert)',
onclick: 'if (event.button == 0) { \
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
}; \
if (event.button == 1 || event.button == 2) { \
Services.appinfo.invalidateCachesOnRestart(); \
Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit); \
};'
};
for (var p in props)
menuitem.setAttribute(p, props[p]);
document.getElementById('menu_FilePopup').insertBefore(menuitem, document.getElementById('menu_FileQuitItem'));
var menuitem = document.createXULElement('toolbarbutton');
menuitem.id = 'uc_menu_Restart_H';
menuitem.classList.add('subviewbutton', 'subviewbutton-iconic');
menuitem.setAttribute('label' , 'Neustart');
menuitem.setAttribute('tooltiptext' , 'Neustart');
menuitem.style.listStyleImage= 'url(\'data:image/svg+xml;charset=utf-8,<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><path fill="context-fill" fill-opacity="context-fill-opacity" d="M15,1a1,1,0,0,0-1,1V4.418A6.995,6.995,0,1,0,8,15a6.954,6.954,0,0,0,4.95-2.05,1,1,0,0,0-1.414-1.414A5.019,5.019,0,1,1,12.549,6H10a1,1,0,0,0,0,2h5a1,1,0,0,0,1-1V2A1,1,0,0,0,15,1Z"/></svg>\')';
menuitem.setAttribute('oncommand' , "Services.appinfo.invalidateCachesOnRestart() || Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit);");
var refItem = document.getElementById('appMenu-viewCache').content.getElementById('appMenu-quit-button2');
refItem.parentNode.insertBefore(menuitem, refItem);
})();
Alles anzeigen
FuchsFan.
Schließe mich den Worten von BrokenHeart voll und ganz an.
Klasse Arbeit!!!
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:
// ==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);
}
})();
Alles anzeigen
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?
// ==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);
}
})();
Alles anzeigen
Mfg.
Endor
/*Space_and_Separator_Restorer.uc.js*/
Nur als Hinweis, davon gibt es eine neuere Version:
ob 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:
// 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) { };
}) ();
Alles anzeigen
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
Mfg.
Endor
Firefox 113.0.2 ist verfügbar.
Mfg.
Endor
Mfg.
Endor
Gern geschehen.
Mfg.
Endor
Hallo zusammen.
Technisches Update für folgende Scripte:
AddOnLister.uc.js
DownloadsStatusModoki.uc.js
expandsidebar_fx.uc.js
Scripte 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.
Was 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:
/* 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();
Alles anzeigen
Müsste passen.
Mfg.
Endor