Some checks failed
Detach Plugins / check (FlyGrep.vim) (push) Has been cancelled
Detach Plugins / check (GitHub.vim) (push) Has been cancelled
Detach Plugins / check (JavaUnit.vim) (push) Has been cancelled
Detach Plugins / check (SourceCounter.vim) (push) Has been cancelled
Detach Plugins / check (cpicker.nvim) (push) Has been cancelled
Detach Plugins / check (dein-ui.vim) (push) Has been cancelled
Detach Plugins / check (git.vim) (push) Has been cancelled
Detach Plugins / check (iedit.vim) (push) Has been cancelled
Detach Plugins / check (scrollbar.vim) (push) Has been cancelled
Detach Plugins / check (vim-chat) (push) Has been cancelled
Detach Plugins / check (vim-cheat) (push) Has been cancelled
Detach Plugins / check (vim-todo) (push) Has been cancelled
Detach Plugins / check (xmake.vim) (push) Has been cancelled
test / Linux (nvim, nightly) (push) Has been cancelled
test / Linux (nvim, v0.3.8) (push) Has been cancelled
test / Linux (nvim, v0.4.0) (push) Has been cancelled
test / Linux (nvim, v0.4.2) (push) Has been cancelled
test / Linux (nvim, v0.4.3) (push) Has been cancelled
test / Linux (nvim, v0.4.4) (push) Has been cancelled
test / Linux (nvim, v0.5.0) (push) Has been cancelled
test / Linux (nvim, v0.5.1) (push) Has been cancelled
test / Linux (nvim, v0.6.0) (push) Has been cancelled
test / Linux (nvim, v0.6.1) (push) Has been cancelled
test / Linux (nvim, v0.7.0) (push) Has been cancelled
test / Linux (nvim, v0.7.2) (push) Has been cancelled
test / Linux (nvim, v0.8.0) (push) Has been cancelled
test / Linux (nvim, v0.8.1) (push) Has been cancelled
test / Linux (nvim, v0.8.2) (push) Has been cancelled
test / Linux (nvim, v0.8.3) (push) Has been cancelled
test / Linux (nvim, v0.9.0) (push) Has been cancelled
test / Linux (nvim, v0.9.1) (push) Has been cancelled
test / Linux (true, vim, v7.4.052) (push) Has been cancelled
test / Linux (true, vim, v7.4.1689) (push) Has been cancelled
test / Linux (true, vim, v7.4.629) (push) Has been cancelled
test / Linux (true, vim, v8.0.0027) (push) Has been cancelled
test / Linux (true, vim, v8.0.0183) (push) Has been cancelled
test / Linux (vim, nightly) (push) Has been cancelled
test / Linux (vim, v8.0.0184) (push) Has been cancelled
test / Linux (vim, v8.0.1453) (push) Has been cancelled
test / Linux (vim, v8.1.2269) (push) Has been cancelled
test / Linux (vim, v8.2.2434) (push) Has been cancelled
test / Linux (vim, v8.2.3995) (push) Has been cancelled
test / Windows (nvim, nightly) (push) Has been cancelled
test / Windows (nvim, v0.3.8) (push) Has been cancelled
test / Windows (nvim, v0.4.2) (push) Has been cancelled
test / Windows (nvim, v0.4.3) (push) Has been cancelled
test / Windows (nvim, v0.4.4) (push) Has been cancelled
test / Windows (nvim, v0.5.0) (push) Has been cancelled
test / Windows (nvim, v0.5.1) (push) Has been cancelled
test / Windows (nvim, v0.6.0) (push) Has been cancelled
test / Windows (nvim, v0.6.1) (push) Has been cancelled
test / Windows (nvim, v0.7.0) (push) Has been cancelled
test / Windows (nvim, v0.7.2) (push) Has been cancelled
test / Windows (nvim, v0.8.0) (push) Has been cancelled
test / Windows (nvim, v0.8.1) (push) Has been cancelled
test / Windows (nvim, v0.8.2) (push) Has been cancelled
test / Windows (nvim, v0.8.3) (push) Has been cancelled
test / Windows (nvim, v0.9.0) (push) Has been cancelled
test / Windows (nvim, v0.9.1) (push) Has been cancelled
test / Windows (vim, nightly) (push) Has been cancelled
test / Windows (vim, v7.4.1185) (push) Has been cancelled
test / Windows (vim, v7.4.1689) (push) Has been cancelled
test / Windows (vim, v8.0.0027) (push) Has been cancelled
test / Windows (vim, v8.0.1453) (push) Has been cancelled
test / Windows (vim, v8.1.2269) (push) Has been cancelled
test / Windows (vim, v8.2.2434) (push) Has been cancelled
test / Windows (vim, v8.2.3995) (push) Has been cancelled
docker / docker (push) Has been cancelled
mirror / check (coding) (push) Has been cancelled
mirror / check (gitee) (push) Has been cancelled
mirror / check (gitlab) (push) Has been cancelled
79 lines
2.4 KiB
VimL
79 lines
2.4 KiB
VimL
" ___vital___
|
|
" NOTE: lines between '" ___vital___' is generated by :Vitalize.
|
|
" Do not modify the code nor insert new lines before '" ___vital___'
|
|
function! s:_SID() abort
|
|
return matchstr(expand('<sfile>'), '<SNR>\zs\d\+\ze__SID$')
|
|
endfunction
|
|
execute join(['function! vital#_gina#App#Emitter#import() abort', printf("return map({'subscribe': '', 'unsubscribe': '', 'emit': '', 'add_middleware': '', 'remove_middleware': ''}, \"vital#_gina#function('<SNR>%s_' . v:key)\")", s:_SID()), 'endfunction'], "\n")
|
|
delfunction s:_SID
|
|
" ___vital___
|
|
let s:listeners = {}
|
|
let s:middlewares = []
|
|
|
|
function! s:subscribe(name, listener, ...) abort
|
|
let dict = get(a:000, 0, v:null)
|
|
let s:listeners[a:name] = get(s:listeners, a:name, [])
|
|
call add(s:listeners[a:name], [a:listener, dict])
|
|
endfunction
|
|
|
|
function! s:unsubscribe(...) abort
|
|
if a:0 == 0
|
|
let s:listeners = {}
|
|
elseif a:0 == 1
|
|
let s:listeners[a:1] = []
|
|
else
|
|
let dict = a:0 == 3 ? a:3 : v:null
|
|
let s:listeners[a:1] = get(s:listeners, a:1, [])
|
|
let index = index(s:listeners[a:1], [a:2, dict])
|
|
if index != -1
|
|
call remove(s:listeners[a:1], index)
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
function! s:add_middleware(middleware) abort
|
|
call add(s:middlewares, a:middleware)
|
|
endfunction
|
|
|
|
function! s:remove_middleware(...) abort
|
|
if a:0 == 0
|
|
let s:middlewares = []
|
|
else
|
|
let index = index(s:middlewares, a:1)
|
|
if index != -1
|
|
call remove(s:middlewares, index)
|
|
endif
|
|
endif
|
|
endfunction
|
|
|
|
function! s:emit(name, ...) abort
|
|
let attrs = copy(a:000)
|
|
let listeners = copy(get(s:listeners, a:name, []))
|
|
let middlewares = map(s:middlewares, 'extend(copy(s:middleware), v:val)')
|
|
for middleware in middlewares
|
|
call call(middleware.on_emit_pre, [a:name, listeners, attrs], middleware)
|
|
endfor
|
|
for [l:Listener, dict] in listeners
|
|
if empty(dict)
|
|
call call(Listener, attrs)
|
|
else
|
|
call call(Listener, attrs, dict)
|
|
endif
|
|
endfor
|
|
for middleware in middlewares
|
|
call call(middleware.on_emit_post, [a:name, listeners, attrs], middleware)
|
|
endfor
|
|
endfunction
|
|
|
|
|
|
" Middleware skeleton --------------------------------------------------------
|
|
let s:middleware = {}
|
|
|
|
function! s:middleware.on_emit_pre(name, listeners, attrs) abort
|
|
" Users can override this method
|
|
endfunction
|
|
|
|
function! s:middleware.on_emit_post(name, listeners, attrs) abort
|
|
" Users can override this method
|
|
endfunction
|