var PLUGIN_INFO = xml` {NAME} Vimperator plugin for Greasemonkey teramako 0.6c 2.0pre 2.0pre https://github.com/vimpr/vimperator-plugins/raw/master/gmperator.js (: - filename : {String} - name : {String} - namespace : {String} - description: {String} - enabled : {Boolean} - includes : {String[]} - encludes : {String[]} ) ]]> `; (function(){ const Cc = Components.classes; const Ci = Components.interfaces; const gmID = '@greasemonkey.mozdev.org/greasemonkey-service;1'; if (!Cc[gmID]){ liberator.log('Greasemonkey is not installed',0); return; } liberator.plugins.gmperator = (function(){ //{{{ // ----------------------- // PUBLIC section // ----------------------- // {{{ var manager = { register: function (uri,sandbox,script){ var panelID = getPanelID(sandbox.window); if (!panelID) return; var gmCon; if (containers[panelID] && containers[panelID].uri == uri){ gmCon = containers[panelID]; } else { gmCon = new GmContainer(uri,sandbox); containers[panelID] = gmCon; this.__defineGetter__(panelID,function() gmCon); //liberator.log('gmpeartor: Registered: ' + panelID + ' - ' + uri,8); } gmCon.sandbox = sandbox; gmCon.addScript(script); gmCon.uri = uri; triggerGMEvent('GMInjectedScript',uri,script._filename); if (panelID == this.currentPanel){ triggerGMEvent('GMActiveScript',uri,script._filename); } }, get gmScripts() GM_getConfig().scripts, get allItem() containers, get currentPanel() getBrowser().mCurrentTab.linkedPanel, get currentContainer() containers[this.currentPanel] || null, get currentSandbox(){ var id = this.currentPanel; return containers[id] ? containers[id].sandbox : null; }, getSandboxFromWindow: function(win){ for each (let c in containers){ if (c.sandbox.window == win) return sandbox; } return null; }, getContainersFromURI: function(uri){ var list = []; for each (let c in containers){ if (c.uri == uri) list.push(c); } return list.length > 0 ? list : null; } }; // }}} // ----------------------- // PRIVATE section // ----------------------- // {{{ var containers = {}; var gmSvc = Cc[gmID].getService().wrappedJSObject; function appendCode(target,name,func){ var original = target[name]; target[name] = function(){ var tmp = original.apply(target,arguments); func.apply(this,arguments); return tmp; }; } appendCode(gmSvc,'evalInSandbox',function(code,uri,sandbox,script){ liberator.plugins.gmperator.register(uri,sandbox,script); }); function getPanelID(win){ var tabs = getBrowser().mTabs; for (let i=0,l=tabs.length; i; let tr; for each (let script in scripts){ tr = ; if (script.enabled){ tr.* += {script.name}; } else { tr.* += {script.name}; } tr.* += ({script._filename}); table.* += tr; } xml += table; } liberator.echo(xml,true); function scriptToString(script){ var table =
{script.name}
; [['FileName','_filename'],['NameSpace','namespace'],['Description','description'], ['Includes','includes'],['Excludes','excludes'],['Enabled','enabled']].forEach(function(prop){ let tr = {prop[0]} ; let contents = script[prop[1]]; if (typeof contents == 'string' || typeof contents == 'boolean'){ tr.* += {contents}; } else { let td = ; for (let i=0,l=contents.length; i; } tr.* += td; } table.* += tr; }); return table; } },{ bang:true } ); //}}} commands.addUserCommand(['gmlo[ad]'],'load Greasemonkey scripts', //{{{ function(args){ if (!args.string){ liberator.echoerr('Usage: :gmlo[ad][!] {name|filename}'); return; } var scripts = GM_getConfig().scripts; var script; for (let i=0,l=scripts.length; i