From: Hypolite Petovan Date: Thu, 20 Sep 2018 02:51:51 +0000 (-0400) Subject: Rewrite JS hooks X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=7dd6fb3b3c65ffee02e37419b2feed044d52e5aa;p=friendica.git Rewrite JS hooks - Use event listeners instead of homebrew hooks - Remove view/js/addon-hooks.js and its references - Update Addon docs --- diff --git a/doc/Addons.md b/doc/Addons.md index 2465db7307..ec413c6ac8 100644 --- a/doc/Addons.md +++ b/doc/Addons.md @@ -103,19 +103,11 @@ function _template_vars($a, &$arr) Register your addon hooks in file `addon/*addon_name*/*addon_name*.js`. ```js -Addon_registerHook(type, hookfnstr); +document.addEventListener(name, callback); ``` -*type* is the name of the hook and corresponds to a known Friendica JavaScript hook. -*hookfnstr* is the name of your JavaScript function to execute. - -No arguments are provided to your JavaScript callback function. Example: - -```javascript -function myhook_function() { - -} -``` +*name* is the name of the hook and corresponds to a known Friendica JavaScript hook. +*callback* is a JavaScript function to execute. ## Modules @@ -704,4 +696,4 @@ Here is a complete list of all hook callbacks with file locations (as of 01-Apr- ### view/js/main.js - callAddonHooks("postprocess_liveupdate"); + document.dispatchEvent(new Event('postprocess_liveupdate')); diff --git a/view/js/addon-hooks.js b/view/js/addon-hooks.js deleted file mode 100644 index 3e1cb4849e..0000000000 --- a/view/js/addon-hooks.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @file addon-hooks.js - * @brief Provide a way for add-ons to register a JavaScript hook - */ - -var addon_hooks = {}; - -/** - * @brief Register a JavaScript hook to be called from other Javascript files - * @pre the .js file from which the hook will be called is included in the document response - * @param type which type of hook i.e. where should it be called along with other hooks of the same type - * @param hookfnstr name of the JavaScript function name that needs to be called - */ -function Addon_registerHook(type, hookfnstr) -{ - if (!addon_hooks.hasOwnProperty(type)) { - addon_hooks[type] = []; - } - - addon_hooks[type].push(hookfnstr); -} - -/** - * @brief Call all registered hooks of a certain type, i.e. at the same point of the JavaScript code execution - * @param typeOfHook string indicating which type of hooks to be called among the registered hooks - */ -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(); - } - } - } - } -} diff --git a/view/js/main.js b/view/js/main.js index 4788d90a83..ae9cb23d8e 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -478,14 +478,12 @@ function liveUpdate(src) { $('.wall-item-body', data).imagesLoaded(function() { updateConvItems(data); + document.dispatchEvent(new Event('postprocess_liveupdate')); + // Update the scroll position. $(window).scrollTop($(window).scrollTop() + $("section").height() - orgHeight); }); - - callAddonHooks("postprocess_liveupdate"); - }); - } function imgbright(node) { @@ -735,6 +733,8 @@ function loadScrollContent() { } else { $("#scroll-end").fadeIn('normal'); } + + document.dispatchEvent(new Event('postprocess_liveupdate')); }); } diff --git a/view/templates/head.tpl b/view/templates/head.tpl index aadbfcd8ee..eef985bc6f 100644 --- a/view/templates/head.tpl +++ b/view/templates/head.tpl @@ -45,7 +45,6 @@ - {{if is_array($addon_hooks)}} {{foreach $addon_hooks as $addon_hook}} diff --git a/view/theme/frio/templates/head.tpl b/view/theme/frio/templates/head.tpl index 7d6cadea94..0cc5bf4af8 100644 --- a/view/theme/frio/templates/head.tpl +++ b/view/theme/frio/templates/head.tpl @@ -69,7 +69,6 @@ - {{if is_array($addon_hooks)}} {{foreach $addon_hooks as $addon_hook}}