File: //home/arjun/projects/buyercall/node_modules/vuelidate/lib/vval.js
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.h = h;
exports.patchChildren = patchChildren;
function isUndef(v) {
return v === null || v === undefined;
}
function isDef(v) {
return v !== null && v !== undefined;
}
function sameVval(oldVval, vval) {
return vval.tag === oldVval.tag && vval.key === oldVval.key;
}
function createVm(vval) {
var Vm = vval.tag;
vval.vm = new Vm({
data: vval.args
});
}
function updateVval(vval) {
var keys = Object.keys(vval.args);
for (var i = 0; i < keys.length; i++) {
keys.forEach(function (k) {
vval.vm[k] = vval.args[k];
});
}
}
function createKeyToOldIdx(children, beginIdx, endIdx) {
var i, key;
var map = {};
for (i = beginIdx; i <= endIdx; ++i) {
key = children[i].key;
if (isDef(key)) map[key] = i;
}
return map;
}
function updateChildren(oldCh, newCh) {
var oldStartIdx = 0;
var newStartIdx = 0;
var oldEndIdx = oldCh.length - 1;
var oldStartVval = oldCh[0];
var oldEndVval = oldCh[oldEndIdx];
var newEndIdx = newCh.length - 1;
var newStartVval = newCh[0];
var newEndVval = newCh[newEndIdx];
var oldKeyToIdx, idxInOld, elmToMove;
while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {
if (isUndef(oldStartVval)) {
oldStartVval = oldCh[++oldStartIdx];
} else if (isUndef(oldEndVval)) {
oldEndVval = oldCh[--oldEndIdx];
} else if (sameVval(oldStartVval, newStartVval)) {
patchVval(oldStartVval, newStartVval);
oldStartVval = oldCh[++oldStartIdx];
newStartVval = newCh[++newStartIdx];
} else if (sameVval(oldEndVval, newEndVval)) {
patchVval(oldEndVval, newEndVval);
oldEndVval = oldCh[--oldEndIdx];
newEndVval = newCh[--newEndIdx];
} else if (sameVval(oldStartVval, newEndVval)) {
patchVval(oldStartVval, newEndVval);
oldStartVval = oldCh[++oldStartIdx];
newEndVval = newCh[--newEndIdx];
} else if (sameVval(oldEndVval, newStartVval)) {
patchVval(oldEndVval, newStartVval);
oldEndVval = oldCh[--oldEndIdx];
newStartVval = newCh[++newStartIdx];
} else {
if (isUndef(oldKeyToIdx)) oldKeyToIdx = createKeyToOldIdx(oldCh, oldStartIdx, oldEndIdx);
idxInOld = isDef(newStartVval.key) ? oldKeyToIdx[newStartVval.key] : null;
if (isUndef(idxInOld)) {
createVm(newStartVval);
newStartVval = newCh[++newStartIdx];
} else {
elmToMove = oldCh[idxInOld];
if (sameVval(elmToMove, newStartVval)) {
patchVval(elmToMove, newStartVval);
oldCh[idxInOld] = undefined;
newStartVval = newCh[++newStartIdx];
} else {
createVm(newStartVval);
newStartVval = newCh[++newStartIdx];
}
}
}
}
if (oldStartIdx > oldEndIdx) {
addVvals(newCh, newStartIdx, newEndIdx);
} else if (newStartIdx > newEndIdx) {
removeVvals(oldCh, oldStartIdx, oldEndIdx);
}
}
function addVvals(vvals, startIdx, endIdx) {
for (; startIdx <= endIdx; ++startIdx) {
createVm(vvals[startIdx]);
}
}
function removeVvals(vvals, startIdx, endIdx) {
for (; startIdx <= endIdx; ++startIdx) {
var ch = vvals[startIdx];
if (isDef(ch)) {
ch.vm.$destroy();
ch.vm = null;
}
}
}
function patchVval(oldVval, vval) {
if (oldVval === vval) {
return;
}
vval.vm = oldVval.vm;
updateVval(vval);
}
function patchChildren(oldCh, ch) {
if (isDef(oldCh) && isDef(ch)) {
if (oldCh !== ch) updateChildren(oldCh, ch);
} else if (isDef(ch)) {
addVvals(ch, 0, ch.length - 1);
} else if (isDef(oldCh)) {
removeVvals(oldCh, 0, oldCh.length - 1);
}
}
function h(tag, key, args) {
return {
tag: tag,
key: key,
args: args
};
}