Hier wird beschrieben, was du dazu brauchst:
Manchmal frage ich mich, warum Leute Artikel nicht bis zum Ende lesen. Heute frage ich mich das über mich selbst. Da steht es am Ende. 🙄
So, Button weg, User zufrieden! Dankeschön euch!
Hier wird beschrieben, was du dazu brauchst:
Manchmal frage ich mich, warum Leute Artikel nicht bis zum Ende lesen. Heute frage ich mich das über mich selbst. Da steht es am Ende. 🙄
So, Button weg, User zufrieden! Dankeschön euch!
Es sieht so aus, als ob die Elemente unter #shadow-root liegen, sprich, CSS-Anweisungen müssen in die userChromeShadow.css und nicht in die userChrome.css.
Wenn ich das Skript zum Laden der userChromeShadow.css doch mal brauche, wie muss dieses Skript aussehen? Der verlinkte Code von aborix ist nur ein Schnipsel.
Ich lade die CSS-Dateien mit dem userCSSLoader. Mit der Datei, in die ich den Code eingefügt hatte, funktioniert etwas nicht. In einer neuen Datei klappt's. Vielen Dank!
Es sieht so aus, als ob die Elemente unter #shadow-root liegen, sprich, CSS-Anweisungen müssen in die userChromeShadow.css und nicht in die userChrome.css.
Weil im angepinnten Beitrag von BrokenHeart steht:
Die neue Methode um 'css'-Regeln anzuwenden, wird nur für Regeln benötigt, die einen ::part() Selektor beinhalten.
dachte ich, das gilt hier nicht. Ist diese Einschränkung überholt?
Klappe mal bitte den genauen Bereich im Inspektor weiter auf - also unter moz-button... Vielleicht sehe ich dann eine Möglichkeit..
Es geht um den hier:
Ich finde es sieht so aus, als ob er gleich runterfällt, der Arme. 😢
Aktuell ist Firefox 135. Wenn du jetzt für v134 anpackst, kannst du für v135 wieder alles neu denken.
Ich habe mich vertippt, ich habe Fx 135 und deswegen alle Skripte aktualisiert.
Verschiebbar konnte ich es mit einigen Versuchen machen, aber der Text wurde dann nicht mehr angezeigt
Hallo,
kann mir jemand dabei helfen, dieses clickbare Panel verschiebbar zu machen? Bisher wird es über die ID eines benachbarten Elements positioniert. Ich würde es gern wie einen Button verschiebbar machen. Geht das?
// ==UserScript==
// @name VersionInAddonBar.uc.js
// @description Versionsnummer in der Addon-Bar anzeigen
// @include main
// @charset UTF-8
// @note Basiert auf dem Script MemoryMonitorMod.uc.js und der Erweiterung "Version in Statusbar"
// @note Bit-Version aus https://www.camp-firefox.de/forum/thema/135247-anwendungsname-und-version-in-der-men%C3%BCleiste/
// @note In Zeilen 17 u. 18 die Toolbar und die Position (hinter welchem Element) auf der Toolbar anpassen.
// @note Ein Klick auf den Button öffnet das Fenster "Über Firefox".
// ==/UserScript==
setTimeout(function() {
var ucjsVN = {
init : function () {
let profile = Cc["@mozilla.org/toolkit/profile-service;1"].getService(Ci.nsIToolkitProfileService).currentProfile.name;
var Toolbar = 'addonbar';
var Position = 'customizableui-special-separator177';
// var Position = 'formhistory_yahoo_com-browser-action';
// var Position = 'textarea-cache-lite_wildsky_cc-browser-action';
var info = Components.classes['@mozilla.org/xre/app-info;1'].getService(Components.interfaces.nsIXULAppInfo);
var bit = (Services.appinfo.is64Bit ? 64 : 32);
var versionPanel = document.createXULElement('toolbaritem');
versionPanel.id = 'VersionDisplay';
versionPanel.setAttribute('tooltiptext', 'Versions-Nummer. Klick öffnet "Über ' + info.vendor + ' ' + info.name + '"');
versionPanel.addEventListener('click', function () {
openAboutDialog();
});
versionPanel.style.paddingTop = '4px';
var label = document.createXULElement('label');
label.setAttribute('value', "v" + info.version + " (" + bit + "bit)" + " [" + profile + "]");
versionPanel.appendChild(label);
document.getElementById(Toolbar).insertBefore(versionPanel, document.getElementById(Position).nextSibling);
},
}
ucjsVN.init();
}, 3000);
Alles anzeigen
Ich kann die verschiedenen Bedürfnisse verstehen. Wenn es in dem von 2002Andreasgenannten Thema Beschwerden gab und in diesem hier nicht, wäre ich dankbar, die beiden Themen entsprechend unterschiedlich zu behandeln. Da wir auf das Github von Endor angewiesen sind, bitte ich, auch seine Meinung zu berücksichtigen.
Danke euch beiden für die hilfreiche Arbeit. 💛
Nur mal so als Hinweis.
Bitte für Fragen bei Problemen mit Skripten etc., einen eigenen neuen Thread erstellen, und nicht alles in diesem Sammelthread posten, danke.
Es wurden seit Jahren in diesem Thema Skript-Probleme vor allem mit den Skripten ursprünglich aus Ardimans, jetzt aus Endors Github diskutiert. Ich gebe zu, dass mein letzter Beitrag hier zu einem Skript von Aris war, aber das Problem betraf alle Skripte für zusätzliche Addon-Leisten. Es stimmt, man kann das in einzelnen Themen behandeln. Da ich nicht laufend hier im Forum unterwegs bin, war es für mich hilfreich, dass ich immer wusste, wo ich nach Lösungen für nicht mehr funktionierende Skripte suchen konnte. Und vor allem, ich hatte dieses Thema abonniert, so konnte ich die Benachrichtigungsmails überfliegen und sehen, ob ein Update zu neuen Problemen geführt hat. Wenn das jeweils in neuen Themen behandelt wird, bekomme ich diese E-Mails nicht mehr. Ich fände das schade und für mich deutlich aufwändiger. Ich hoffe, dafür gibt es noch einen einfachen Weg.
Wofür ist dann in Zukunft dieses Thema gedacht?
Das ist ja genial, dass du die chrome://browser/content/browser-menubar.js direkt einliest. Ich hatte sie bisher in ein Skript kopiert und hätte das bei Änderungen im Zusammenhang mit Updates immer händisch ändern müssen. Dankeschön!
Mit dieser abgespeckten Version kann ich das Skript für das ursprüngliche App-Menu-Skript verwenden, das ich ja auch mit einem weiteren Skript u.a. um die Menüeinträge erweitert habe.
Ich verstehe zwar nur den oberen Teil, aber es funktioniert! 👍
(function () {
setTimeout(async function () {
// bind event
let source = await readSource('chrome://browser/content/browser-menubar.js');
source = source.replace("main-menubar", "AMpopup").replace({ once: true }, '')
eval(source);
async function readSource (url) {
return new Promise(resolve => {
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onload = function () {
resolve(xhr.responseText);
};
xhr.send();
});
}
}, 300);
})();
Alles anzeigen
Danke für eure Bemühungen. Wenn ihr mein oben verlinktes Github-Issue bei Aris anschaut und die folgenden Beiträge auf meinen zitierten Beitrag zu dem Problem hier in diesem Forum, wird klar, das im Fx 134 aus der Download-Button Funktion der Event-Handler entfernt wurde (oder so ähnlich, sorry für den Kauderwelsch eines Nur-Bastlers). Der soll durch den Zusatzcode ersetzt werden. Für Nutzer, die einen anderen Skript-Loader benutzen, scheint das zu funktionieren (siehe nochmal das Github-Issue, hier aber nicht.
Mit Fx 133.0 funktioniert der Downloads-Button in der Addon-Bar von aris nicht mehr, das Popup-Fenster wird nicht angezeigt. In der normalen Leiste des Fx und im Überhangmenü funktioniert es. Kann das jemand bestätigen?
JavaScript: addonbar.us.js Alles anzeigen// Add-on Bar script for Firefox 126+ by Aris // // no 'close' button // 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS // no 'Add-on Bar' entry in toolbar context menu // // option: smaller buttons / reduced toolbar button height // // flexible spaces on add-on bar behave like on old Firefox versions // [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts) var appversion = parseInt(Services.appinfo.version); var compact_buttons = false; // reduced toolbar height and smaller buttons var AddAddonbar = { init: function() { if (location != 'chrome://browser/content/browser.xhtml') return; /* blank tab workaround */ try { if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank'); } catch(e) {} try { Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true); } catch(e) {} var addonbar_label = 'Add-on Bar'; var compact_buttons_code = ''; if(compact_buttons) compact_buttons_code = ` #addonbar toolbarbutton .toolbarbutton-icon { padding: 0 !important; width: 16px !important; height: 16px !important; } #addonbar .toolbarbutton-badge-stack { padding: 0 !important; margin: 0 !important; width: 16px !important; min-width: 16px !important; height: 16px !important; min-height: 16px !important; } #addonbar toolbarbutton .toolbarbutton-badge { margin-top: 0px !important; font-size: 5pt !important; min-width: unset !important; min-height: unset !important; margin-inline-start: 0px !important; margin-inline-end: 0px !important; } #addonbar .toolbaritem-combined-buttons { margin-inline: 0px !important; } #addonbar toolbarbutton { padding: 0 !important; } `; // style sheet Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet( Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(` #addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring], #addonbar toolbarspring { -moz-box-flex: 1 !important; min-width: unset !important; width: unset !important; max-width: unset !important; } #main-window[customizing] #addonbar { outline: 1px dashed !important; outline-offset: -2px !important; } #addonbar { border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important; background-color: var(--toolbar-bgcolor); background-image: var(--toolbar-bgimage); -moz-window-dragging: no-drag !important; } :root[lwtheme] #addonbar { background: var(--lwt-accent-color) !important; } :root[lwtheme][lwtheme-image='true'] #addonbar { background: var(--lwt-header-image) !important; background-position: 0vw 50vh !important; } /* autohide add-on bar in fullscreen mode */ /*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar { visibility: visible !important; display: block !important; min-height: 1px !important; height: 1px !important; max-height: 1px !important; } #main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover { min-height: 24px !important; height: 24px !important; max-height: 24px !important; }*/ #unified-extensions-button[hidden]{ visibility: visible !important; display: flex !important; } `+compact_buttons_code+` `), null, null), Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET ); // toolbar try { if(document.getElementById('addonbar') == null) { var tb_addonbar = document.createXULElement('toolbar'); tb_addonbar.setAttribute('id','addonbar'); tb_addonbar.setAttribute('collapsed', 'false'); tb_addonbar.setAttribute('toolbarname', addonbar_label); tb_addonbar.setAttribute('defaultset','spring,spring'); tb_addonbar.setAttribute('customizable','true'); tb_addonbar.setAttribute('mode','icons'); tb_addonbar.setAttribute('iconsize','small'); tb_addonbar.setAttribute('context','toolbar-context-menu'); tb_addonbar.setAttribute('lockiconsize','true'); tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target'); document.getElementById('browser').parentNode.appendChild(tb_addonbar); CustomizableUI.registerArea('addonbar', {legacy: true}); setTimeout(function(){ CustomizableUI.registerArea('addonbar', {legacy: true}); },2000); CustomizableUI.registerToolbarNode(tb_addonbar); // 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar var key = document.createXULElement('key'); key.id = 'key_toggleAddonBar'; key.setAttribute('key', '/'); key.setAttribute('modifiers', 'accel'); key.setAttribute('oncommand',` var newAddonBar = document.getElementById('addonbar'); setToolbarVisibility(newAddonBar, newAddonBar.collapsed); Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed); `); document.getElementById('mainKeyset').appendChild(key); try { setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled')); } catch(e) {} } } catch(e) {} } } /* initialization delay workaround */ document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false); /* Use the below code instead of the one above this line, if issues occur */ /* setTimeout(function(){ AddAddonbar.init(); },2000); */
Das Problem besteht weiter, obwohl es gerade ein Update für das Skript gab.
Meine Meldung auf Github ist verwaist. Dort gibt es Lösungsvorschläge, die aber wohl nur mit einem anderen Skriptloader funktionieren. Weiß jemand eine Lösung mit "unserem" Skriptloader, also dem in Endors Github?
Alles anzeigen ZitatLinks aus der Adressleiste: ab Fx 60: about:config - browser.urlbar.openintab auf true setzen
Links aus der Suchzeile: about:config - browser.search.openintab auf true setzen
Links aus den Lesezeichen: about:config - browser.tabs.loadBookmarksInTabs auf true setzen
Links zu anderen Seiten: Erweiterung Open Link with New Tab https://addons.mozilla.org/de/firefox/add…k-with-new-tab/
Links im Vordergrund öffnen: about:config browser.tabs.loadBookmarksInBackground auf false setzen
Aus meinem Notizen kopiert. Ob alle Werte noch so stimmen, weis ich nicht. Aber ein Versuch kann nicht schaden.
Genau so steht's in meiner user.js und funktioniert.
Kann das jemand bestätigen?
Ist hier auch so.
Klick auf den Button, und es passiert nichts.
Dankeschön! Ich habe das bei Aris gemeldet.
Mit Fx 133.0 funktioniert der Downloads-Button in der Addon-Bar von aris nicht mehr, das Popup-Fenster wird nicht angezeigt. In der normalen Leiste des Fx und im Überhangmenü funktioniert es. Kann das jemand bestätigen?
// Add-on Bar script for Firefox 126+ by Aris
//
// no 'close' button
// 'toggle' toolbar with 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS
// no 'Add-on Bar' entry in toolbar context menu
//
// option: smaller buttons / reduced toolbar button height
//
// flexible spaces on add-on bar behave like on old Firefox versions
// [!] Fix for WebExtensions with own windows by 黒仪大螃蟹 (for 1-N scripts)
var appversion = parseInt(Services.appinfo.version);
var compact_buttons = false; // reduced toolbar height and smaller buttons
var AddAddonbar = {
init: function() {
if (location != 'chrome://browser/content/browser.xhtml')
return;
/* blank tab workaround */
try {
if(gBrowser.selectedBrowser.getAttribute('blank')) gBrowser.selectedBrowser.removeAttribute('blank');
} catch(e) {}
try {
Services.prefs.getDefaultBranch('browser.addonbar.').setBoolPref('enabled',true);
} catch(e) {}
var addonbar_label = 'Add-on Bar';
var compact_buttons_code = '';
if(compact_buttons)
compact_buttons_code = `
#addonbar toolbarbutton .toolbarbutton-icon {
padding: 0 !important;
width: 16px !important;
height: 16px !important;
}
#addonbar .toolbarbutton-badge-stack {
padding: 0 !important;
margin: 0 !important;
width: 16px !important;
min-width: 16px !important;
height: 16px !important;
min-height: 16px !important;
}
#addonbar toolbarbutton .toolbarbutton-badge {
margin-top: 0px !important;
font-size: 5pt !important;
min-width: unset !important;
min-height: unset !important;
margin-inline-start: 0px !important;
margin-inline-end: 0px !important;
}
#addonbar .toolbaritem-combined-buttons {
margin-inline: 0px !important;
}
#addonbar toolbarbutton {
padding: 0 !important;
}
`;
// style sheet
Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).loadAndRegisterSheet(
Services.io.newURI('data:text/css;charset=utf-8,' + encodeURIComponent(`
#addonbar toolbarpaletteitem[place=toolbar][id^=wrapper-customizableui-special-spring],
#addonbar toolbarspring {
-moz-box-flex: 1 !important;
min-width: unset !important;
width: unset !important;
max-width: unset !important;
}
#main-window[customizing] #addonbar {
outline: 1px dashed !important;
outline-offset: -2px !important;
}
#addonbar {
border-top: 1px solid var(--sidebar-border-color,rgba(0,0,0,0.1)) !important;
background-color: var(--toolbar-bgcolor);
background-image: var(--toolbar-bgimage);
-moz-window-dragging: no-drag !important;
}
:root[lwtheme] #addonbar {
background: var(--lwt-accent-color) !important;
}
:root[lwtheme][lwtheme-image='true'] #addonbar {
background: var(--lwt-header-image) !important;
background-position: 0vw 50vh !important;
}
/* autohide add-on bar in fullscreen mode */
/*#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar {
visibility: visible !important;
display: block !important;
min-height: 1px !important;
height: 1px !important;
max-height: 1px !important;
}
#main-window[sizemode='fullscreen']:not([inDOMFullscreen='true']) #addonbar:hover {
min-height: 24px !important;
height: 24px !important;
max-height: 24px !important;
}*/
#unified-extensions-button[hidden]{
visibility: visible !important;
display: flex !important;
}
`+compact_buttons_code+`
`), null, null),
Components.classes['@mozilla.org/content/style-sheet-service;1'].getService(Components.interfaces.nsIStyleSheetService).AGENT_SHEET
);
// toolbar
try {
if(document.getElementById('addonbar') == null) {
var tb_addonbar = document.createXULElement('toolbar');
tb_addonbar.setAttribute('id','addonbar');
tb_addonbar.setAttribute('collapsed', 'false');
tb_addonbar.setAttribute('toolbarname', addonbar_label);
tb_addonbar.setAttribute('defaultset','spring,spring');
tb_addonbar.setAttribute('customizable','true');
tb_addonbar.setAttribute('mode','icons');
tb_addonbar.setAttribute('iconsize','small');
tb_addonbar.setAttribute('context','toolbar-context-menu');
tb_addonbar.setAttribute('lockiconsize','true');
tb_addonbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target');
document.getElementById('browser').parentNode.appendChild(tb_addonbar);
CustomizableUI.registerArea('addonbar', {legacy: true});
setTimeout(function(){
CustomizableUI.registerArea('addonbar', {legacy: true});
},2000);
CustomizableUI.registerToolbarNode(tb_addonbar);
// 'Ctr + /' on Windows/Linux or 'Cmd + /' on macOS to toggle add-on bar
var key = document.createXULElement('key');
key.id = 'key_toggleAddonBar';
key.setAttribute('key', '/');
key.setAttribute('modifiers', 'accel');
key.setAttribute('oncommand',`
var newAddonBar = document.getElementById('addonbar');
setToolbarVisibility(newAddonBar, newAddonBar.collapsed);
Services.prefs.getBranch('browser.addonbar.').setBoolPref('enabled',!newAddonBar.collapsed);
`);
document.getElementById('mainKeyset').appendChild(key);
try {
setToolbarVisibility(document.getElementById('addonbar'), Services.prefs.getBranch('browser.addonbar.').getBoolPref('enabled'));
} catch(e) {}
}
} catch(e) {}
}
}
/* initialization delay workaround */
document.addEventListener('DOMContentLoaded', AddAddonbar.init(), false);
/* Use the below code instead of the one above this line, if issues occur */
/*
setTimeout(function(){
AddAddonbar.init();
},2000);
*/
Alles anzeigen
bis auf Cookies nichts bewirkt, und dafür habe ich schon was anderes.
OT: Was nutzt du?
diese Erweiterung steinalt ist weil re-signed, da wurde in den letzten 5 Jahren nichts dran verändert.
Ich nutze das hier, ist "erst" 4 Jahre alt.
Wärst Du so lieb und würdest noch einmal testen?
Hast du es selber getestet? Jetzt wird im Hilfemenü alles drei mal geöffnet.
Du hast jetzt wohl eine Kombination aus den zwei Versionen des AppMenu_edit gemacht, damit die beiden Menüs vollständig sind. Damit werden die Menüs aus Skripten nicht automatisch mit verschoben. Das Menü von extra-config-menu ist ganz verschwunden. Die Firefox-Menüs werden jetzt nicht kopiert, sondern verschoben. Bis auf die Menüs aus Skripten ist die Menüleiste leer und die Alt-Taste zum anzeigen der Menüleiste funktioniert nicht mehr.
Mir ist das zu umständlich. In meiner Version funktioniert alles, was ich brauche. Wenn Jizz (wer ist das?) bereit ist, die Fehler zu überarbeiten, bin ich gern bereit, nochmal zu testen. Für uns "Bastler" scheint mir das zu kompliziert.
Meine Version sieht so aus, davon gibt es aber noch andere Versionen in diesem Forum. Bei Endor wird es sicher auch eine Version geben.
// ==UserScript==
// @name extras_config_menu.uc.js
// @compatibility Firefox ab 92
// @include main
// @version........1.0.20180914 Aktualisierung von aborix für Firefox 62+
// @version 1.0.20190504 überarbeitet von bege
// ==/UserScript==
var uProfMenu = {
// Beginn der Konfiguration -----------------
// In der folgenden Zeile den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
TextOpenExe: 'C:\\Program Files\\Notepad++\\notepad++.exe',
// Falls gewuenscht, in der Zeile nach den Beispielen einen Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
// vFileManager: 'E:\\Total Commander\\Totalcmd.exe',
// vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe'
vFileManager: 'C:\\Program Files\\FreeCommander XE\\FreeCommander.exe',
// Falls die JavaScript-Scripte nicht im chrome-Verzeichnis, sondern einem Unterverzeichnis sind,
// in der folgenden Zeile das Unterverzeichnis eintragen, sonst '':
jsSubfolder: 'JS',
// Im Folgenden bei "warmenuto" 'menu' eintragen, damit es in der Menueleiste erscheint, sonst die id des gewuenschten
// Elements *nach* dem der Button erscheinen soll (z.B. 'urlbar', 'searchbar', 'undoclosetab-button','abp-toolbarbutton')
// Bitte nicht so etwas wie die Menue- oder Navigationsleiste (sondern einen Menuepunkt oder einen Button mit id auf diesen Leisten) eintragen:
warpmenuto: 'menu',
// Für die Einstellung 'menu' wird hier der Ort festgelegt, wo das Menü angezeigt werden soll.
// (0: in der Menueleiste, 1: im Extras-Menue)
menuLocation: 0,
// Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen)
sortScripts: 0, // 1 zum Erzwingen der Sortierung
// Einbindung GM-Skripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]):
gmOrdner: 0,
// Einbindung CSS-Ordner (0: nein, 1: ja, Chrome-Unterordner, 2: ja, anderer Pfad):
cssOrdner: 0,
// Wenn cssOrdner = 1 oder 2, hier entweder Chrome-Unterordner (z.B. 'CSS') oder andere vollständige Pfade (z.B. 'C:\\Dropbox\\Chrome\\Thunderbird\\CSS-Ordner\\css-dateien') entragen, sonst '':
cssLocation1: 'CSS',
cssLocation2: '',
cssLocation3: '',
//Anzeigenamen für die CSS-Ordner
cssLocation1Name: 'CSS-Ordner',
cssLocation2Name: 'CSS-Ordner2',
cssLocation3Name: 'CSS-Ordner3',
// In einer der folgenden Zeilen gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen.
// - Zum Ausblenden: abouts: [],
// - Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein:
// abouts: ['0','about:config','about:about','about:cache','about:certificate','about:checkerboard','about:crashes','about:debugging','about:devtools','about:memory','about:networking','about:performance','about:policies','about:profiles','about:serviceworkers','about:support','about:telemetry','about:url-classifier','about:webrtc'],
// abouts: ['about:config','about:about','about:cache','about:certificate','about:checkerboard','about:crashes','about:debugging','about:devtools','about:memory','about:networking','about:performance','about:policies','about:profiles','about:serviceworkers','about:support','about:telemetry','about:url-classifier','about:webrtc'],
abouts: [],
// Einbindung config-Dateien wie user.js etc. (0: nein, 1: ja)
configFiles: 0,
// Die Firefox-Ordner anzeigen (0: nein, 1: ja):
firefoxOrdner: 0,
// Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
showNormalPrefs: 0,
// Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
enableScriptsToClip: 3,
// Den Eintrag "Neustart" anzeigen (0: nein, 1: ja):
enableRestart: 0,
// Ende der Konfiguration -------------------
init: function() {
if (this.warpmenuto.toLowerCase() == 'menu') {
// aufgrund des gewaehlten warpmenuto als Menue anlegen
if (this.menuLocation) {
var zielmenu = document.getElementById('appMenu-toolsView');
} else {
var zielmenu = document.getElementById('main-menubar');
}
if (zielmenu==null) {
userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
"geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
"von 'zielmenu' kontrollieren.");
return;
}
var menu = zielmenu.appendChild(this.createME("menu","Config-Menü",0,0,"ExtraConfigMenu"));
menu.setAttribute("class","menu-iconic");
menu.setAttribute("ondblclick","openTrustedLinkIn('about:config', 'tab');");
menu.setAttribute("tooltiptext","Doppelklick öffnet about:config");
} else {
// als Button nach dem per warpmenuto gewaehlten Element anlegen (s. Kommentar ueber warpmenuto im Konfigurationsabschnitt)
var zielmenu = document.getElementById(this.warpmenuto);
if (zielmenu==null) {
userChrome.log("extras_config_menu.uc.js findet Zielpunkt '"+this.warpmenuto+"' nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
"geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
"von 'warpmenuto' kontrollieren.");
return;
}
var menu = zielmenu.parentNode.insertBefore(document.createXULElement('toolbarbutton'), zielmenu.nextSibling);
menu.setAttribute("id", "ExtraConfigMenu-button");
menu.setAttribute("class", "toolbarbutton-1");
menu.setAttribute("type", "menu");
menu.setAttribute("tooltiptext", "Extra Config Menü\nMittelklick \öffnet about:config");
menu.setAttribute("onclick", "if (event.button === 1 && !this.open) {openTrustedLinkIn('about:config','tab')};");
}
//ab hier ist alles gleich, egal ob Button oder Menue
var css = " \
/* #ExtraConfigMenu, */ #ExtraConfigMenu-button { \
background: 12px no-repeat url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=) \
} \
// #ExtraConfigMenu .menubar-text { \
// margin-inline-start: 34px !important;\
// }\
#ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
display: none !important; \
}";
var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
sss.loadAndRegisterSheet(uri,sss.AGENT_SHEET);
menu.setAttribute("onpopupshowing","uProfMenu.getScripts(0)");
var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup"));
// Anlegen von Untermenues fuer die userChromeJS-Skripte (befuellt werden sie spaeter)
var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-ucjs"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucjs-items"));
// var submenu=menupopup.appendChild(this.createME("menu","uc.xul",0,0,"submenu-ucxul"));
// var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucxul-items"));
menupopup.appendChild(this.createME("menuitem","us.js-Datei erstellen","uProfMenu.createJSfile()","uProfMenu_createJSfile",0));
if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
// Ende Anlegen von Untermenues fuer die userChromeJS-Skripte
if (this.configFiles) menupopup.appendChild(document.createXULElement('menuseparator'));
// Einbindung von Konfigdateien
if (this.configFiles) {
menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(3,'userChrome.js');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(3,'userChrome.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(3,'userContent.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","prefs.js","uProfMenu.edit(1,'prefs.js');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","user.js","uProfMenu.edit(1,'user.js');","uProfMenu_edit"),0);
};
// Ende Einbindung von Konfigdateien
if (this.gmOrdner || this.cssOrdner) menupopup.appendChild(document.createXULElement('menuseparator'));
// Einbindung von Ordnern
switch (this.gmOrdner) {
case 1:
menupopup.appendChild(this.createME("menuitem","GM-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0);
break;
case 2:
menupopup.appendChild(this.createME("menuitem","USL-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
break;
case 3:
menupopup.appendChild(this.createME("menuitem","Scriptish-Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0);
break;
}
if (this.cssOrdner) {
if (this.cssOrdner == 1) {
menupopup.appendChild(this.createME("menuitem",this.cssLocation1Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation1);","uProfMenu_folder"),0);
if (this.cssLocation2.length>0) {
menupopup.appendChild(this.createME("menuitem",this.cssLocation2Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation2);","uProfMenu_folder"),0);
};
if (this.cssLocation3.length>0) {
menupopup.appendChild(this.createME("menuitem",this.cssLocation3Name,"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+uProfMenu.cssLocation2);","uProfMenu_folder"),0);
};
} else {menupopup.appendChild(this.createME("menuitem",this.cssLocation1Name,"uProfMenu.dirOpen(uProfMenu.cssLocation1);","uProfMenu_folder"),0);
if (this.cssLocation2.length>0) {
menupopup.appendChild(this.createME("menuitem",this.cssLocation2Name,"uProfMenu.dirOpen(uProfMenu.cssLocation2);","uProfMenu_folder"),0);
};
if (this.cssLocation3.length>0) {
menupopup.appendChild(this.createME("menuitem",this.cssLocation3Name,"uProfMenu.dirOpen(uProfMenu.cssLocation3);","uProfMenu_folder"),0);
};
}
}
if (this.firefoxOrdner) menupopup.appendChild(document.createXULElement('menuseparator'));
if (this.firefoxOrdner) {
menupopup.appendChild(this.createME("menuitem","Chromeordner","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Addonordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Installationsordner","uProfMenu.prefDirOpen('CurProcD');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Startup-Cacheordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0);
}
// Ende Einbindung von Ordnern
if (this.abouts.length>0 || this.showNormalPrefs) menupopup.appendChild(document.createXULElement('menuseparator'));
// Einbindung von abouts
if (this.abouts.length>0) {
// falls der erste Eintrag des arrays ='0' ist, dann kein Untermenue anlegen, sondern direkt als Menuepunkte einbinden
if (this.abouts[0]=='0') {
for (var i = 1; i < this.abouts.length; i++) {
menupopup.appendChild(this.createME("menuitem",this.abouts[i],"openTrustedLinkIn('"+this.abouts[i]+"','tab')","uProfMenu_about"),0);
}
} else {
// der erste Eintrag des arrays ist ungleich '0', deshalb als Untermenue einrichten
var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-about"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-about-items"));
this.fillMenu("submenu-about","submenu-about-items", "about:",this.abouts,"uProfMenu_about",1);
}
};
// Ende Einbindung von abouts
// Falls gewuenscht (s. Konfigurationsabschnitt), Zugriff auf die normalen Einstellungen
if (this.showNormalPrefs) menupopup.appendChild(this.createME("menuitem","Einstellungen","try{openOptionsDialog();}catch(e){openPreferences();}","uProfMenu_prefs"),0);
if (this.enableRestart) menupopup.appendChild(document.createXULElement('menuseparator'));
// Falls enableRestart = 1, Neustart-Menuepunkt zur Verfügung stellen
if(this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart",
"Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit,0);"));
},
getDirSep:function() {
// Betriebssystem nach https://developer.mozilla.org/en/Code_snippets/Miscellaneous ermitteln
var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
var dirsep="/";
switch(osString) {
case "WINNT":
dirsep="\\";
break;
case "Linux":
dirsep="/";
break;
case "Darwin":
dirsep="/";
break;
}
return dirsep;
},
edit:function(OpenMode,Filename){
var Path = "";
var dSep = this.getDirSep(); // die Trennzeichen zwischen Ordnern abhaengig vom Betriebssystem machen
switch (OpenMode){
//Current is Chrome Directory or Subfolder
case 0:
if (this.jsSubfolder.length != 0) {
var Path = this.getPrefDirectoryPath("UChrm") + dSep + this.jsSubfolder + dSep + Filename;
} else {
var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
}
break;
//Current is Profile Directory
case 1:
var Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename;
break;
//Current is Root
case 2:
var Path = Filename;
break;
//Current is Chrome Directory
case 3:
var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
break;
}
this.launch(this.TextOpenExe,Path);
},
dirOpen:function(Path){
if (this.vFileManager.length != 0) {
var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
var args=[Path];
file.initWithPath(this.vFileManager);
process.init(file);
// Verzeichnis mit anderem Dateimanager oeffnen
process.run(false, args, args.length);
} else {
// Verzeichnis mit Dateimanager des Systems oeffnen
var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
dir.initWithPath(Path);
dir.launch();
}
},
prefDirOpen:function(prefDir){
Path = this.getPrefDirectoryPath(prefDir);
this.dirOpen(Path);
},
getPrefDirectoryPath:function(str){
// get profile directory
var file = Components.classes["@mozilla.org/file/directory_service;1"]
.getService(Components.interfaces.nsIProperties)
.get(str, Components.interfaces.nsIFile);
// folgende 3 Zeilen nur für Firefox, nicht für Thunderbird
if (str == 'CurProcD') {
file = file.parent;
};
return file.path;
},
launch:function(RanPath,OpenPath){
var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
var args = [OpenPath];
file.initWithPath(RanPath);
// falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen:
if (!file.exists()) {
var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
RanPath=pref.getCharPref("view_source.editor.path");
file.initWithPath(RanPath);
}
proc.init(file);
proc.run(false, args, args.length);
},
stringComparison:function(a, b){
a = a.toLowerCase();
a = a.replace(/ä/g,"a");
a = a.replace(/ö/g,"o");
a = a.replace(/ü/g,"u");
a = a.replace(/ß/g,"s");
b = b.toLowerCase();
b = b.replace(/ä/g,"a");
b = b.replace(/ö/g,"o");
b = b.replace(/ü/g,"u");
b = b.replace(/ß/g,"s");
return(a==b)?0:(a>b)?1:-1;
},
getScripts:function(iType) {
// Arrays (jeweils ein Array fuer uc.js und uc.xul) nehmen Namen der gefundenen Skripte auf
let ucJsScripts = [];
// let ucXulScripts = [];
// 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/local;1'].createInstance(Ci.nsIFile);
if (this.jsSubfolder.length != 0) {
aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+uProfMenu.getDirSep()+this.jsSubfolder);
} else {
aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
};
// files mit Eintraegen im Chrome-Ordner befuellen
let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
// Ordner bzw. files 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) */) continue;
// uc.js gefunden -> im Array ablegen
if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
// uc.xul gefunden -> im Array ablegen
// if (extxul.test(file.leafName)) ucXulScripts.push(file.leafName);
}
if (this.sortScripts) {
ucJsScripts.sort(this.stringComparison);
// ucXulScripts.sort(this.stringComparison);
}
// Aufruf der naechsten Methoden um die beiden Untermenues oder die Zwischenablage zu befuellen
if (iType==0) {
this.fillMenu("submenu-ucjs","submenu-ucjs-items", "uc.js",ucJsScripts,"uProfMenu_ucjs",0);
// this.fillMenu("submenu-ucxul","submenu-ucxul-items", "uc.xul",ucXulScripts,"uProfMenu_ucxul",0);
} else {
var result=this.fillClipboardValue(ucJsScripts/* ,ucXulScripts */);
Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
}
},
fillMenu:function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray,sClass,sTyp) {
// Beschriftung des Untermenues mit Anzahl der gefundenen Dateien ergaenzen
var e = document.getElementById(whichsubmenu);
e.setAttribute('label',strlabel + ' (' + scriptArray.length + ')');
var popup = document.getElementById(whichsubmenuitems);
// zunaechst Untermenue zuruecksetzen
while(popup.hasChildNodes()){
popup.removeChild(popup.firstChild);
}
// Untermenue endlich befuellen
for (var i = scriptArray.length-1; i > -1; i--) {
// bisher nur eine Typunterscheidung (userChromeJS-Skript oder about:)
if (sTyp==0){
var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(0,'"+scriptArray[i]+"')",sClass,0);
mitem.setAttribute("onclick","uProfMenu.openAtGithub(event,'"+scriptArray[i]+"')");
mitem.setAttribute("tooltiptext"," Linksklick: Bearbeiten,\n Mittelklick: https://github.com/.../"+this.cleanFileName(scriptArray[i])+" oeffnen,\n Rechtsklick: Suche auf GitHub");
} else {
var mitem = this.createME("menuitem",scriptArray[i],"openTrustedLinkIn('"+scriptArray[i]+"','tab')",sClass,0);
}
popup.insertBefore(mitem, popup.firstChild);
}
},
fillClipboardValue:function(sArray/* ,xArray */) {
var retValue;
var s = 0;
// var x = 0;
s = sArray.length;
// x = xArray.length;
switch(this.enableScriptsToClip) {
case 1:
retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n");
// "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
break;
default:
retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
for (var i = 0; i < s ; i++) {
j = i + 1;
retValue = retValue + "\n" + j + ". " + sArray[i];
}
// retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
// if (this.enableScriptsToClip==2) s = 0;
// for (var i = 0; i < x ; i++) {
// j = i + s + 1;
// retValue = retValue + "\n" + j + ". " + xArray[i];
// }
break;
}
return retValue;
},
createME:function(sTyp,sLabel,sCommand,sClass,sId) {
// Anlegen von menuitem, menu oder menupop - fuer bestimmte Typen nicht eingesetzte Parameter werden als 0 uebergeben
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
var m = document.createElementNS(XUL_NS, sTyp);
switch (sTyp) {
case "menuitem":
// this.createME("menuitem","Label des Items","ZuzuweisenderCodeFueroncommand","GewuenschteKlasseDesItems",0)
m.setAttribute('label', sLabel);
m.setAttribute('oncommand',sCommand);
m.setAttribute('class',sClass);
break;
case "menu":
// this.createME("menu","Label des Menues",0,0,"GewuenschteIdDesMenues")
m.setAttribute('label', sLabel);
m.setAttribute('id', sId);
break;
case "menupopup":
//this.createME("menupopup",0,0,0,"GewuenschteIdDesMenupopups");
m.setAttribute('id', sId);
break;
}
return m;
},
openAtGithub:function(e,sScript) {
if (e.button==1){
// Mittelklick - Seite auf GitHub oeffnen (funktioniert nur, wenn Ordner- und bereinigter Dateiname [ohne Erweiterung] uebereinstimmen):
e.preventDefault();
var sUrl="https://github.com/Endor8/userChrome.js/tree/master/"+this.cleanFileName(sScript);
openWebLinkIn(sUrl, 'tab');
}
if (e.button==2){
// Rechtsklick - Suche auf GitHub starten (funktioniert nur, wenn der Dateiname im Code hinterlegt ist):
e.preventDefault();
var sUrl="https://github.com/search?langOverride=&language=&q="+this.cleanFileName(sScript)+"&repo=&start_value=1&type=Code";
openWebLinkIn(sUrl, 'tab');
}
},
createJSfile: function(Filename) {
if (!Filename) Filename = prompt("Name des Skripts", "skriptName");
if (Filename) Filename = Filename.replace(/\s+/g, " ").replace(/[\\/:*?\"<>|]/g, "");
if (!Filename || !/\S/.test(Filename)) return;
if (!/\.uc.js$/.test(Filename)) Filename += ".uc.js";
this.edit(0, Filename);
},
cleanFileName:function(sName) {
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 sName;
}
};
uProfMenu.init();
Alles anzeigen
Das Menü des Skripts "extra-config-menu.us.js" funktioniert nicht mehr.
Das funktioniert hier einwandfrei.
Ich habe es als Menü in der Menüleiste und verschiebe es auch mit AppMenu_edit ins AppMenu. Dort funktioniert es nicht mehr.