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 = ;
[['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