Greasemonkey Context Menu

By Erik Vold Uploaded Nov 17, 2009
jetpack.future.import("menu");
function init(){
	jetpack.menu.context.page.remove("User Script Commands...");
	var win = Components.classes["@mozilla.org/appshell/window-mediator;1"]
				.getService(Components.interfaces.nsIWindowMediator)
				.getMostRecentWindow("navigator:browser");
	var commands = [],
		suggestions = [],
		menuitems = jQuery(win.document).find('#userscript-commands-sb > menupopup > menuitem').get();
	for (var i = 0; i < menuitems.length; i++) {
		var cmd = menuitems[i];
		commands[cmd.getAttribute('label')] = cmd;
	}
	for (var cmd in commands) suggestions.push(cmd);
	jetpack.menu.context.page.add(function(target)({
		label: "User Script Commands...",
		mnemonic: "C",
		icon: "chrome://greasemonkey/content/icon_small.png",
		menu: new jetpack.Menu( suggestions ),
		command: function(menuitem){
			var doc = target.document;
			var win = target.window;
			var inputString=win.getSelection().toString();
			var script = doc.createElement("script");
			script.innerHTML = "ubiquityGMInput=(<><![CDATA["+inputString+"]]></>).toString()";
			doc.body.appendChild( script );

			if ( commands[menuitem.label]._commandFuncWithString ) commands[menuitem.label]._commandFuncWithString( inputString );
			else commands[menuitem.label]._commandFunc( inputString );
		}
	}));
}
jetpack.tabs.onFocus(init);
jetpack.tabs.onReady(init);