2014-08-03 18:02:51 -04:00
|
|
|
"CLASS: Notifier
|
|
|
|
"============================================================
|
|
|
|
let s:Notifier = {}
|
|
|
|
|
|
|
|
function! s:Notifier.AddListener(event, funcname)
|
|
|
|
let listeners = s:Notifier.GetListenersForEvent(a:event)
|
|
|
|
if listeners == []
|
|
|
|
let listenersMap = s:Notifier.GetListenersMap()
|
|
|
|
let listenersMap[a:event] = listeners
|
|
|
|
endif
|
|
|
|
call add(listeners, a:funcname)
|
|
|
|
endfunction
|
|
|
|
|
2015-12-08 08:20:04 -05:00
|
|
|
function! s:Notifier.NotifyListeners(event, path, nerdtree, params)
|
|
|
|
let event = g:NERDTreeEvent.New(a:nerdtree, a:path, a:event, a:params)
|
2014-08-03 18:02:51 -04:00
|
|
|
|
2019-12-30 08:28:38 -05:00
|
|
|
for Listener in s:Notifier.GetListenersForEvent(a:event)
|
2020-01-07 07:45:07 -05:00
|
|
|
let Callback = type(Listener) == type(function('tr')) ? Listener : function(Listener)
|
2019-12-30 08:28:38 -05:00
|
|
|
call Callback(event)
|
2014-08-03 18:02:51 -04:00
|
|
|
endfor
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! s:Notifier.GetListenersMap()
|
2020-01-07 07:45:07 -05:00
|
|
|
if !exists('s:refreshListenersMap')
|
2014-08-03 18:02:51 -04:00
|
|
|
let s:refreshListenersMap = {}
|
|
|
|
endif
|
|
|
|
return s:refreshListenersMap
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
function! s:Notifier.GetListenersForEvent(name)
|
|
|
|
let listenersMap = s:Notifier.GetListenersMap()
|
|
|
|
return get(listenersMap, a:name, [])
|
|
|
|
endfunction
|
|
|
|
|
|
|
|
let g:NERDTreePathNotifier = deepcopy(s:Notifier)
|