var PLUGIN_INFO =
{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 homepage="http://zeromemory.sblo.jp/">suVene</author>
<version>0.1.2</version>
<license>MIT</license>
<minVersion>2.0pre</minVersion>
<maxVersion>2.0pre</maxVersion>
<updateURL>http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk/notifier/subject_hatelabo_bottle.js</updateURL>
</VimperatorPlugin>;
//}}}
(function() {
var notifier = liberator.plugins.notifier;
if (!notifier) return;
var libly = notifier.libly;
var $U = libly.$U;
var logger = $U.getLogger('subject_hatelabo_bottle');
var URL = 'http://bottle.hatelabo.jp';
notifier.subject.register(notifier.SubjectHttp, {
interval: 60,
options: {
url: URL,
headers: null,
extra: null
},
parse: function(res) {
// if (this.count == 0) return []; // for debug
var doc = res.getHTMLDocument('id("body")//div[contains(concat(" ", @class, " "), " entry ")]');
return doc;
},
diff: function(cache, parsed)
parsed.filter(function(element)
!cache.some(function(c) c.textContent == element.textContent)),
buildMessages: function(diff) {
return diff.map($U.bind(this, function(d) {
var permalink = $U.getFirstNodeFromXPath('descendant::a[@class="hatena-star-uri"]', d);
if (permalink)
permalink = URL + permalink;
return new notifier.Message('Hatelabo bottle', $U.xmlSerialize(d), permalink)
}));
}
});
})();
// vim: set fdm=marker sw=4 ts=4 sts=0 et:
.name,s.description]);
candidates.push([s._filename,s.description]);
}
}
} else {
for each (let s in scripts){
if (isAll || s._filename.indexOf(filter) == 0)
{
candidates.push([s._filename,s.description]);
}
}
}
return [0,candidates];
} //}}}
})();
// vim: fdm=marker sw=4 ts=4 et: