1- import { noop } from '../util/core' ;
1+ import { isFn , noop } from '../util/core' ;
22
33/** @typedef {import('../Docsify').Constructor } Constructor */
44
@@ -27,24 +27,49 @@ export function Lifecycle(Base) {
2727 } ) ;
2828 }
2929
30- callHook ( hookName , data , next = noop ) {
30+ callHook ( hookName , data , next = noop , registeredPluginHooks = [ ] ) {
31+ // let myPredictor = (meta)=>{
32+ // return true;
33+ // }
34+
35+ // let myWorker = (ctx, number) => {
36+ // console.log(`Current ctx is ${ctx}`)
37+ // console.log(`Current number is ${number}`)
38+ // }
39+ // registeredPluginHooks.push({predicator:myPredictor, operator:myWorker})
40+
3141 const queue = this . _hooks [ hookName ] ;
3242 const catchPluginErrors = this . config . catchPluginErrors ;
3343
3444 const step = function ( index ) {
3545 const hookFn = queue [ index ] ;
36-
46+ let matchedPluginHooks = [ ] ;
3747 if ( index >= queue . length ) {
3848 next ( data ) ;
3949 } else if ( typeof hookFn === 'function' ) {
4050 const errTitle = 'Docsify plugin error' ;
51+ // find all matched pluginHook
52+
53+ if ( hookFn . enableDocsifyPluginHook ) {
54+ registeredPluginHooks . forEach ( registeredPluginHook => {
55+ const pluginMeta = hookFn . pluginMeta || { } ;
56+ const hookPredicator = registeredPluginHook . predicator ;
57+ isFn ( hookPredicator ) &&
58+ hookPredicator ( pluginMeta ) &&
59+ matchedPluginHooks . push ( registeredPluginHook . operator ) ;
60+ } ) ;
61+ }
4162
4263 if ( hookFn . length === 2 ) {
4364 try {
44- hookFn ( data , result => {
45- data = result ;
46- step ( index + 1 ) ;
47- } ) ;
65+ hookFn (
66+ data ,
67+ result => {
68+ data = result ;
69+ step ( index + 1 ) ;
70+ } ,
71+ matchedPluginHooks
72+ ) ;
4873 } catch ( err ) {
4974 if ( catchPluginErrors ) {
5075 console . error ( errTitle , err ) ;
@@ -56,7 +81,7 @@ export function Lifecycle(Base) {
5681 }
5782 } else {
5883 try {
59- const result = hookFn ( data ) ;
84+ const result = hookFn ( data , matchedPluginHooks ) ;
6085
6186 data = result === undefined ? data : result ;
6287 step ( index + 1 ) ;
0 commit comments