MCPcopy
hub / github.com/fanmingming/live / mergeVNodeHook

Function mergeVNodeHook

m3u8/vue.js:2235–2266  ·  view source on GitHub ↗
(def, hookKey, hook)

Source from the content-addressed store, hash-verified

2233 /* */
2234
2235 function mergeVNodeHook (def, hookKey, hook) {
2236 if (def instanceof VNode) {
2237 def = def.data.hook || (def.data.hook = {});
2238 }
2239 var invoker;
2240 var oldHook = def[hookKey];
2241
2242 function wrappedHook () {
2243 hook.apply(this, arguments);
2244 // important: remove merged hook to ensure it's called only once
2245 // and prevent memory leak
2246 remove(invoker.fns, wrappedHook);
2247 }
2248
2249 if (isUndef(oldHook)) {
2250 // no existing hook
2251 invoker = createFnInvoker([wrappedHook]);
2252 } else {
2253 /* istanbul ignore if */
2254 if (isDef(oldHook.fns) && isTrue(oldHook.merged)) {
2255 // already a merged invoker
2256 invoker = oldHook;
2257 invoker.fns.push(wrappedHook);
2258 } else {
2259 // existing plain hook
2260 invoker = createFnInvoker([oldHook, wrappedHook]);
2261 }
2262 }
2263
2264 invoker.merged = true;
2265 def[hookKey] = invoker;
2266 }
2267
2268 /* */
2269

Callers 3

_updateFunction · 0.85
enterFunction · 0.85
vue.jsFile · 0.85

Calls 4

isUndefFunction · 0.85
createFnInvokerFunction · 0.85
isDefFunction · 0.85
isTrueFunction · 0.85

Tested by

no test coverage detected