diff --git a/view/js/addon-hooks.js b/view/js/addon-hooks.js
new file mode 100644
index 0000000000..b00285cb3a
--- /dev/null
+++ b/view/js/addon-hooks.js
@@ -0,0 +1,12 @@
+var addon_hooks={};
+
+function Addon_registerHook( type, hookfnstr )
+{
+ if (!addon_hooks.hasOwnProperty(type)) {
+ addon_hooks[type]=[];
+ }
+
+ addon_hooks[type].push( hookfnstr );
+
+ console.log("addon_hooks type "+type+" has "+addon_hooks[type].length+" hooks registered");
+}
diff --git a/view/js/main.js b/view/js/main.js
index 475e810870..f0bab12806 100644
--- a/view/js/main.js
+++ b/view/js/main.js
@@ -395,6 +395,19 @@ function NavUpdate() {
timer = setTimeout(NavUpdate, updateInterval);
}
+function callAddonHooks(typeOfHook) {
+ if (typeof addon_hooks !== 'undefined') {
+ var myTypeOfHooks = addon_hooks[typeOfHook];
+ if (typeof myTypeOfHooks !== 'undefined') {
+ for (addon_hook_idx = 0; addon_hook_idx < myTypeOfHooks.length; addon_hook_idx++) {
+ var hookfnstr = myTypeOfHooks[addon_hook_idx];
+ var hookfn = window[hookfnstr];
+ if (typeof hookfn === "function") hookfn();
+ }
+ }
+ }
+}
+
function liveUpdate(src) {
if ((src == null) || stopped || !profile_uid) {
$('.like-rotator').hide(); return;
@@ -460,6 +473,8 @@ function liveUpdate(src) {
prev = ident;
});
+ callAddonHooks("postprocess");
+
$('.like-rotator').hide();
if (commentBusy) {
commentBusy = false;
@@ -469,7 +484,9 @@ function liveUpdate(src) {
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl");
/* autocomplete bbcode */
$(".comment-edit-form textarea").bbco_autocomplete('bbcode');
+
});
+
}
function imgbright(node) {
diff --git a/view/templates/head.tpl b/view/templates/head.tpl
index c58b2b8290..75a676a91e 100644
--- a/view/templates/head.tpl
+++ b/view/templates/head.tpl
@@ -44,6 +44,10 @@
+
+{{foreach $addon_hooks as $addon_hook}}
+
+{{/foreach}}