bindify

Bindify-JS
git clone http://git.code.weiherhei.de/bindify.git
Log | Files | Refs | README

bindify.min.js (2349B)


      1 (function($){$.fn.bindify=function(data={},options={}){let settings=$.extend({prefix:'binding',updateModel:!0,updateDOM:!0,updateCallback:$.Callbacks(),debug:!1,updateEvent:'input',onUpdate:function(data){},},options);let el=this;let updateDOM=function(){setTimeout(function(){bind(el,data)},0)}
      2     settings.updateCallback.add(updateDOM);let prefix=settings.prefix+'-';if(settings.updateModel)
      3         $(el).find('[data-'+prefix+'value]').each(function(){$(this).off(settings.updateEvent);$(this).on(settings.updateEvent,function(){if(settings.debug)
      4             console.log("Input event fired: "+this.value);assign(data,$(this).data(prefix+'value'),this.value);settings.onUpdate(data);settings.updateCallback.fire()})});let assign=function(obj,prop,value){if(typeof prop==="string")
      5         prop=prop.split(".");if(prop.length>1){var e=prop.shift();assign(obj[e]=Object.prototype.toString.call(obj[e])==="[object Object]"?obj[e]:{},prop,value)}else obj[prop[0]]=value}
      6     let getData=function(key,data){function index(obj,i){return obj[i]}
      7         return key.split('.').reduce(index,data)}
      8     let bind=function(element,data){let dataValue=element.data(prefix+'value');if(dataValue){element.val(getData(dataValue,data))}
      9         let dataText=element.data(prefix+'text');if(dataText)
     10             element.text(getData(dataText,data));let dataAttributes=element.data(prefix+'attributes');if(dataAttributes){Object.keys(dataAttributes).forEach(function(key){element.attr(key,getData(dataAttributes[key],data))},this)}
     11         let dataList=element.data(prefix+'list');if(dataList){let eachData=getData(dataList,data);let children=$(element).children();let firstChild=children.first();let isLength=children.length;let shouldLength=eachData.length;if(isLength>0)
     12         {for(let i=isLength+1;i<=shouldLength;i++)
     13             firstChild.clone().appendTo(element);for(let i=shouldLength+1;i<=isLength;i++)
     14             element.children().last().remove();let key=dataList;let dataVar=element.data(prefix+'var');if(dataVar)
     15             key=dataVar;for(let i=0;i<eachData.length;i++){let childData={};childData[key]=eachData[i];let computedDataForChild=Object.assign({},data,childData);bind(children.eq(i),computedDataForChild)}}}
     16         else{$(element).children().each(function(){bind($(this),data)})}};settings.updateCallback.fire();return this}}(jQuery))