Zweiter Teil![]()
JavaScript
_externalAppPopup: null,
_isready: false,
init: function() {
this.handleRelativePath(this.toolbar.apps);
const XULNS = 'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul';
var ExternalAppBtn = document.createElementNS(XULNS, 'toolbarbutton');
ExternalAppBtn.id = "AppMenuButton";
ExternalAppBtn.setAttribute("label", "AppButton");
ExternalAppBtn.setAttribute("onclick", "event.preventDefault();event.stopPropagation();");
ExternalAppBtn.setAttribute("tooltiptext", "Firefox Menü");
ExternalAppBtn.setAttribute("type", "menu");
ExternalAppBtn.setAttribute("removable", "true");
if (Appmenu.isButton) {
ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,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)";
ExternalAppBtn.style.width = "6%";
ExternalAppBtn.style.height = "1%";
ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
} else {
ExternalAppBtn.style.listStyleImage = "url(data:image/png;base64,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)";
ExternalAppBtn.style.width = "3%";
ExternalAppBtn.style.height = "1%";
ExternalAppBtn.style.backgroundSize = "cover"; // Sorgt dafür, dass das Bild die gesamte Fläche des Buttons einnimmt.
}
if (Appmenu.isUrlbar === 1) {
var navBar = document.getElementById("nav-bar-customization-target");
navBar.insertBefore(ExternalAppBtn, navBar.firstChild);
} else if (Appmenu.isUrlbar === 2) {
var menubar = document.getElementById("toolbar-menubar");
menubar.insertBefore(ExternalAppBtn, menubar.firstChild);
} else {
var TabsToolbar = document.getElementById("TabsToolbar");
TabsToolbar.insertBefore(ExternalAppBtn, TabsToolbar.firstChild);
}
var ExternalAppPopup = document.createElementNS(XULNS, 'menupopup');
ExternalAppPopup.setAttribute('id', 'AMpopup');
this._externalAppPopup = ExternalAppPopup;
ExternalAppBtn.appendChild(ExternalAppPopup);
Appmenu.onpopupshowing();
// Menü mit Tastaturkürzel öffnen
if (Appmenu.hotkey) {
let key = document.createXULElement('key');
key.id = 'key_AppMenuPopup';
key.setAttribute('key', Appmenu.hotkey);
if (Appmenu.hotkeyModifier)
key.setAttribute('modifiers', Appmenu.hotkeyModifier);
key.setAttribute('oncommand', 'document.getElementById("AMpopup").openPopup();');
document.getElementById('mainKeyset').appendChild(key);
}
},
onpopupshowing: function() {
if (this._isready)
return;
if (this._externalAppPopup === null)
return;
var ExternalAppPopup = this._externalAppPopup;
for (let subdir of this.toolbar.subdirs) {
if (subdir.name == 'separator') {
ExternalAppPopup.appendChild(document.createXULElement('menuseparator'));
} else {
var subdirItem = ExternalAppPopup.appendChild(document.createXULElement('menu'));
var subdirItemPopup = subdirItem.appendChild(document.createXULElement('menupopup'));
subdirItem.setAttribute('class', 'menu-iconic');
subdirItem.setAttribute('label', subdir.name);
subdirItem.setAttribute('image', subdir.image);
Appmenu.subdirPopupHash[subdir.name] = subdirItemPopup;
Appmenu.subdirMenuHash[subdir.name] = subdirItem;
}
}
for (let app of this.toolbar.apps) {
var appItem;
if (app.name == 'separator') {
appItem = document.createXULElement('menuseparator');
} else {
appItem = document.createXULElement('menuitem');
appItem.setAttribute('class', 'menuitem-iconic');
appItem.setAttribute('label', app.name);
appItem.setAttribute('image', app.image);
appItem.setAttribute('oncommand', "Appmenu.exec(this.path, this.args);");
appItem.setAttribute('tooltiptext', app.name);
appItem.path = app.path;
appItem.args = app.args;
}
if (app.subdir && Appmenu.subdirPopupHash[app.subdir])
Appmenu.subdirPopupHash[app.subdir].appendChild(appItem);
else ExternalAppPopup.appendChild(appItem);
}
for (let config of this.toolbar.configs) {
var configItem;
if (config.name == 'separator') {
configItem = document.createXULElement('menuseparator');
} else {
configItem = ExternalAppPopup.appendChild(document.createXULElement('menuitem'));
configItem.setAttribute('class', 'menuitem-iconic');
configItem.setAttribute('label', config.name);
configItem.setAttribute('image', config.image);
configItem.setAttribute('oncommand', config.command);
if (config.tooltiptext) {
configItem.setAttribute('tooltiptext', config.tooltiptext);
} else {
configItem.setAttribute('tooltiptext', config.name);
}
configItem.setAttribute('id', config.id);
}
if (config.subdir && Appmenu.subdirPopupHash[config.subdir]) {
Appmenu.subdirPopupHash[config.subdir].appendChild(configItem);
} else {
ExternalAppPopup.appendChild(configItem);
}
}
if (this.autohideEmptySubDirs) {
for (let i = 0; i < Appmenu.subdirPopupHash.length; i++) {
if (Appmenu.subdirPopupHash[i].hasChildNodes()) {
continue;
} else {
Appmenu.subdirMenuHash[i].setAttribute("hidden", "true");
}
}
}
if (this.moveSubDirstoBottom) {
let i = ExternalAppPopup.childNodes.length;
while (ExternalAppPopup.firstChild.getAttribute('class') != 'menuitem-iconic' && i-- != 0) {
ExternalAppPopup.appendChild(ExternalAppPopup.firstChild);
}
}
this._isready = true;
},
handleRelativePath: function(apps) {
for (let app of apps) {
if (app.path) {
app.path = app.path.replace(/\//g, '\\');
var ffdir = Cc['@mozilla.org/file/directory_service;1'].getService(Ci.nsIProperties).get(app.root, Ci.nsIFile).path;
if (/^(\\)/.test(app.path)) {
app.path = ffdir + app.path;
}
}
}
},
exec: function(path, args) {
args = args || [];
var args_t = args.slice(0);
for (let arg of args_t) {
arg = arg.replace(/%u/g, gBrowser.currentURI.spec);
}
var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
file.initWithPath(path);
if (!file.exists()) {
alert('Datei nicht gefunden: ' + path);
return;
}
if (file.isExecutable() && !path.endsWith('.js')) {
var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(file);
process.run(false, args_t, args_t.length);
} else if (file.isFile()) {
if (this.editor) {
let UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter);
UI.charset = window.navigator.platform.toLowerCase().includes('win') ? 'Shift_JIS' : 'UTF-8';
let path = UI.ConvertFromUnicode(file.path);
let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
app.initWithPath(this.editor);
let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(app);
process.run(false, [path], 1);
} else {
file.launch();
}
} else if (file.isDirectory()) {
if (this.fileManager) {
let args=[this.FMParameter,path];
let app = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
app.initWithPath(this.fileManager);
let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
process.init(app);
process.run(false, args, args.length);
} else {
file.launch();
}
}
},
};
if (window.gBrowser)
Appmenu.init();
Alles anzeigen