(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i startsWith if(eventHandlerInterceptor){propValue=eventHandlerInterceptor(propName,propValue,domNode,properties);// intercept eventhandlers }if(propName==="oninput"){/* tslint:disable no-this-keyword no-invalid-this only-arrow-functions no-void-expression */(function(){// record the evt.target.value, because IE and Edge sometimes do a requestAnimationFrame between changing value and running oninput var oldPropValue=propValue;propValue=function(evt){oldPropValue.apply(this,[evt]);evt.target["oninput-value"]=evt.target.value;// may be HTMLTextAreaElement as well }})();/* tslint:enable */}domNode[propName]=propValue}}else if(projectionOptions.namespace===NAMESPACE_SVG){if(propName==="href"){domNode.setAttributeNS(NAMESPACE_XLINK,propName,propValue)}else{// all SVG attributes are read-only in DOM, so... domNode.setAttribute(propName,propValue)}}else if(type==="string"&&propName!=="value"&&propName!=="innerHTML"){domNode.setAttribute(propName,propValue)}else{domNode[propName]=propValue}}};for(var i=0;i. if(vnode.text){domNode.textContent=vnode.text}setProperties(domNode,vnode.properties,projectionOptions);if(vnode.properties&&vnode.properties.afterCreate){vnode.properties.afterCreate.apply(vnode.properties.bind||vnode.properties,[domNode,projectionOptions,vnode.vnodeSelector,vnode.properties,vnode.children])}};var createDom=function(vnode,parentNode,insertBefore,projectionOptions){var domNode;var start=0;var vnodeSelector=vnode.vnodeSelector;var doc=parentNode.ownerDocument;if(vnodeSelector===""){domNode=vnode.domNode=doc.createTextNode(vnode.text);if(insertBefore!==undefined){parentNode.insertBefore(domNode,insertBefore)}else{parentNode.appendChild(domNode)}}else{for(var i=0;i<=vnodeSelector.length;++i){var c=vnodeSelector.charAt(i);if(i===vnodeSelector.length||c==="."||c==="#"){var type=vnodeSelector.charAt(start-1);var found=vnodeSelector.slice(start,i);if(type==="."){domNode.classList.add(found)}else if(type==="#"){domNode.id=found}else{if(found==="svg"){projectionOptions=extend(projectionOptions,{namespace:NAMESPACE_SVG})}if(projectionOptions.namespace!==undefined){domNode=vnode.domNode=doc.createElementNS(projectionOptions.namespace,found)}else{domNode=vnode.domNode=vnode.domNode||doc.createElement(found);if(found==="input"&&vnode.properties&&vnode.properties.type!==undefined){// IE8 and older don't support setting input type after the DOM Node has been added to the document domNode.setAttribute("type",vnode.properties.type)}}if(insertBefore!==undefined){parentNode.insertBefore(domNode,insertBefore)}else if(domNode.parentNode!==parentNode){parentNode.appendChild(domNode)}}start=i+1}}initPropertiesAndChildren(domNode,vnode,projectionOptions)}};var updateDom;/** * Adds or removes classes from an Element * @param domNode the element * @param classes a string separated list of classes * @param on true means add classes, false means remove */var toggleClasses=function(domNode,classes,on){if(!classes){return}classes.split(" ").forEach(function(classToToggle){if(classToToggle){domNode.classList.toggle(classToToggle,on)}})};var updateProperties=function(domNode,previousProperties,properties,projectionOptions){if(!properties){return}var propertiesUpdated=false;var propNames=Object.keys(properties);var propCount=propNames.length;for(var i=0;i=0){// Remove preceding missing children for(i=oldIndex;ioldIndex){// Remove child fragments for(i=oldIndex;i The type of the value that is cached. */var createCache=function(){var cachedInputs;var cachedOutcome;return{invalidate:function(){cachedOutcome=undefined;cachedInputs=undefined},result:function(inputs,calculation){if(cachedInputs){for(var i=0;i The type of source items. A database-record for instance. * @param The type of target items. A [[MaquetteComponent]] for instance. * @param getSourceKey `function(source)` that must return a key to identify each source object. The result must either be a string or a number. * @param createResult `function(source, index)` that must create a new result object from a given source. This function is identical * to the `callback` argument in `Array.map(callback)`. * @param updateResult `function(source, target, index)` that updates a result to an updated source. */var createMapping=function(getSourceKey,createResult,updateResult){var keys=[];var results=[];return{results:results,map:function(newSources){var newKeys=newSources.map(getSourceKey);var oldTargets=results.slice();var oldIndex=0;for(var i=0;i