Merge pull request #5179 from abanink/5118
5118 Create Javascript hook mechanism
This commit is contained in:
commit
97e95473a1
4 changed files with 89 additions and 10 deletions
|
@ -25,22 +25,24 @@ Addons should contain a comment block with the four following parameters:
|
||||||
* Author: John Q. Public <john@myfriendicasite.com>
|
* Author: John Q. Public <john@myfriendicasite.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Please also add a README or README.md file to the addon directory.
|
||||||
|
It will be displayed in the admin panel and should include some further information in addition to the header information.
|
||||||
|
|
||||||
|
PHP addon hooks
|
||||||
|
---
|
||||||
|
|
||||||
Register your addon hooks during installation.
|
Register your addon hooks during installation.
|
||||||
|
|
||||||
Addon::registerHook($hookname, $file, $function);
|
Addon::registerHook($hookname, $file, $function);
|
||||||
|
|
||||||
$hookname is a string and corresponds to a known Friendica hook.
|
$hookname is a string and corresponds to a known Friendica PHP hook.
|
||||||
|
|
||||||
$file is a pathname relative to the top-level Friendica directory.
|
$file is a pathname relative to the top-level Friendica directory.
|
||||||
This *should* be 'addon/addon_name/addon_name.php' in most cases.
|
This *should* be 'addon/*addon_name*/*addon_name*.php' in most cases.
|
||||||
|
|
||||||
$function is a string and is the name of the function which will be executed when the hook is called.
|
$function is a string and is the name of the function which will be executed when the hook is called.
|
||||||
|
|
||||||
Please also add a README or README.md file to the addon directory.
|
#### Arguments
|
||||||
It will be displayed in the admin panel and should include some further information in addition to the header information.
|
|
||||||
|
|
||||||
Arguments
|
|
||||||
---
|
|
||||||
Your hook callback functions will be called with at least one and possibly two arguments
|
Your hook callback functions will be called with at least one and possibly two arguments
|
||||||
|
|
||||||
function myhook_function(App $a, &$b) {
|
function myhook_function(App $a, &$b) {
|
||||||
|
@ -50,7 +52,7 @@ Your hook callback functions will be called with at least one and possibly two a
|
||||||
|
|
||||||
If you wish to make changes to the calling data, you must declare them as reference variables (with '&') during function declaration.
|
If you wish to make changes to the calling data, you must declare them as reference variables (with '&') during function declaration.
|
||||||
|
|
||||||
#### $a
|
##### $a
|
||||||
$a is the Friendica 'App' class.
|
$a is the Friendica 'App' class.
|
||||||
It contains a wealth of information about the current state of Friendica:
|
It contains a wealth of information about the current state of Friendica:
|
||||||
|
|
||||||
|
@ -61,11 +63,27 @@ It contains a wealth of information about the current state of Friendica:
|
||||||
|
|
||||||
It is recommeded you call this '$a' to match its usage elsewhere.
|
It is recommeded you call this '$a' to match its usage elsewhere.
|
||||||
|
|
||||||
#### $b
|
##### $b
|
||||||
$b can be called anything you like.
|
$b can be called anything you like.
|
||||||
This is information specific to the hook currently being processed, and generally contains information that is being immediately processed or acted on that you can use, display, or alter.
|
This is information specific to the hook currently being processed, and generally contains information that is being immediately processed or acted on that you can use, display, or alter.
|
||||||
Remember to declare it with '&' if you wish to alter it.
|
Remember to declare it with '&' if you wish to alter it.
|
||||||
|
|
||||||
|
JavaScript addon hooks
|
||||||
|
---
|
||||||
|
|
||||||
|
Register your addon hooks in file 'addon/*addon_name*/*addon_name*.js'.
|
||||||
|
|
||||||
|
Addon_registerHook(type,hookfnstr);
|
||||||
|
|
||||||
|
*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:
|
||||||
|
|
||||||
|
function myhook_function() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
Modules
|
Modules
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -106,7 +124,7 @@ In your code, like in the function addon_name_content(), load the template file
|
||||||
|
|
||||||
See also the wiki page [Quick Template Guide](https://github.com/friendica/friendica/wiki/Quick-Template-Guide).
|
See also the wiki page [Quick Template Guide](https://github.com/friendica/friendica/wiki/Quick-Template-Guide).
|
||||||
|
|
||||||
Current hooks
|
Current PHP hooks
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
### 'authenticate'
|
### 'authenticate'
|
||||||
|
@ -316,6 +334,12 @@ Hook data:
|
||||||
'item' => item array (input)
|
'item' => item array (input)
|
||||||
'html' => converted item body (input/output)
|
'html' => converted item body (input/output)
|
||||||
|
|
||||||
|
Current JavaScript hooks
|
||||||
|
-------------
|
||||||
|
|
||||||
|
### 'postprocess_liveupdate'
|
||||||
|
Called at the end of the live update process (XmlHttpRequest)
|
||||||
|
|
||||||
Complete list of hook callbacks
|
Complete list of hook callbacks
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -618,3 +642,7 @@ Here is a complete list of all hook callbacks with file locations (as of 01-Apr-
|
||||||
|
|
||||||
Addon::callHooks('atom_feed_end', $atom);
|
Addon::callHooks('atom_feed_end', $atom);
|
||||||
Addon::callHooks('atom_feed_end', $atom);
|
Addon::callHooks('atom_feed_end', $atom);
|
||||||
|
|
||||||
|
### view/js/main.js
|
||||||
|
|
||||||
|
callAddonHooks("postprocess_liveupdate");
|
41
view/js/addon-hooks.js
Normal file
41
view/js/addon-hooks.js
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
/**
|
||||||
|
* @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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -460,6 +460,8 @@ function liveUpdate(src) {
|
||||||
prev = ident;
|
prev = ident;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
callAddonHooks("postprocess_liveupdate");
|
||||||
|
|
||||||
$('.like-rotator').hide();
|
$('.like-rotator').hide();
|
||||||
if (commentBusy) {
|
if (commentBusy) {
|
||||||
commentBusy = false;
|
commentBusy = false;
|
||||||
|
@ -469,7 +471,9 @@ function liveUpdate(src) {
|
||||||
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl");
|
$(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl");
|
||||||
/* autocomplete bbcode */
|
/* autocomplete bbcode */
|
||||||
$(".comment-edit-form textarea").bbco_autocomplete('bbcode');
|
$(".comment-edit-form textarea").bbco_autocomplete('bbcode');
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function imgbright(node) {
|
function imgbright(node) {
|
||||||
|
|
|
@ -44,6 +44,12 @@
|
||||||
<script type="text/javascript" src="view/asset/perfect-scrollbar/js/perfect-scrollbar.jquery.min.js" ></script>
|
<script type="text/javascript" src="view/asset/perfect-scrollbar/js/perfect-scrollbar.jquery.min.js" ></script>
|
||||||
<script type="text/javascript" src="view/js/acl.js" ></script>
|
<script type="text/javascript" src="view/js/acl.js" ></script>
|
||||||
<script type="text/javascript" src="view/asset/base64/base64.min.js" ></script>
|
<script type="text/javascript" src="view/asset/base64/base64.min.js" ></script>
|
||||||
|
<script type="text/javascript" src="view/js/addon-hooks.js" ></script>
|
||||||
|
{{if is_array($addon_hooks)}}
|
||||||
|
{{foreach $addon_hooks as $addon_hook}}
|
||||||
|
<script type="text/javascript" src="addon/{{$addon_hook}}/{{$addon_hook}}.js"></script>
|
||||||
|
{{/foreach}}
|
||||||
|
{{/if}}
|
||||||
<script type="text/javascript" src="view/js/main.js" ></script>
|
<script type="text/javascript" src="view/js/main.js" ></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue