Ihr kennt alle die Ext's BBcode und Signature...
Es ist machbar, beide zu kombinieren - ist eine Spielerei von mir.
Ursprung ist bbcode 0.1.2 und Signature 0.1
Es geht um dieses Script:
window.addEventListener("load",sig_windowLoad,true);
//add listener to generate the menu
function sig_windowLoad(){
document.getElementById("contentAreaContextMenu")
.addEventListener("popupshowing",sig_menuPopup,false);
}
//this is the function that does the menu generation
function sig_menuPopup() {
/*
* I think this was taken from BBCode extension,
* http://www.jedbrown.net/
* cheers man :D
*/
// only do this if it's on a text field
var cm = gContextMenu;
document.getElementById("signature-menu").hidden = !cm.onTextInput;
//generate the menu.
if (cm.onTextInput){
sig_setMenu();
}
}
//sets the menu to the current preferences.
function sig_setMenu(){
var cm = gContextMenu;
//get the template item
var menu_template = document.getElementById("sig_menu_item_template");
//empty the list of all previous menu items
var menu= menu_template.parentNode;
var children = menu.childNodes;
var temp;
for(var i=0; i< children.length-3; i++){ //last 3=template, seperator, edit
menu.removeChild( children.item(i));
}
//get the preferences
var prefservice =
Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefService);
var prefs = prefservice.getBranch("");
//defaults if they don't exist
var n = "";
var s = "";
if (prefs.prefHasUserValue("signature.names")){
n = prefs.getCharPref("signature.names");
s = prefs.getCharPref("signature.signatures");
}
//split the string into an array of signatures.
var names= n.split("`");
var signatures= s.split("`");
var len = names.length;
for(var i= 0; i<len; i++){
var new_item = menu_template.cloneNode(true);
new_item.hidden= false;
new_item.label= names[i];
new_item.value= signatures[i];
menu.insertBefore(new_item, menu_template);
}
}
/*
* this was taken from BBCode extension,
* http://www.jedbrown.net/
* cheers man :D
*/
function sig_menu_insert(text){
try {
var command = "cmd_insertText";
var controller =
document.commandDispatcher.getControllerForCommand(command);
if (controller && controller.isCommandEnabled(command)) {
controller =
controller.QueryInterface(
Components.interfaces.nsICommandController
);
var params =
Components.classes["@mozilla.org/embedcomp/command-params;1"];
params =
params.createInstance(Components.interfaces.nsICommandParams);
params.setStringValue("state_data", text);
controller.doCommandWithParams(command, params);
}
}catch (e) {
dump("Can't do cmd_insertText! ");
dump(e+"\n");
}
}
Alles anzeigen
und dieses Overlay:
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://bbcode/skin/bbcode.css" type="text/css"?>
<overlay id="bbcodeOverlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://bbcode/content/bbcode.js"/>
<popup id="contentAreaContextMenu">
<menu id="context-bbcode" position="3" label="BB-Code" class="menuitem-iconic menu-iconic icon-bbcode16" accesskey="B" >
<menu id="signature-menu" label="Signatur einfügen" accesskey="S">
<menupopup >
<menuitem id="sig_menu_item_template" label="Versteckt" hidden="true" value="static" oncommand="sig_menu_insert(event.target.value);"/>
<menuseparator/>
<menuitem id="sig_options" label="Signaturen bearbeiten" oncommand="window.openDialog('chrome://bbcode/content/options.xul','','chrome,all,dependent');"/>
</menupopup>
</menu>
</popup>
</overlay>
Alles anzeigen
In den Optionen ist noch alles klar, wird angezeigt, editiert blubb.
Lediglich im Kontextmenü ist es gähnend leer, ich kann dort nur die Optionen aufrufen.
Ich vermute, dass das JS mit der Struktur des bbcode-Menüs nicht
konform geht und daher den richtigen Einsprung nicht findet (also
leer bleibt) - das Sig-Menü steht ja jetzt eine Hierarchie weiter "unten"
(in bbcode ja jetzt):
alt (bzw getrennte exts)
- bbcode
- signature
|- sig1 (usw)
|- Optionen
neu
- bbcode
|- signature
. |- (leer)
. |- Optionen
Verschiedene Versuche mit den Overlay/JS sind gescheitert.
Wer kann mir helfen, ich bin JS Laie - danke !