34 lines
1 KiB
VimL
34 lines
1 KiB
VimL
"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
|
|
|
|
function! s:Notifier.NotifyListeners(event, path, nerdtree, params)
|
|
let event = g:NERDTreeEvent.New(a:nerdtree, a:path, a:event, a:params)
|
|
|
|
for listener in s:Notifier.GetListenersForEvent(a:event)
|
|
call {listener}(event)
|
|
endfor
|
|
endfunction
|
|
|
|
function! s:Notifier.GetListenersMap()
|
|
if !exists("s:refreshListenersMap")
|
|
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)
|