oder sonst wohin leiten
Richtig. Wichtig ist eben nur, dass sich das Icon dann auch in dem Ordner befindet.
Darum meine Frage an ihn:
Hast du in beiden Ordnern Icons die gleichen Symbole drin?
oder sonst wohin leiten
Richtig. Wichtig ist eben nur, dass sich das Icon dann auch in dem Ordner befindet.
Darum meine Frage an ihn:
Hast du in beiden Ordnern Icons die gleichen Symbole drin?
dass sich das Icon dann auch in dem Ordner befindet.
Das ist natürlich die Grundvoraussetzung. ![]()
omar1979 Wenn beide Script im gleichen Ordner liegen,
warum passt Du den "falschen" Pfad nicht an?
Nimm den, in dessen Script es funktioniert, und ersetze den,
in dem Script mit diesem!
Am besten kommentierst Du den Pfad einfach nur aus
Und fügst den neuen nur ein.
Speichern und Neustart.
Hast du in beiden Ordnern Icons die gleichen Symbole drin?
ja.
Nimm den, in dessen Script es funktioniert, und ersetze den,
in dem Script mit diesem!Am besten kommentierst Du den Pfad einfach nur aus
Und fügst den neuen nur ein.
Speichern und Neustart.
hab ich schon, wenn das icon im selben ordner nehme, also bei dem extraconfig-menu.uc.js, dann wird nichtmal der Leer-Raum angezeit. schau bild.
Ok, ich habe mir Dein Script extras_config_menu.uc.js mal genauer angeschaut.
Wann bitte hat es den funktioniert?
Das ist sowas von asbach uralt, da gehe ich nicht drann!
Wo hast Du es her? Wenn ich nicht irre, gibt es davon neuere Versionen!!
Und Tu Dir doch selbst einen gefallen![]()
Du editierst Dir doch den Header mit für Dich wichtigen Infos.
Warum nicht auch mit dem Link der Quelle?
Würde so vieles einfacher machen!!
Da => extras_config_menu.uc.js
ist schon mal eine aktuellere Version.
Wann bitte hat es den funktioniert?
Das ist sowas von asbach uralt, da gehe ich nicht drann!
Da stimme ich dir voll und ganz zu, funktioniert vieles nicht mehr.
Da => extras_config_menu.uc.js
ist schon mal eine aktuellere Version.
Ja, das ist gut, nur muss er es auf seine Bedürfnisse anpassen.
Ja, das ist gut, nur muss er es auf seine Bedürfnisse anpassen.
Den Konfigbereich 1:1 zu übertragen sollte ja nun nicht wirklich eine sooo große Hürde darstellen.
Wenn doch, ich, wir hier sind doch immer zur Hilfe bereit!
Ich habe die Beiträge zu der neuen Version in einen eigenen Thread verschoben:
Das ist sowas von asbach uralt, da gehe ich nicht dran!
Vielleicht ist der Usus "never change a running system" auch für Firefox komplett der falsche Weg. Was können die Helfer dafür, wenn veraltete Scripte nicht erneuert werden, geschweige neuere Ausgaben in einem Test-Profil ausprobiert werden?
Richtig: NICHTS!
wir hier sind doch immer zur Hilfe bereit!
Aufpassen, bitte keine Blanko-Ausnahme bescheinigen. Nutzer von Scripten sind auf sich gestellt, dem nachzugehen. Ja, eine Frage im Forum ist sinnig, aber man sollte auch zB die Seiten von Endor (endor8), oder Alice oder [...] aktiv verfolgen, deren Scripte man auch nutzt.
Was wisst ihr denn, wie viel vom originalen Script alles verändert wurde? Sowas hatte ich ja einst für CSS angesprochen. Die Fragensteller sind alles Diven, aber auch diese lassen sich zurechtstutzen. Helfer geben die Marke vor, andere haben sich dem anzupassen und entsprechend Mitarbeit abzuliefern bei Änderungen.
Mal so am Rande initiiert, durch das andere Thema: manche persönliche Einstellungen gehen nicht konform mit Standardeinstellungen. Ihr solltet sowas besser kommunizieren. Wer andere Einstellungen direkt im about:config nutzt, sollte diese auch kommunizieren - oder ein unverändertes Testprofil nutzen.
Ideal wäre eine Portable, ohne userChrome.JS und ähnlichen Rummel, am besten auch ohne Windows-Policies. Vielleicht doch ein Windows-to-go oder Live-Linux?
Aufpassen, bitte keine Blanko-Ausnahme bescheinigen.
Sollte auch keine sein!
Die bezog sich auf die Hilfe, die benötigt wird, wenn jemand doch Probleme hat das aktuelle Skript
zu konfigurieren.
das Script verticale addonbar wurde nochmals aktualisiert.
Siehe hier:
Mfg.
Endor
das Script verticale addonbar wurde nochmals aktualisiert.
Dankeschön Endor
Dankeschön
Funktioniert denn jetzt alles wieder bei dir?
Kam ja leider keine Rückmeldung bisher![]()
Kam ja leider keine Rückmeldung bisher
sorry, ich hatte einen durcheinander. die zusatzleiste funktioniert jetzt aber extra-config-menü nicht.
extra-config-menü nicht.
Auch diese Version nicht?
Auch diese Version nicht?
ich glaube das ist nicht die Gleiche, die ich bis jetzt immer benütze.
ich glaube das ist nicht die Gleiche,
Nein, das ist eine neue angepasste Version.
Die kannst du doch auch für dich anpassen wieder.
Nein, das ist eine neue angepasste Version.
Die kannst du doch auch für dich anpassen wieder.
ich glaube die hat zu viele Einträge. Bin nicht mehr sicher, ob es das ist.
Ich habe jetzt mal dein Script von hier erneuert, es funktioniert hier in Version 155, probiere es aus. Wenn du dann doch ein anderes nutzt, dann stelle es hier rein, werde dir dabei helfen wenn du möchtest. Hier erst einmal das Script (funktioniert ohne eval-Schalter).
// ==UserScript==
// @name extras_config_menu.uc.js
// @compatibility Firefox 5*.*
// @include main
// @version 2.0.20260814
// @description Extra-Konfigurationsmenü ohne Inline-JavaScript und ohne eval
// ==/UserScript==
var uProfMenu = {
/*
* =========================
* Beginn der Konfiguration
* =========================
*/
// Texteditor
TextOpenExe: 'D:\\PortableProgramme\\Notepad++Portable_x64\\notepad++.exe',
// Dateimanager:
// Leer lassen, damit der Dateimanager des Systems verwendet wird.
vFileManager: '',
// Unterordner für userChromeJS-Scripte.
// Leer lassen, wenn die Scripte direkt im Chrome-Ordner liegen.
jsSubfolder: 'Scripte',
/*
* 'menu' = Eintrag unter Extras
* sonst = ID des Elements, nach dem der Button eingefügt werden soll
*/
warpmenuto: 'urlbar-container',
// 1 = Sortierung erzwingen, 0 = keine Sortierung
sortScripts: 0,
/*
* GM-Scripte:
* 0 = nein
* 1 = Greasemonkey
* 2 = UserScriptLoader
* 3 = Scriptish
*/
gmOrdner: 0,
// CSS-Ordner einbinden: 0 = nein, 1 = ja
cssOrdner: 0,
/*
* Ordnernamen exakt an die tatsächlichen Ordnernamen anpassen.
* Unter Linux ist Groß-/Kleinschreibung relevant.
*/
cssFolderName: 'CSS',
cssShadowFolderName: 'CSSShadow',
cssWebFolderName: 'CSSWeb',
// Aufzurufende about:-Seiten
abouts: [
'about:about',
'about:debugging#/runtime/this-firefox',
'about:cache',
'about:config',
'about:crashes',
'about:downloads',
'about:home',
'about:logins',
'about:memory',
'about:support',
'about:preferences',
'about:performance',
'about:profiles'
],
// Normale Firefox-Einstellungen anzeigen
showNormalPrefs: 0,
/*
* Skriptliste in die Zwischenablage:
* 0 = nein
* 1 = ohne Nummerierung
* 2 = getrennte Nummerierung
* 3 = gemeinsame Nummerierung
*/
enableScriptsToClip: 1,
// Neustart-Eintrag erzwingen
enableRestart: 0,
/*
* =======================
* Ende der Konfiguration
* =======================
*/
init: function() {
var menu;
if (this.warpmenuto.toLowerCase() == 'menu') {
var zielmenu = document.getElementById('menu_ToolsPopup');
if (!zielmenu) {
if (typeof userChrome != 'undefined' && userChrome.log) {
userChrome.log(
'extras_config_menu.uc.js findet das Zielmenü nicht.'
);
}
return;
}
menu = zielmenu.appendChild(
this.createMenuElement(
'menu',
'Config Menü',
'ExtraConfigMenu'
)
);
menu.setAttribute('class', 'menu-iconic');
menu.addEventListener('dblclick', function() {
openTrustedLinkIn('about:config', 'tab');
});
} else {
if (window.__SSi == 'window0') {
CustomizableUI.createWidget({
id: 'ExtraConfigMenu-button',
defaultArea: CustomizableUI.AREA_NAVBAR,
label: 'Extra Config Menü',
tooltiptext: 'Extra Config Menü\nMittelklick öffnet about:config'
});
}
menu = document.getElementById('ExtraConfigMenu-button');
if (!menu) {
return;
}
menu.setAttribute('type', 'menu');
menu.addEventListener('click', function(event) {
if (event.button == 1) {
openTrustedLinkIn('about:config', 'tab');
}
});
}
var css =
'#ExtraConfigMenu, #ExtraConfigMenu-button {' +
' list-style-image: url(file:///C:/Users/Ramo/AppData/Roaming/' +
'Mozilla/Firefox/Profiles/c612nnc8.default-release/chrome/Icons/extraConf.png);' +
'}' +
'#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 = Services.io.newURI(
'data:text/css;charset=UTF-8,' + encodeURIComponent(css)
);
if (!sss.sheetRegistered(uri, sss.AGENT_SHEET)) {
sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
}
menu.addEventListener('popupshowing', function() {
uProfMenu.getScripts(0);
uProfMenu.getCss(3);
uProfMenu.getCss(4);
uProfMenu.getCss(5);
});
var menupopup = menu.appendChild(
this.createMenuElement(
'menupopup',
'',
'ExtraConfigMenu-popup'
)
);
/*
* UserChromeJS-Scripte
*/
var submenu = menupopup.appendChild(
this.createMenuElement('menu', 'Scripte', 'submenu-ucjs')
);
submenu.appendChild(
this.createMenuElement(
'menupopup',
'',
'submenu-ucjs-items'
)
);
/*
* CSS
*/
submenu = menupopup.appendChild(
this.createMenuElement('menu', 'CSS', 'submenu-css')
);
submenu.appendChild(
this.createMenuElement(
'menupopup',
'',
'submenu-css-items'
)
);
/*
* CSSShadow
*/
submenu = menupopup.appendChild(
this.createMenuElement(
'menu',
'CSSShadow',
'submenu-CSSShadow'
)
);
submenu.appendChild(
this.createMenuElement(
'menupopup',
'',
'submenu-CSSShadow-items'
)
);
/*
* CSSWeb
*/
submenu = menupopup.appendChild(
this.createMenuElement(
'menu',
'CSSWeb',
'submenu-cssweb'
)
);
submenu.appendChild(
this.createMenuElement(
'menupopup',
'',
'submenu-cssweb-items'
)
);
/*
* about:-Seiten
*/
if (this.abouts.length > 0) {
menupopup.appendChild(document.createXULElement('menuseparator'));
if (this.abouts[0] == '0') {
for (var i = 1; i < this.abouts.length; i++) {
menupopup.appendChild(
this.createMenuItem(
this.abouts[i],
function(event) {
openTrustedLinkIn(
event.currentTarget.getAttribute('data-url'),
'tab'
);
},
'uProfMenu_about',
{
'data-url': this.abouts[i]
}
)
);
}
} else {
submenu = menupopup.appendChild(
this.createMenuElement(
'menu',
'about-Seiten',
'submenu-about'
)
);
submenu.appendChild(
this.createMenuElement(
'menupopup',
'',
'submenu-about-items'
)
);
this.fillMenu(
'submenu-about',
'submenu-about-items',
'about-Seiten',
this.abouts,
'uProfMenu_about',
1
);
}
}
/*
* Zwischenablage
*/
if (this.enableScriptsToClip) {
menupopup.appendChild(
this.createMenuItem(
'Scriptliste in Zwischenablage kopieren',
function() {
uProfMenu.getScripts(1);
},
'uProfMenu_clipboard'
)
);
}
menupopup.appendChild(
document.createXULElement('menuseparator')
);
/*
* Konfigurationsdateien
*/
menupopup.appendChild(
this.createMenuItem(
'userChrome.css',
function() {
uProfMenu.edit(6, 'userChrome.css');
},
'uProfMenu_edit'
)
);
menupopup.appendChild(
this.createMenuItem(
'userChromeShadow.css',
function() {
uProfMenu.edit(6, 'userChromeShadow.css');
},
'uProfMenu_edit'
)
);
menupopup.appendChild(
this.createMenuItem(
'userContent.css',
function() {
uProfMenu.edit(6, 'userContent.css');
},
'uProfMenu_edit'
)
);
menupopup.appendChild(
this.createMenuItem(
'userChrome.js',
function() {
uProfMenu.edit(6, 'userChrome.js');
},
'uProfMenu_edit'
)
);
menupopup.appendChild(
this.createMenuItem(
'prefs.js',
function() {
uProfMenu.edit(1, 'prefs.js');
},
'uProfMenu_edit'
)
);
menupopup.appendChild(
this.createMenuItem(
'user.js',
function() {
uProfMenu.edit(1, 'user.js');
},
'uProfMenu_edit'
)
);
menupopup.appendChild(
document.createXULElement('menuseparator')
);
/*
* Ordner
*/
switch (this.gmOrdner) {
case 1:
menupopup.appendChild(
this.createMenuItem(
'GM-Scripte',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('ProfD') +
uProfMenu.getDirSep() +
'gm_scripts'
);
},
'uProfMenu_folder'
)
);
break;
case 2:
menupopup.appendChild(
this.createMenuItem(
'USL-Scripte',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('UChrm') +
uProfMenu.getDirSep() +
'UserScriptLoader'
);
},
'uProfMenu_folder'
)
);
break;
case 3:
menupopup.appendChild(
this.createMenuItem(
'Scriptish-Scripte',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('ProfD') +
uProfMenu.getDirSep() +
'scriptish_scripts'
);
},
'uProfMenu_folder'
)
);
break;
}
menupopup.appendChild(
this.createMenuItem(
'Scripte-Ordner öffnen',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('UChrm') +
uProfMenu.getDirSep() +
uProfMenu.jsSubfolder
);
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'CSS-Ordner öffnen',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('UChrm') +
uProfMenu.getDirSep() +
uProfMenu.cssFolderName
);
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'CSSShadow-Ordner öffnen',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('UChrm') +
uProfMenu.getDirSep() +
uProfMenu.cssShadowFolderName
);
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'CSSWeb-Ordner öffnen',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('UChrm') +
uProfMenu.getDirSep() +
uProfMenu.cssWebFolderName
);
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'Chrome-Ordner öffnen',
function() {
uProfMenu.prefDirOpen('UChrm');
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'Profil-Ordner öffnen',
function() {
uProfMenu.prefDirOpen('ProfD');
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'Icons-Ordner öffnen',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('UChrm') +
uProfMenu.getDirSep() +
'Icons'
);
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'Installations-Ordner öffnen',
function() {
uProfMenu.prefDirOpen('CurProcD');
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'Add-ons-Ordner öffnen',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('ProfD') +
uProfMenu.getDirSep() +
'extensions'
);
},
'uProfMenu_folder'
)
);
menupopup.appendChild(
this.createMenuItem(
'Startup-Cache-Ordner öffnen',
function() {
uProfMenu.dirOpen(
uProfMenu.getPrefDirectoryPath('ProfLD') +
uProfMenu.getDirSep() +
'startupCache'
);
},
'uProfMenu_folder'
)
);
/*
* Normale Einstellungen
*/
if (
this.abouts.length == 0 &&
(this.showNormalPrefs ||
typeof ToolRstartMod != 'undefined')
) {
menupopup.appendChild(
document.createXULElement('menuseparator')
);
}
if (this.showNormalPrefs) {
menupopup.appendChild(
this.createMenuItem(
'Einstellungen',
function() {
try {
openOptionsDialog();
} catch (e) {
openPreferences();
}
},
'uProfMenu_prefs'
)
);
}
/*
* Neustart
*/
if (
typeof ToolRstartMod != 'undefined' ||
this.enableRestart
) {
menupopup.appendChild(
this.createMenuItem(
'Neustart',
function() {
try {
ToolRstartMod.restartApp(false);
} catch (e) {
alert(e);
}
},
'uProfMenu_restart'
)
);
}
},
getDirSep: function() {
var osString = Services.appinfo.OS;
switch (osString) {
case 'WINNT':
return '\\';
case 'Linux':
case 'Darwin':
default:
return '/';
}
},
edit: function(openMode, filename) {
var dSep = this.getDirSep();
var path;
switch (openMode) {
case 0:
path = this.getPrefDirectoryPath('UChrm');
if (this.jsSubfolder.length != 0) {
path += dSep + this.jsSubfolder;
}
path += dSep + filename;
break;
case 1:
path =
this.getPrefDirectoryPath('ProfD') +
dSep +
filename;
break;
case 2:
path = filename;
break;
case 3:
path =
this.getPrefDirectoryPath('UChrm') +
dSep +
this.cssFolderName +
dSep +
filename;
break;
case 4:
path =
this.getPrefDirectoryPath('UChrm') +
dSep +
this.cssWebFolderName +
dSep +
filename;
break;
case 5:
path =
this.getPrefDirectoryPath('UChrm') +
dSep +
this.cssShadowFolderName +
dSep +
filename;
break;
case 6:
path =
this.getPrefDirectoryPath('UChrm') +
dSep +
filename;
break;
default:
return;
}
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);
file.initWithPath(this.vFileManager);
process.init(file);
var args = [path];
process.run(false, args, args.length);
} else {
var dir = Cc[
'@mozilla.org/file/local;1'
].createInstance(Ci.nsIFile);
dir.initWithPath(path);
dir.launch();
}
},
prefDirOpen: function(prefDir) {
var path = this.getPrefDirectoryPath(prefDir);
this.dirOpen(path);
},
getPrefDirectoryPath: function(prefDir) {
var file = Services.dirsvc.get(prefDir, Ci.nsIFile);
if (prefDir == 'CurProcD') {
file = file.parent;
}
return file.path;
},
launch: function(editorPath, filePath) {
var file = Cc[
'@mozilla.org/file/local;1'
].createInstance(Ci.nsIFile);
var process = Cc[
'@mozilla.org/process/util;1'
].createInstance(Ci.nsIProcess);
file.initWithPath(editorPath);
/*
* Falls der konfigurierte Editor nicht existiert,
* view_source.editor.path verwenden.
*/
if (!file.exists()) {
try {
editorPath = Services.prefs.getStringPref(
'view_source.editor.path'
);
} catch (e) {
alert(
'Editor nicht gefunden und view_source.editor.path ist nicht gesetzt.'
);
return;
}
file.initWithPath(editorPath);
}
if (!file.exists()) {
alert('Editor nicht gefunden:\n' + editorPath);
return;
}
process.init(file);
var args = [filePath];
process.run(false, args, args.length);
},
stringComparison: function(a, b) {
function normalize(value) {
return value
.toLowerCase()
.replace(/ä/g, 'a')
.replace(/ö/g, 'o')
.replace(/ü/g, 'u')
.replace(/ß/g, 's');
}
a = normalize(a);
b = normalize(b);
return a == b ? 0 : a > b ? 1 : -1;
},
getScripts: function(type) {
var ucJsScripts = [];
var folderPath = Services.dirsvc.get(
'UChrm',
Ci.nsIFile
).path;
if (this.jsSubfolder.length != 0) {
folderPath +=
this.getDirSep() +
this.jsSubfolder;
}
var folder = Cc[
'@mozilla.org/file/local;1'
].createInstance(Ci.nsIFile);
folder.initWithPath(folderPath);
if (folder.exists() && folder.isDirectory()) {
var files = folder.directoryEntries;
while (files.hasMoreElements()) {
var file = files
.getNext()
.QueryInterface(Ci.nsIFile);
if (/\.uc\.js$/i.test(file.leafName)) {
ucJsScripts.push(file.leafName);
}
}
}
if (this.sortScripts) {
ucJsScripts.sort(this.stringComparison);
}
if (type == 0) {
this.fillMenu(
'submenu-ucjs',
'submenu-ucjs-items',
'Meine Scripte',
ucJsScripts,
'uProfMenu_ucjs',
0
);
} else {
var result = this.fillClipboardValue(
ucJsScripts,
[]
);
Cc[
'@mozilla.org/widget/clipboardhelper;1'
].getService(Ci.nsIClipboardHelper).copyString(result);
}
},
getCss: function(type) {
var cssFiles = [];
var folderName;
switch (type) {
case 3:
folderName = this.cssFolderName;
break;
case 4:
folderName = this.cssWebFolderName;
break;
case 5:
folderName = this.cssShadowFolderName;
break;
default:
return;
}
var folderPath =
Services.dirsvc.get('UChrm', Ci.nsIFile).path +
this.getDirSep() +
folderName;
var folder = Cc[
'@mozilla.org/file/local;1'
].createInstance(Ci.nsIFile);
folder.initWithPath(folderPath);
if (folder.exists() && folder.isDirectory()) {
var files = folder.directoryEntries;
while (files.hasMoreElements()) {
var file = files
.getNext()
.QueryInterface(Ci.nsIFile);
if (/\.css$/i.test(file.leafName)) {
cssFiles.push(file.leafName);
}
}
}
if (this.sortScripts) {
cssFiles.sort(this.stringComparison);
}
if (type == 3) {
this.fillMenu(
'submenu-css',
'submenu-css-items',
'Meine CSS-Dateien',
cssFiles,
'uProfMenu_css',
3
);
} else if (type == 4) {
this.fillMenu(
'submenu-cssweb',
'submenu-cssweb-items',
'Meine CSSWeb-Dateien',
cssFiles,
'uProfMenu_css',
4
);
} else if (type == 5) {
this.fillMenu(
'submenu-CSSShadow',
'submenu-CSSShadow-items',
'Meine CSSShadow-Dateien',
cssFiles,
'uProfMenu_css',
5
);
}
},
fillMenu: function(
submenuId,
submenuItemsId,
label,
fileArray,
itemClass,
type
) {
var submenu = document.getElementById(submenuId);
var popup = document.getElementById(submenuItemsId);
if (!submenu || !popup) {
return;
}
submenu.setAttribute(
'label',
label + ' (' + fileArray.length + ')'
);
while (popup.firstChild) {
popup.removeChild(popup.firstChild);
}
for (var i = fileArray.length - 1; i >= 0; i--) {
var filename = fileArray[i];
var menuitem;
if (type == 0) {
menuitem = this.createMenuItem(
filename,
function(event) {
var name =
event.currentTarget.getAttribute('data-filename');
if (event.button == 1) {
uProfMenu.openAtGithub(event, name);
} else if (event.button == 2) {
uProfMenu.openAtGithub(event, name);
}
},
itemClass,
{
'data-filename': filename
}
);
menuitem.setAttribute(
'tooltiptext',
'Linksklick: Bearbeiten\n' +
'Mittelklick: GitHub öffnen\n' +
'Rechtsklick: Suche auf GitHub'
);
menuitem.addEventListener('command', function(event) {
uProfMenu.edit(
0,
event.currentTarget.getAttribute('data-filename')
);
});
} else if (type == 1) {
menuitem = this.createMenuItem(
filename,
function(event) {
openTrustedLinkIn(
event.currentTarget.getAttribute('data-url'),
'tab'
);
},
itemClass,
{
'data-url': filename
}
);
} else if (type == 3) {
menuitem = this.createMenuItem(
filename,
function(event) {
uProfMenu.edit(
3,
event.currentTarget.getAttribute('data-filename')
);
},
itemClass,
{
'data-filename': filename
}
);
} else if (type == 4) {
menuitem = this.createMenuItem(
filename,
function(event) {
uProfMenu.edit(
4,
event.currentTarget.getAttribute('data-filename')
);
},
itemClass,
{
'data-filename': filename
}
);
} else if (type == 5) {
menuitem = this.createMenuItem(
filename,
function(event) {
uProfMenu.edit(
5,
event.currentTarget.getAttribute('data-filename')
);
},
itemClass,
{
'data-filename': filename
}
);
}
if (menuitem) {
popup.insertBefore(menuitem, popup.firstChild);
}
}
},
fillClipboardValue: function(scriptArray, xulArray) {
var scriptCount = scriptArray.length;
var xulCount = xulArray.length;
var result;
switch (this.enableScriptsToClip) {
case 1:
result =
'userChromeJS/uc.js (' +
scriptCount +
'):\n' +
'------------------------\n' +
scriptArray.join('\n') +
'\n\n' +
'userChromeJS/uc.xul (' +
xulCount +
'):\n' +
'-------------------------\n' +
xulArray.join('\n');
break;
case 2:
case 3:
result =
'userChromeJS/uc.js (' +
scriptCount +
'):\n' +
'------------------------';
for (var i = 0; i < scriptCount; i++) {
result += '\n' + (i + 1) + '. ' + scriptArray[i];
}
result +=
'\n\nuserChromeJS/uc.xul (' +
xulCount +
'):\n' +
'-------------------------';
for (var j = 0; j < xulCount; j++) {
var number = j + 1;
if (this.enableScriptsToClip == 3) {
number += scriptCount;
}
result += '\n' + number + '. ' + xulArray[j];
}
break;
default:
result = '';
}
return result;
},
createMenuElement: function(type, label, id) {
var element = document.createXULElement(type);
if (label) {
element.setAttribute('label', label);
}
if (id) {
element.setAttribute('id', id);
}
return element;
},
createMenuItem: function(label, callback, className, attributes) {
var item = document.createXULElement('menuitem');
item.setAttribute('label', label);
if (className) {
item.setAttribute('class', className);
}
if (attributes) {
for (var name in attributes) {
item.setAttribute(name, attributes[name]);
}
}
/*
* Kein oncommand-Attribut und kein Inline-JavaScript:
* Die Funktion wird direkt als Event-Listener registriert.
*/
item.addEventListener('command', callback);
/*
* Für Mittelklick und Rechtsklick wird zusätzlich das click-Event
* verwendet. Der normale Linksklick läuft über command.
*/
item.addEventListener('click', callback);
return item;
},
openAtGithub: function(event, scriptName) {
if (event.button == 1) {
var githubUrl =
'https://github.com/ardiman/userChrome.js/tree/master/' +
this.cleanFileName(scriptName);
openWebLinkIn(githubUrl, 'tab');
} else if (event.button == 2) {
event.preventDefault();
var searchUrl =
'https://github.com/search?langOverride=&language=&q=' +
encodeURIComponent(scriptName) +
'&repo=&start_value=1&type=Code';
openWebLinkIn(searchUrl, 'tab');
}
},
cleanFileName: function(name) {
name = name.toLowerCase();
var expressions = [
/\.uc\.js$/,
/\.uc\.xul$/,
/^ucjs_/,
/_\d.+/,
/_fx\d+/,
/[-+\.]/g,
/_v\d+/
];
for (var i = 0; i < expressions.length; i++) {
name = name.replace(expressions[i], '');
}
return name;
}
};
/*
* Script starten
*/
uProfMenu.init();
Alles anzeigen
dann stelle es hier rein, werde dir dabei helfen wenn du möchtest. Hier erst einmal das Script (funktioniert ohne eval-Schalter).
ich benütze dieses Script, funktioniert aber nicht, zeigt kein icon an, nur das Feld dafür ist leer und auf klick passiert aucht nichts.
/* INFO FÜR MICH, BEI EINER DEFINITIVEN LÖSUNG DAS WIEDER ZURÜCKSETZEN!!!
Hast Du in Firefox 139 in about:config den Eintrag
security.browser_xhtml_csp.enabled auf false gesetzt?
Sonst geht das Script nicht mehr. */
// ==UserScript==
// @name extras_config_menu.uc.js
// @compatibility Firefox 5*.*
// @include main
// @version 1.0.20190504
// @edit @aborix 7/21 CSS Dateien als Untermenü eingefügt
// @edit @2002Andreas 8/21 Shadow CSS Dateien als Untermenü + Ordner eingefügt
// ==/UserScript==
var uProfMenu = {
// Beginn der Konfiguration
// In der folgenden Zeile (11) den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
//TextOpenExe: 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe',
TextOpenExe: 'D:\\PortableProgramme\\Notepad++Portable_x64\\notepad++.exe',
// Falls gewuenscht, in Zeile 15 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: '',
// Falls die JavaScript-Scripte nicht im chrome-Verzeichnis, sondern einem Unterverzeichnis sind,
// in der folgenden Zeile das Unterverzeichnis eintragen, sonst '':
jsSubfolder: 'Scripte',
// In der folgenden Zeile (19) 'menu' eintragen, damit es unter "Extras" als Menue 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: 'urlbar-container',
// Unter Linux sollte/kann versucht werden, die userChromeJS-Scripte 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-Scripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]):
gmOrdner: 0,
// Einbindung CSS-Ordner (0: nein, 1: UserCSSLoader-Ordner im Chrome-Verzeichnis):
cssOrdner: 0,
// In Zeile 30 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:about','about:addons','about:cache','about:config','about:support'],
abouts: ['about:about','about:debugging#/runtime/this-firefox','about:cache','about:config','about:crashes','about:downloads','about:home','about:logins','about:memory','about:support','about:preferences','about:performance','about:profiles'],
// 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: 1,
// Um den Eintrag "Neustart" zu erzwingen (falls z.B. das andere Skript zu spaet eingebunden und nicht erkannt wird), auf 1 setzen:
enableRestart: 0,
// Ende der Konfiguration
init: function() {
if (this.warpmenuto.toLowerCase() == 'menu') {
// aufgrund des gewaehlten warpmenuto als Untermenue von Extras anlegen
var zielmenu = document.getElementById('menu_ToolsPopup');
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\u00FC",0,0,"ExtraConfigMenu"));
menu.setAttribute("class","menu-iconic");
menu.setAttribute("ondblclick","openTrustedLinkIn('about:config', 'tab');");
} else {
// als verschiebbaren Button anlegen
if (window.__SSi == "window0") {
CustomizableUI.createWidget({
id: "ExtraConfigMenu-button",
defaultArea: CustomizableUI.AREA_NAVBAR,
label: "Extra Config Menü",
tooltiptext: "Extra Config Menü\nMittelklick \öffnet about:config"
});
}
var menu = document.getElementById("ExtraConfigMenu-button");
menu.setAttribute("type", "menu");
menu.setAttribute("onclick", "if (event.button == 1) openTrustedLinkIn('about:config', 'tab');");
}
//ab hier ist alles gleich, egal ob Button oder Menue
var css = " \
#ExtraConfigMenu, #ExtraConfigMenu-button { \
list-style-image: url(file:///C:/Users/Ramo/AppData/Roaming/Mozilla/Firefox/Profiles/c612nnc8.default-release/chrome/Icons/extraConf.png) \
} \
#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);uProfMenu.getCss(3);uProfMenu.getCss(4);uProfMenu.getCss(5)");
var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup"));
// Anlegen von Untermenues fuer userChromeJS-Scripte und CSS-Dateien (befuellen spaeter)
var submenu = menupopup.appendChild(this.createME("menu","Scripte",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"));
var submenu = menupopup.appendChild(this.createME("menu","css",0,0,"submenu-css"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-css-items"));
var submenu = menupopup.appendChild(this.createME("menu","CSSShadow",0,0,"submenu-CSSShadow"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-CSSShadow-items"));
var submenu = menupopup.appendChild(this.createME("menu","cssweb",0,0,"submenu-cssweb"));
var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-cssweb-items"));
//Einbindung von abouts
if (this.abouts.length>0) {
menupopup.appendChild(document.createXULElement('menuseparator'));
// 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:seiten",this.abouts,"uProfMenu_about",1);
}
}
// Ende Einbindung von abouts
if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Scriptliste in Zwischenablage kopieren","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
// Ende Anlegen von Untermenues
menupopup.appendChild(document.createXULElement('menuseparator'));
// Einbindung von Konfigdateien
menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(6,'userChrome.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","userChromeShadow.css","uProfMenu.edit(6,'userChromeShadow.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(6,'userContent.css');","uProfMenu_edit",0));
menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(6,'userChrome.js');","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
menupopup.appendChild(document.createXULElement('menuseparator'));
// Einbindung von Ordnern
switch (this.gmOrdner) {
case 1:
menupopup.appendChild(this.createME("menuitem","GM-skripty","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0);
break;
case 2:
menupopup.appendChild(this.createME("menuitem","USL-skripty","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
break;
case 3:
menupopup.appendChild(this.createME("menuitem","Skripty Scriptish","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0);
break;
}
menupopup.appendChild(this.createME("menuitem","Scripte-Ordner öffnen","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Scripte');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","CSS-Ordner öffnen","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'css');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","CSSShadow-Ordner öffnen","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSShadow');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","CSSWeb-Ordner öffnen","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSWeb');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Chrome-Ordner öffnen","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Profil-Ordner öffnen","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Icons-Ordner öffnen","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Icons');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Installations-Ordner öffnen","uProfMenu.prefDirOpen('CurProcD');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Addons-Ordner öffnen","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');","uProfMenu_folder"),0);
menupopup.appendChild(this.createME("menuitem","Startup-Cache-Ordner öffnen","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0);
/* menupopup.appendChild(this.createME("menuitem","Ordner
about","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'about');","uProfMenu_folder"),0); */
// Ende Einbindung von Ordnern
//Löschen --> Einbindung von abouts
/*if (this.abouts.length>0) {
menupopup.appendChild(document.createXULElement('menuseparator'));
// 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:seiten",this.abouts,"uProfMenu_about",1);
}
}*/
// Ende Einbindung von abouts
// Separator, falls dieser nicht schon durch abouts generiert wurde und weitere Menuepunkte folgen werden
if (this.abouts.length==0 && (this.showNormalPrefs || typeof(ToolRstartMod) != "undefined")) menupopup.appendChild(document.createXULElement('menuseparator'));
// 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);
// Falls addRestartButton installiert ist, Neustart zur Verfuegung stellen (addRestartButton 1.0.20120105mod erforderlich)
if(typeof(ToolRstartMod) != "undefined" || this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart",
"try{ToolRstartMod.restartApp(false);} catch(e){alert(e);}","uProfMenu_restart"),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
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 CSS folder
case 3:
var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSS" + dSep + Filename;
break;
//Current is CSSWeb folder
case 4:
var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSWeb" + dSep + Filename;
break;
//Current is CSSShadow folder
case 5:
var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename;
break;
//Current ist Chrome Directory
case 6:
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);
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 Scripte 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);
aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+uProfMenu.getDirSep()+this.jsSubfolder);
// 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);
// 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", "Meine Scripte",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);
}
},
getCss:function(iType) {
// Array nimmt Namen der gefundenen css-Dateien auf
let cssFiles = [];
// Suchmuster, also die Dateierweiterung css
let extcss = /\.css$/i;
let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
if (iType==3) {
aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSS");
} else if (iType==4) {
aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSSWeb");
} else if (iType==5) {
aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSSShadow");
}
// files mit Eintraegen im CSS- bzw. CSSWeb-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);
// css gefunden -> im Array ablegen
if (extcss.test(file.leafName)) cssFiles.push(file.leafName);
}
if (this.sortScripts) {
cssFiles.sort(this.stringComparison);
}
// Untermenue befuellen
if (iType==3) {
this.fillMenu("submenu-css","submenu-css-items","Meine CSS-Dateien",cssFiles,"uProfMenu_css",3);
} else if (iType==4) {
this.fillMenu("submenu-cssweb","submenu-cssweb-items","Meine CSSWeb-Dateien",cssFiles,"uProfMenu_css",4);
} else if (iType==5) {
this.fillMenu("submenu-CSSShadow","submenu-CSSShadow-items","Meine CSSShadow-Dateien",cssFiles,"uProfMenu_css",5);
}
},
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--) {
// Typunterscheidung (userChromeJS-Skript oder about: oder css)
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 if (sTyp==1){
var mitem = this.createME("menuitem",scriptArray[i],"openTrustedLinkIn('"+scriptArray[i]+"','tab')",sClass,0);
} else if (sTyp==3){
var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(3,'"+scriptArray[i]+"')",sClass,0);
} else if (sTyp==4){
var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(4,'"+scriptArray[i]+"')",sClass,0);
}
else if (sTyp==5){
var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(5,'"+scriptArray[i]+"')",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):
var sUrl = "https://github.com/ardiman/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="+sScript+"&repo=&start_value=1&type=Code";
openWebLinkIn(sUrl, 'tab');
}
},
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