ttrss/js/PluginHost.js

64 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2013-04-24 17:51:57 +02:00
// based on http://www.velvetcache.org/2010/08/19/a-simple-javascript-hooks-system
/* exported PluginHost */
const PluginHost = {
2013-04-24 17:51:57 +02:00
HOOK_ARTICLE_RENDERED: 1,
HOOK_ARTICLE_RENDERED_CDM: 2,
HOOK_ARTICLE_SET_ACTIVE: 3,
HOOK_FEED_SET_ACTIVE: 4,
HOOK_FEED_LOADED: 5,
2013-04-25 08:09:40 +02:00
HOOK_ARTICLE_EXPANDED: 6,
HOOK_ARTICLE_COLLAPSED: 7,
HOOK_PARAMS_LOADED: 8,
HOOK_RUNTIME_INFO_LOADED: 9,
2013-06-28 06:30:35 +02:00
HOOK_FLOATING_TITLE: 10,
HOOK_INIT_COMPLETE: 11,
2018-12-08 18:08:57 +01:00
HOOK_HEADLINE_RENDERED: 12,
HOOK_COUNTERS_RECEIVED: 13,
HOOK_COUNTERS_PROCESSED: 14,
HOOK_HEADLINE_MUTATIONS: 15,
HOOK_HEADLINE_MUTATIONS_SYNCED: 16,
HOOK_HEADLINES_RENDERED: 17,
2021-03-12 10:29:26 +01:00
HOOK_HEADLINES_SCROLL_HANDLER: 18,
HOOK_HEADLINE_TOOLBAR_SELECT_MENU_ITEM2: 19,
2013-04-24 17:51:57 +02:00
hooks: [],
register: function (name, callback) {
if (typeof(this.hooks[name]) == 'undefined')
this.hooks[name] = [];
this.hooks[name].push(callback);
},
run: function (name, args) {
//console.warn('PluginHost.run', name);
2013-04-24 17:51:57 +02:00
if (typeof(this.hooks[name]) != 'undefined')
for (let i = 0; i < this.hooks[name].length; i++) {
this.hooks[name][i](args);
}
2019-05-07 16:34:15 +02:00
},
run_until: function (name, check, ...args) {
//console.warn('PluginHost.run_until', name, check, args);
if (typeof(this.hooks[name]) != 'undefined')
for (let i = 0; i < this.hooks[name].length; i++) {
if (this.hooks[name][i](args) == check)
return true;
}
return false;
},
2019-05-07 16:34:15 +02:00
unregister: function (name, callback) {
for (let i = 0; i < this.hooks[name].length; i++)
2019-05-07 16:34:15 +02:00
if (this.hooks[name][i] == callback)
this.hooks[name].splice(i, 1);
2013-04-24 17:51:57 +02:00
}
};
/* PluginHost.register(PluginHost.HOOK_ARTICLE_RENDERED,
function (args) { console.log('ARTICLE_RENDERED: ' + args); return true; });
PluginHost.register(PluginHost.HOOK_ARTICLE_RENDERED_CDM,
function (args) { console.log('ARTICLE_RENDERED_CDM: ' + args); return true; }); */