all files / src/ render-queue.js

95.65% Statements 22/23
83.33% Branches 10/12
100% Functions 3/3
100% Lines 19/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43    11× 11× 11×   11×   11×   11×   11×   11×         11×     18×   18×     34×   18×       18× 18×   18× 18×      
'use strict';
 
exports.__esModule = true;
exports.enqueueRender = enqueueRender;
exports.rerender = rerender;
 
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
 
var _options = require('./options');
 
var _options2 = _interopRequireDefault(_options);
 
var _util = require('./util');
 
var _vdomComponent = require('./vdom/component');
 
/** Managed queue of dirty components to be re-rendered */
 
// items/itemsOffline swap on each rerender() call (just a simple pool technique)
var items = [],
    itemsOffline = [];
 
function enqueueRender(component) {
	Iif (items.push(component) !== 1) return;
 
	(_options2['default'].debounceRendering || _util.setImmediate)(rerender);
}
 
function rerender() {
	if (!items.length) return;
 
	var currentItems = items,
	    p = undefined;
 
	// swap online & offline
	items = itemsOffline;
	itemsOffline = currentItems;
 
	while (p = currentItems.pop()) {
		if (p._dirty) _vdomComponent.renderComponent(p);
	}
}