PHP Classes

File: public/js/lib/vue/src/batcher.js

Recommend this page to a friend!
  Classes of Sergey Beskorovayniy   Silex MVC Blog   public/js/lib/vue/src/batcher.js   Download  
File: public/js/lib/vue/src/batcher.js
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Silex MVC Blog
MVC based blog using on the Silex micro-framework
Author: By
Last change:
Date: 8 years ago
Size: 2,402 bytes
 

Contents

Class file image Download
import config from './config' import { warn, nextTick, devtools } from './util/index' // we have two separate queues: one for directive updates // and one for user watcher registered via $watch(). // we want to guarantee directive updates to be called // before user watchers so that when user watchers are // triggered, the DOM would have already been in updated // state. var queue = [] var userQueue = [] var has = {} var circular = {} var waiting = false /** * Reset the batcher's state. */ function resetBatcherState () { queue.length = 0 userQueue.length = 0 has = {} circular = {} waiting = false } /** * Flush both queues and run the watchers. */ function flushBatcherQueue () { runBatcherQueue(queue) runBatcherQueue(userQueue) // user watchers triggered more watchers, // keep flushing until it depletes if (queue.length) { return flushBatcherQueue() } // dev tool hook /* istanbul ignore if */ if (devtools && config.devtools) { devtools.emit('flush') } resetBatcherState() } /** * Run the watchers in a single queue. * * @param {Array} queue */ function runBatcherQueue (queue) { // do not cache length because more watchers might be pushed // as we run existing watchers for (let i = 0; i < queue.length; i++) { var watcher = queue[i] var id = watcher.id has[id] = null watcher.run() // in dev build, check and stop circular updates. if (process.env.NODE_ENV !== 'production' && has[id] != null) { circular[id] = (circular[id] || 0) + 1 if (circular[id] > config._maxUpdateCount) { warn( 'You may have an infinite update loop for watcher ' + 'with expression "' + watcher.expression + '"', watcher.vm ) break } } } queue.length = 0 } /** * Push a watcher into the watcher queue. * Jobs with duplicate IDs will be skipped unless it's * pushed when the queue is being flushed. * * @param {Watcher} watcher * properties: * - {Number} id * - {Function} run */ export function pushWatcher (watcher) { const id = watcher.id if (has[id] == null) { // push watcher into appropriate queue const q = watcher.user ? userQueue : queue has[id] = q.length q.push(watcher) // queue the flush if (!waiting) { waiting = true nextTick(flushBatcherQueue) } } }