a-template
Advanced tools
Comparing version 0.0.18 to 0.0.19
@@ -19,2 +19,2 @@ /** | ||
var dataType=settings.dataType,hasPlaceholder=/=\?/.test(settings.url);if(dataType=="jsonp"||hasPlaceholder){if(!hasPlaceholder)settings.url=appendQuery(settings.url,"callback=?");return $.ajaxJSONP(settings)}var mime=settings.accepts[dataType],baseHeaders={},protocol=/^([\w-]+:)\/\//.test(settings.url)?RegExp.$1:window.location.protocol,xhr=settings.xhr(),abortTimeout;if(!settings.crossDomain)baseHeaders["X-Requested-With"]="XMLHttpRequest";if(mime){baseHeaders["Accept"]=mime;if(mime.indexOf(",")>-1)mime=mime.split(",",2)[0];xhr.overrideMimeType&&xhr.overrideMimeType(mime)}if(settings.contentType||settings.contentType!==false&&settings.data&&settings.type.toUpperCase()!="GET")baseHeaders["Content-Type"]=settings.contentType||"application/x-www-form-urlencoded";settings.headers=$.extend(baseHeaders,settings.headers||{});xhr.onreadystatechange=function(){if(xhr.readyState==4){xhr.onreadystatechange=empty;clearTimeout(abortTimeout);var result,error=false;if(xhr.status>=200&&xhr.status<300||xhr.status==304||xhr.status==0&&protocol=="file:"){dataType=dataType||mimeToDataType(xhr.getResponseHeader("content-type"));result=xhr.responseText;try{if(dataType=="script")(1,eval)(result);else if(dataType=="xml")result=xhr.responseXML;else if(dataType=="json")result=blankRE.test(result)?null:$.parseJSON(result)}catch(e){error=e}if(error)ajaxError(error,"parsererror",xhr,settings);else ajaxSuccess(result,xhr,settings)}else{ajaxError(null,xhr.status?"error":"abort",xhr,settings)}}};var async="async"in settings?settings.async:true;xhr.open(settings.type,settings.url,async);for(name in settings.headers)xhr.setRequestHeader(name,settings.headers[name]);if(ajaxBeforeSend(xhr,settings)===false){xhr.abort();return false}if(settings.timeout>0)abortTimeout=setTimeout(function(){xhr.onreadystatechange=empty;xhr.abort();ajaxError(null,"timeout",xhr,settings)},settings.timeout);xhr.send(settings.data?settings.data:null);return xhr};function parseArguments(url,data,success,dataType){var hasData=!$.isFunction(data);return{url:url,data:hasData?data:undefined,success:!hasData?data:$.isFunction(success)?success:undefined,dataType:hasData?dataType||success:success}}$.get=function(url,data,success,dataType){return $.ajax(parseArguments.apply(null,arguments))};$.post=function(url,data,success,dataType){var options=parseArguments.apply(null,arguments);options.type="POST";return $.ajax(options)};$.getJSON=function(url,data,success){var options=parseArguments.apply(null,arguments);options.dataType="json";return $.ajax(options)};$.fn.load=function(url,data,success){if(!this.length)return this;var self=this,parts=url.split(/\s/),selector,options=parseArguments(url,data,success),callback=options.success;if(parts.length>1)options.url=parts[0],selector=parts[1];options.success=function(response){self.html(selector?$("<div>").html(response.replace(rscript,"")).find(selector):response);callback&&callback.apply(self,arguments)};$.ajax(options);return this};var escape=encodeURIComponent;function serialize(params,obj,traditional,scope){var type,array=$.isArray(obj);$.each(obj,function(key,value){type=$.type(value);if(scope)key=traditional?scope:scope+"["+(array?"":key)+"]";if(!scope&&array)params.add(value.name,value.value);else if(type=="array"||!traditional&&type=="object")serialize(params,value,traditional,key);else params.add(key,value)})}$.param=function(obj,traditional){var params=[];params.add=function(k,v){this.push(escape(k)+"="+escape(v))};serialize(params,obj,traditional);return params.join("&").replace(/%20/g,"+")}})(Zepto);(function($){$.fn.serializeArray=function(){var result=[],el;$(Array.prototype.slice.call(this.get(0).elements)).each(function(){el=$(this);var type=el.attr("type");if(this.nodeName.toLowerCase()!="fieldset"&&!this.disabled&&type!="submit"&&type!="reset"&&type!="button"&&(type!="radio"&&type!="checkbox"||this.checked))result.push({name:el.attr("name"),value:el.val()})});return result};$.fn.serialize=function(){var result=[];this.serializeArray().forEach(function(elm){result.push(encodeURIComponent(elm.name)+"="+encodeURIComponent(elm.value))});return result.join("&")};$.fn.submit=function(callback){if(callback)this.bind("submit",callback);else if(this.length){var event=$.Event("submit");this.eq(0).trigger(event);if(!event.defaultPrevented)this.get(0).submit()}return this}})(Zepto);(function($,undefined){var prefix="",eventPrefix,endEventName,endAnimationName,vendors={Webkit:"webkit",Moz:"",O:"o",ms:"MS"},document=window.document,testEl=document.createElement("div"),supportedTransforms=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,transform,transitionProperty,transitionDuration,transitionTiming,animationName,animationDuration,animationTiming,cssReset={};function dasherize(str){return downcase(str.replace(/([a-z])([A-Z])/,"$1-$2"))}function downcase(str){return str.toLowerCase()}function normalizeEvent(name){return eventPrefix?eventPrefix+name:downcase(name)}$.each(vendors,function(vendor,event){if(testEl.style[vendor+"TransitionProperty"]!==undefined){prefix="-"+downcase(vendor)+"-";eventPrefix=event;return false}});transform=prefix+"transform";cssReset[transitionProperty=prefix+"transition-property"]=cssReset[transitionDuration=prefix+"transition-duration"]=cssReset[transitionTiming=prefix+"transition-timing-function"]=cssReset[animationName=prefix+"animation-name"]=cssReset[animationDuration=prefix+"animation-duration"]=cssReset[animationTiming=prefix+"animation-timing-function"]="";$.fx={off:eventPrefix===undefined&&testEl.style.transitionProperty===undefined,speeds:{_default:400,fast:200,slow:600},cssPrefix:prefix,transitionEnd:normalizeEvent("TransitionEnd"),animationEnd:normalizeEvent("AnimationEnd")};$.fn.animate=function(properties,duration,ease,callback){if($.isPlainObject(duration))ease=duration.easing,callback=duration.complete,duration=duration.duration;if(duration)duration=(typeof duration=="number"?duration:$.fx.speeds[duration]||$.fx.speeds._default)/1e3;return this.anim(properties,duration,ease,callback)};$.fn.anim=function(properties,duration,ease,callback){var key,cssValues={},cssProperties,transforms="",that=this,wrappedCallback,endEvent=$.fx.transitionEnd;if(duration===undefined)duration=.4;if($.fx.off)duration=0;if(typeof properties=="string"){cssValues[animationName]=properties;cssValues[animationDuration]=duration+"s";cssValues[animationTiming]=ease||"linear";endEvent=$.fx.animationEnd}else{cssProperties=[];for(key in properties)if(supportedTransforms.test(key))transforms+=key+"("+properties[key]+") ";else cssValues[key]=properties[key],cssProperties.push(dasherize(key));if(transforms)cssValues[transform]=transforms,cssProperties.push(transform);if(duration>0&&typeof properties==="object"){cssValues[transitionProperty]=cssProperties.join(", ");cssValues[transitionDuration]=duration+"s";cssValues[transitionTiming]=ease||"linear"}}wrappedCallback=function(event){if(typeof event!=="undefined"){if(event.target!==event.currentTarget)return;$(event.target).unbind(endEvent,wrappedCallback)}$(this).css(cssReset);callback&&callback.call(this)};if(duration>0)this.bind(endEvent,wrappedCallback);this.size()&&this.get(0).clientLeft;this.css(cssValues);if(duration<=0)setTimeout(function(){that.each(function(){wrappedCallback.call(this)})},0);return this};testEl=null})(Zepto)},{}],2:[function(require,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var $=require("zepto-browserify").$;var objs=[];var eventType="input paste click change keydown contextmenu mouseup mousedown mousemove touchstart touchend touchmove compositionstart compositionend";var dataAction=eventType.replace(/([a-z]+)/g,"[data-action-$1],")+"[data-action]";var getObjectById=function getObjectById(id){for(var i=0,n=objs.length;i<n;i++){var obj=objs[i];var templates=obj.templates;for(var t=0,m=templates.length;t<m;t++){if(templates[t]==id){return obj}}}return null};if(typeof jQuery!=="undefined"){$=jQuery}if(typeof document!=="undefined"){$(document).on("input change click","[data-bind]",function(e){var data=$(this).data("bind");var val=$(this).val();var attr=$(this).attr("href");if(attr){val=attr.replace("#","")}var id=$(this).parents("[data-id]").data("id");if(id){var obj=getObjectById(id);if($(e.target).attr("type")=="radio"){if($(this).is(":checked")){obj.updateDataByString(data,val)}else{obj.updateDataByString(data,"")}}else if($(e.target).attr("type")=="checkbox"){(function(){var arr=[];$('[data-bind="'+data+'"]').each(function(){if($(this).is(":checked")){arr.push($(this).val())}});obj.updateDataByString(data,arr)})()}else{obj.updateDataByString(data,val)}}});$(document).on(eventType,dataAction,function(e){if(e.type=="click"&&$(e.target).is("select")){return}if(e.type=="input"&&$(e.target).attr("type")=="button"){return}var events=eventType.split(" ");var $self=$(this);var action="action";events.forEach(function(event){if($self.data("action-"+event)){if(e.type===event){action+="-"+event}}});var string=$self.data(action);if(!string){return}var method=string.replace(/\(.*?\);?/,"");var parameter=string.replace(/(.*?)\((.*?)\);?/,"$2");var pts=parameter.split(",");var id=$self.parents("[data-id]").data("id");if(id){var obj=getObjectById(id);obj.e=e;if(obj.method&&obj.method[method]){obj.method[method].apply(obj,pts)}else if(obj[method]){obj[method].apply(obj,pts)}}})}var aTemplate=function(){function aTemplate(opt){_classCallCheck(this,aTemplate);objs.push(this);for(var i in opt){this[i]=opt[i]}if(!this.data){this.data={}}this.setId()}_createClass(aTemplate,[{key:"addTemplate",value:function addTemplate(template,id){$("body").append("<script type='text/template' id='"+id+"'>"+template+"</script>");if(!this.templates){this.templates=[]}this.templates.push(id)}},{key:"loadHtml",value:function loadHtml(){var templates=this.templates;var promises=[];templates.forEach(function(template){var d=new $.Deferred;promises.push(d);var src=$("#"+template).attr("src");$.ajax({url:src,type:"GET",dataType:"text"}).success(function(data){$("#"+template).html(data);d.resolve()})});return $.when.apply($,promises)}},{key:"getData",value:function getData(){return JSON.parse(JSON.stringify(this.data))}},{key:"saveData",value:function saveData(key){var data=JSON.stringify(this.data);localStorage.setItem(key,data)}},{key:"setData",value:function setData(val){for(var i in val){if(typeof val[i]!=="function"){this.data[i]=val[i]}}}},{key:"loadData",value:function loadData(key){var data=JSON.parse(localStorage.getItem(key));if(data){for(var i in data){if(typeof data[i]!=="function"){this.data[i]=data[i]}}}}},{key:"getRand",value:function getRand(a,b){return~~(Math.random()*(b-a+1))+a}},{key:"getRandText",value:function getRandText(limit){var ret="";var strings="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";var length=strings.length;for(var i=0;i<limit;i++){ret+=strings.charAt(Math.floor(this.getRand(0,length)))}return ret}},{key:"setId",value:function setId(){var text=void 0;var ids=aTemplate.ids;var flag=false;while(1){text=this.getRandText(10);for(var i=0,n=aTemplate.ids;i<n;i++){if(aTemplate.ids[i]===text){flag=true}}if(flag===false){break}}this.data.aTemplate_id=text}},{key:"getDataFromObj",value:function getDataFromObj(s,o){s=s.replace(/\[([a-zA-Z0-9._-]+)\]/g,".$1");s=s.replace(/^\./,"");var a=s.split(".");while(a.length){var n=a.shift();if(n in o){o=o[n]}else{return}}return o}},{key:"getDataByString",value:function getDataByString(s){var o=this.data;return this.getDataFromObj(s,o)}},{key:"updateDataByString",value:function updateDataByString(path,newValue){var object=this.data;var stack=path.split(".");while(stack.length>1){object=object[stack.shift()]}object[stack.shift()]=newValue}},{key:"removeDataByString",value:function removeDataByString(path){var object=this.data;var stack=path.split(".");while(stack.length>1){object=object[stack.shift()]}var shift=stack.shift();if(shift.match(/^\d+$/)){object.splice(Number(shift),1)}else{delete object[shift]}}},{key:"resolveBlock",value:function resolveBlock(html,item,i){var that=this;var touchs=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+) -->/g);var touchnots=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+) -->/g);var exists=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):exist -->/g);var empties=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):empty -->/g);if(touchs){for(var k=0,n=touchs.length;k<n;k++){var start=touchs[k];start=start.replace(/([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+)/,"($1):touch#($2)");var end=start.replace(/BEGIN/,"END");var reg=new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g");html=html.replace(reg,function(m,key2,val,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(itemkey==val){return next}else{return""}})}}if(touchnots){for(var _k=0,_n=touchnots.length;_k<_n;_k++){var _start=touchnots[_k];_start=_start.replace(/([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+)/,"($1):touchnot#($2)");var _end=_start.replace(/BEGIN/,"END");var _reg=new RegExp(_start+"(([\\n\\r\\t]|.)*?)"+_end,"g");html=html.replace(_reg,function(m,key2,val,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(itemkey!=val){return next}else{return""}})}}if(exists){for(var _k2=0,_n2=exists.length;_k2<_n2;_k2++){var _start2=exists[_k2];_start2=_start2.replace(/([a-zA-Z0-9._-]+):exist/,"($1):exist");var _end2=_start2.replace(/BEGIN/,"END");var _reg2=new RegExp(_start2+"(([\\n\\r\\t]|.)*?)"+_end2,"g");html=html.replace(_reg2,function(m,key2,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(itemkey){return next}else{return""}})}}if(empties){for(var _k3=0,_n3=empties.length;_k3<_n3;_k3++){var _start3=empties[_k3];_start3=_start3.replace(/([a-zA-Z0-9._-]+):empty/,"($1):empty");var _end3=_start3.replace(/BEGIN/,"END");var empty=new RegExp(_start3+"(([\\n\\r\\t]|.)*?)"+_end3,"g");html=html.replace(empty,function(m,key2,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(!itemkey){return next}else{return""}})}}html=html.replace(/{([a-zA-Z0-9._-]+)}(\[([a-zA-Z0-9._-]+)\])*/g,function(n,key3,key4,converter){var data=void 0;if(key3=="i"){data=i}else{if(item[key3]){if(typeof item[key3]==="function"){data=item[key3].apply(that)}else{data=item[key3]}}else{if(converter&&that.convert&&that.convert[converter]){return that.convert[converter].call(that,"")}else{return""}}}if(converter&&that.convert&&that.convert[converter]){return that.convert[converter].call(that,data)}else{return data}});return html}},{key:"resolveAbsBlock",value:function resolveAbsBlock(html){var that=this;html=html.replace(/{(.*?)}/g,function(n,key3){var data=that.getDataByString(key3);if(typeof data!=="undefined"){if(typeof data==="function"){return data.apply(that)}else{return data}}else{return n}});return html}},{key:"resolveInclude",value:function resolveInclude(html){var include=/<!-- #include id="(.*?)" -->/g;html=html.replace(include,function(m,key){return $("#"+key).html()});return html}},{key:"resolveWith",value:function resolveWith(html){var width=/<!-- BEGIN ([a-zA-Z0-9._-]+):with -->(([\n\r\t]|.)*?)<!-- END ([a-zA-Z0-9._-]+):with -->/g;html=html.replace(width,function(m,key,val){m=m.replace(/data\-bind=['"](.*?)['"]/g,"data-bind='"+key+".$1'");return m});return html}},{key:"resolveLoop",value:function resolveLoop(html){var loop=/<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g;var that=this;html=html.replace(loop,function(m,key,val){var keyItem=that.getDataByString(key);var keys=[];if(typeof keyItem==="function"){keys=keyItem.apply(that)}else{keys=keyItem}var ret="";if(keys instanceof Array){for(var i=0,n=keys.length;i<n;i++){ret+=that.resolveBlock(val,keys[i],i)}}ret=ret.replace(/\\([^\\])/g,"$1");return ret});return html}},{key:"removeData",value:function removeData(arr){var data=this.data;for(var i in data){for(var t=0,n=arr.length;t<n;t++){if(i===arr[t]){delete data[i]}}}return this}},{key:"hasLoop",value:function hasLoop(txt){var loop=/<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g;if(txt.match(loop)){return true}else{return false}}},{key:"getHtml",value:function getHtml(selector,row){var $template=$(selector);var html=$template.html();if(row){html=selector}if(!html){return""}var data=this.data;html=this.resolveInclude(html);html=this.resolveWith(html);while(this.hasLoop(html)){html=this.resolveLoop(html)}html=this.resolveBlock(html,data);html=html.replace(/\\([^\\])/g,"$1");html=this.resolveAbsBlock(html);return html.replace(/^([\t ])*\n/gm,"")}},{key:"update",value:function update(txt,part){var html=this.getHtml();var templates=this.templates;var renderWay=txt||"html";if(this.beforeUpdated){this.beforeUpdated()}for(var i=0,n=templates.length;i<n;i++){var tem=templates[i];var selector="#"+tem;var _html=this.getHtml(selector);var $target=$("[data-id='"+tem+"']");if(!part||part==tem){if($target.length==0){var $newitem=$("<div data-id='"+tem+"'></div>");$newitem[renderWay](_html);$(selector).after($newitem)}else{$target[renderWay](_html)}if(part){break}}}this.updateBindingData(part);if(this.onUpdated){this.onUpdated(part)}return this}},{key:"updateBindingData",value:function updateBindingData(part){var that=this;var templates=that.templates;for(var i=0,n=templates.length;i<n;i++){var temp=templates[i];if(!part||part==temp){var $template=$("[data-id='"+temp+"']");$template.find("[data-bind]").each(function(){var data=that.getDataByString($(this).data("bind"));if($(this).attr("type")=="checkbox"||$(this).attr("type")=="radio"){if(data==$(this).val()){$(this).prop("checked",true)}}else{$(this).val(data)}});if(part){break}}}return this}},{key:"copyToClipBoard",value:function copyToClipBoard(){var copyArea=$("<textarea/>");$("body").append(copyArea);copyArea.text(this.getHtml());copyArea.select();document.execCommand("copy");copyArea.remove();return this}},{key:"applyMethod",value:function applyMethod(method){var args=[].splice.call(arguments,0);args.shift();return this.method[method].apply(this,args)}},{key:"getComputedProp",value:function getComputedProp(prop){return this.data[prop].apply(this)}},{key:"remove",value:function remove(path){var object=this.data;var stack=path.split(".");while(stack.length>1){object=object[stack.shift()]}var shift=stack.shift();if(shift.match(/^\d+$/)){object.splice(Number(shift),1)}else{delete object[shift]}return this}}]);return aTemplate}();module.exports=aTemplate},{"zepto-browserify":1}]},{},[2])(2)}); | ||
var dataType=settings.dataType,hasPlaceholder=/=\?/.test(settings.url);if(dataType=="jsonp"||hasPlaceholder){if(!hasPlaceholder)settings.url=appendQuery(settings.url,"callback=?");return $.ajaxJSONP(settings)}var mime=settings.accepts[dataType],baseHeaders={},protocol=/^([\w-]+:)\/\//.test(settings.url)?RegExp.$1:window.location.protocol,xhr=settings.xhr(),abortTimeout;if(!settings.crossDomain)baseHeaders["X-Requested-With"]="XMLHttpRequest";if(mime){baseHeaders["Accept"]=mime;if(mime.indexOf(",")>-1)mime=mime.split(",",2)[0];xhr.overrideMimeType&&xhr.overrideMimeType(mime)}if(settings.contentType||settings.contentType!==false&&settings.data&&settings.type.toUpperCase()!="GET")baseHeaders["Content-Type"]=settings.contentType||"application/x-www-form-urlencoded";settings.headers=$.extend(baseHeaders,settings.headers||{});xhr.onreadystatechange=function(){if(xhr.readyState==4){xhr.onreadystatechange=empty;clearTimeout(abortTimeout);var result,error=false;if(xhr.status>=200&&xhr.status<300||xhr.status==304||xhr.status==0&&protocol=="file:"){dataType=dataType||mimeToDataType(xhr.getResponseHeader("content-type"));result=xhr.responseText;try{if(dataType=="script")(1,eval)(result);else if(dataType=="xml")result=xhr.responseXML;else if(dataType=="json")result=blankRE.test(result)?null:$.parseJSON(result)}catch(e){error=e}if(error)ajaxError(error,"parsererror",xhr,settings);else ajaxSuccess(result,xhr,settings)}else{ajaxError(null,xhr.status?"error":"abort",xhr,settings)}}};var async="async"in settings?settings.async:true;xhr.open(settings.type,settings.url,async);for(name in settings.headers)xhr.setRequestHeader(name,settings.headers[name]);if(ajaxBeforeSend(xhr,settings)===false){xhr.abort();return false}if(settings.timeout>0)abortTimeout=setTimeout(function(){xhr.onreadystatechange=empty;xhr.abort();ajaxError(null,"timeout",xhr,settings)},settings.timeout);xhr.send(settings.data?settings.data:null);return xhr};function parseArguments(url,data,success,dataType){var hasData=!$.isFunction(data);return{url:url,data:hasData?data:undefined,success:!hasData?data:$.isFunction(success)?success:undefined,dataType:hasData?dataType||success:success}}$.get=function(url,data,success,dataType){return $.ajax(parseArguments.apply(null,arguments))};$.post=function(url,data,success,dataType){var options=parseArguments.apply(null,arguments);options.type="POST";return $.ajax(options)};$.getJSON=function(url,data,success){var options=parseArguments.apply(null,arguments);options.dataType="json";return $.ajax(options)};$.fn.load=function(url,data,success){if(!this.length)return this;var self=this,parts=url.split(/\s/),selector,options=parseArguments(url,data,success),callback=options.success;if(parts.length>1)options.url=parts[0],selector=parts[1];options.success=function(response){self.html(selector?$("<div>").html(response.replace(rscript,"")).find(selector):response);callback&&callback.apply(self,arguments)};$.ajax(options);return this};var escape=encodeURIComponent;function serialize(params,obj,traditional,scope){var type,array=$.isArray(obj);$.each(obj,function(key,value){type=$.type(value);if(scope)key=traditional?scope:scope+"["+(array?"":key)+"]";if(!scope&&array)params.add(value.name,value.value);else if(type=="array"||!traditional&&type=="object")serialize(params,value,traditional,key);else params.add(key,value)})}$.param=function(obj,traditional){var params=[];params.add=function(k,v){this.push(escape(k)+"="+escape(v))};serialize(params,obj,traditional);return params.join("&").replace(/%20/g,"+")}})(Zepto);(function($){$.fn.serializeArray=function(){var result=[],el;$(Array.prototype.slice.call(this.get(0).elements)).each(function(){el=$(this);var type=el.attr("type");if(this.nodeName.toLowerCase()!="fieldset"&&!this.disabled&&type!="submit"&&type!="reset"&&type!="button"&&(type!="radio"&&type!="checkbox"||this.checked))result.push({name:el.attr("name"),value:el.val()})});return result};$.fn.serialize=function(){var result=[];this.serializeArray().forEach(function(elm){result.push(encodeURIComponent(elm.name)+"="+encodeURIComponent(elm.value))});return result.join("&")};$.fn.submit=function(callback){if(callback)this.bind("submit",callback);else if(this.length){var event=$.Event("submit");this.eq(0).trigger(event);if(!event.defaultPrevented)this.get(0).submit()}return this}})(Zepto);(function($,undefined){var prefix="",eventPrefix,endEventName,endAnimationName,vendors={Webkit:"webkit",Moz:"",O:"o",ms:"MS"},document=window.document,testEl=document.createElement("div"),supportedTransforms=/^((translate|rotate|scale)(X|Y|Z|3d)?|matrix(3d)?|perspective|skew(X|Y)?)$/i,transform,transitionProperty,transitionDuration,transitionTiming,animationName,animationDuration,animationTiming,cssReset={};function dasherize(str){return downcase(str.replace(/([a-z])([A-Z])/,"$1-$2"))}function downcase(str){return str.toLowerCase()}function normalizeEvent(name){return eventPrefix?eventPrefix+name:downcase(name)}$.each(vendors,function(vendor,event){if(testEl.style[vendor+"TransitionProperty"]!==undefined){prefix="-"+downcase(vendor)+"-";eventPrefix=event;return false}});transform=prefix+"transform";cssReset[transitionProperty=prefix+"transition-property"]=cssReset[transitionDuration=prefix+"transition-duration"]=cssReset[transitionTiming=prefix+"transition-timing-function"]=cssReset[animationName=prefix+"animation-name"]=cssReset[animationDuration=prefix+"animation-duration"]=cssReset[animationTiming=prefix+"animation-timing-function"]="";$.fx={off:eventPrefix===undefined&&testEl.style.transitionProperty===undefined,speeds:{_default:400,fast:200,slow:600},cssPrefix:prefix,transitionEnd:normalizeEvent("TransitionEnd"),animationEnd:normalizeEvent("AnimationEnd")};$.fn.animate=function(properties,duration,ease,callback){if($.isPlainObject(duration))ease=duration.easing,callback=duration.complete,duration=duration.duration;if(duration)duration=(typeof duration=="number"?duration:$.fx.speeds[duration]||$.fx.speeds._default)/1e3;return this.anim(properties,duration,ease,callback)};$.fn.anim=function(properties,duration,ease,callback){var key,cssValues={},cssProperties,transforms="",that=this,wrappedCallback,endEvent=$.fx.transitionEnd;if(duration===undefined)duration=.4;if($.fx.off)duration=0;if(typeof properties=="string"){cssValues[animationName]=properties;cssValues[animationDuration]=duration+"s";cssValues[animationTiming]=ease||"linear";endEvent=$.fx.animationEnd}else{cssProperties=[];for(key in properties)if(supportedTransforms.test(key))transforms+=key+"("+properties[key]+") ";else cssValues[key]=properties[key],cssProperties.push(dasherize(key));if(transforms)cssValues[transform]=transforms,cssProperties.push(transform);if(duration>0&&typeof properties==="object"){cssValues[transitionProperty]=cssProperties.join(", ");cssValues[transitionDuration]=duration+"s";cssValues[transitionTiming]=ease||"linear"}}wrappedCallback=function(event){if(typeof event!=="undefined"){if(event.target!==event.currentTarget)return;$(event.target).unbind(endEvent,wrappedCallback)}$(this).css(cssReset);callback&&callback.call(this)};if(duration>0)this.bind(endEvent,wrappedCallback);this.size()&&this.get(0).clientLeft;this.css(cssValues);if(duration<=0)setTimeout(function(){that.each(function(){wrappedCallback.call(this)})},0);return this};testEl=null})(Zepto)},{}],2:[function(require,module,exports){"use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){if(protoProps)defineProperties(Constructor.prototype,protoProps);if(staticProps)defineProperties(Constructor,staticProps);return Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}var $=require("zepto-browserify").$;var objs=[];var eventType="input paste click change keydown keyup contextmenu mouseup mousedown mousemove touchstart touchend touchmove compositionstart compositionend";var dataAction=eventType.replace(/([a-z]+)/g,"[data-action-$1],")+"[data-action]";var getObjectById=function getObjectById(id){for(var i=0,n=objs.length;i<n;i++){var obj=objs[i];var templates=obj.templates;for(var t=0,m=templates.length;t<m;t++){if(templates[t]==id){return obj}}}return null};if(typeof jQuery!=="undefined"){$=jQuery}if(typeof document!=="undefined"){$(document).on("input change click","[data-bind]",function(e){var data=$(this).data("bind");var val=$(this).val();var attr=$(this).attr("href");if(attr){val=attr.replace("#","")}var id=$(this).parents("[data-id]").data("id");if(id){var obj=getObjectById(id);if($(e.target).attr("type")=="radio"){if($(this).is(":checked")){obj.updateDataByString(data,val)}else{obj.updateDataByString(data,"")}}else if($(e.target).attr("type")=="checkbox"){var arr=[];$('[data-bind="'+data+'"]').each(function(){if($(this).is(":checked")){arr.push($(this).val())}});obj.updateDataByString(data,arr)}else{obj.updateDataByString(data,val)}}});$(document).on(eventType,dataAction,function(e){if(e.type=="click"&&$(e.target).is("select")){return}if(e.type=="input"&&$(e.target).attr("type")=="button"){return}var events=eventType.split(" ");var $self=$(this);var action="action";events.forEach(function(event){if($self.data("action-"+event)){if(e.type===event){action+="-"+event}}});var string=$self.data(action);if(!string){return}var action=string.replace(/\(.*?\);?/,"");var parameter=string.replace(/(.*?)\((.*?)\);?/,"$2");var pts=parameter.split(",");var id=$self.parents("[data-id]").data("id");if(id){var obj=getObjectById(id);obj.e=e;if(obj.method&&obj.method[action]){obj.method[action].apply(obj,pts)}else if(obj[action]){obj[action].apply(obj,pts)}}})}var aTemplate=function(){function aTemplate(opt){_classCallCheck(this,aTemplate);objs.push(this);for(var i in opt){this[i]=opt[i]}if(!this.data){this.data={}}this.setId()}_createClass(aTemplate,[{key:"addTemplate",value:function addTemplate(template,id){$("body").append("<script type='text/template' id='"+id+"'>"+template+"</script>");if(!this.templates){this.templates=[]}this.templates.push(id)}},{key:"loadHtml",value:function loadHtml(){var templates=this.templates;var promises=[];templates.forEach(function(template){var d=new $.Deferred;promises.push(d);var src=$("#"+template).attr("src");$.ajax({url:src,type:"GET",dataType:"text"}).success(function(data){$("#"+template).html(data);d.resolve()})});return $.when.apply($,promises)}},{key:"getData",value:function getData(){return JSON.parse(JSON.stringify(this.data))}},{key:"saveData",value:function saveData(key){var data=JSON.stringify(this.data);localStorage.setItem(key,data)}},{key:"setData",value:function setData(val){for(var i in val){if(typeof val[i]!=="function"){this.data[i]=val[i]}}}},{key:"loadData",value:function loadData(key){var data=JSON.parse(localStorage.getItem(key));if(data){for(var i in data){if(typeof data[i]!=="function"){this.data[i]=data[i]}}}}},{key:"getRand",value:function getRand(a,b){return~~(Math.random()*(b-a+1))+a}},{key:"getRandText",value:function getRandText(limit){var ret="";var strings="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";var length=strings.length;for(var i=0;i<limit;i++){ret+=strings.charAt(Math.floor(this.getRand(0,length)))}return ret}},{key:"setId",value:function setId(){var text;var ids=aTemplate.ids;var flag=false;while(1){text=this.getRandText(10);for(var i=0,n=aTemplate.ids;i<n;i++){if(aTemplate.ids[i]===text){flag=true}}if(flag===false){break}}this.data.aTemplate_id=text}},{key:"getDataFromObj",value:function getDataFromObj(s,o){s=s.replace(/\[([a-zA-Z0-9._-]+)\]/g,".$1");s=s.replace(/^\./,"");var a=s.split(".");while(a.length){var n=a.shift();if(n in o){o=o[n]}else{return}}return o}},{key:"getDataByString",value:function getDataByString(s){var o=this.data;return this.getDataFromObj(s,o)}},{key:"updateDataByString",value:function updateDataByString(path,newValue){var object=this.data;var stack=path.split(".");while(stack.length>1){object=object[stack.shift()]}object[stack.shift()]=newValue}},{key:"removeDataByString",value:function removeDataByString(path){var object=this.data;var stack=path.split(".");while(stack.length>1){object=object[stack.shift()]}var shift=stack.shift();if(shift.match(/^\d+$/)){object.splice(Number(shift),1)}else{delete object[shift]}}},{key:"resolveBlock",value:function resolveBlock(html,item,i){var that=this;var touchs=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+) -->/g);var touchnots=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+) -->/g);var exists=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):exist -->/g);var empties=html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):empty -->/g);if(touchs){for(var k=0,n=touchs.length;k<n;k++){var start=touchs[k];start=start.replace(/([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+)/,"($1):touch#($2)");var end=start.replace(/BEGIN/,"END");var reg=new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g");html=html.replace(reg,function(m,key2,val,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(itemkey==val){return next}else{return""}})}}if(touchnots){for(var k=0,n=touchnots.length;k<n;k++){var start=touchnots[k];start=start.replace(/([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+)/,"($1):touchnot#($2)");var end=start.replace(/BEGIN/,"END");var reg=new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g");html=html.replace(reg,function(m,key2,val,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(itemkey!=val){return next}else{return""}})}}if(exists){for(var k=0,n=exists.length;k<n;k++){var start=exists[k];start=start.replace(/([a-zA-Z0-9._-]+):exist/,"($1):exist");var end=start.replace(/BEGIN/,"END");var reg=new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g");html=html.replace(reg,function(m,key2,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(itemkey){return next}else{return""}})}}if(empties){for(var k=0,n=empties.length;k<n;k++){var start=empties[k];start=start.replace(/([a-zA-Z0-9._-]+):empty/,"($1):empty");var end=start.replace(/BEGIN/,"END");var empty=new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g");html=html.replace(empty,function(m,key2,next){var itemkey=typeof item[key2]==="function"?item[key2].apply(that):that.getDataFromObj(key2,item);if(!itemkey){return next}else{return""}})}}html=html.replace(/{([a-zA-Z0-9._-]+)}(\[([a-zA-Z0-9._-]+)\])*/g,function(n,key3,key4,converter){var data;if(key3=="i"){data=i}else{if(item[key3]){if(typeof item[key3]==="function"){data=item[key3].apply(that)}else{data=item[key3]}}else{if(converter&&that.convert&&that.convert[converter]){return that.convert[converter].call(that,"")}else{return""}}}if(converter&&that.convert&&that.convert[converter]){return that.convert[converter].call(that,data)}else{return data}});return html}},{key:"resolveAbsBlock",value:function resolveAbsBlock(html){var that=this;html=html.replace(/{(.*?)}/g,function(n,key3){var data=that.getDataByString(key3);if(typeof data!=="undefined"){if(typeof data==="function"){return data.apply(that)}else{return data}}else{return n}});return html}},{key:"resolveInclude",value:function resolveInclude(html){var include=/<!-- #include id="(.*?)" -->/g;html=html.replace(include,function(m,key){return $("#"+key).html()});return html}},{key:"resolveWith",value:function resolveWith(html){var width=/<!-- BEGIN ([a-zA-Z0-9._-]+):with -->(([\n\r\t]|.)*?)<!-- END ([a-zA-Z0-9._-]+):with -->/g;html=html.replace(width,function(m,key,val){m=m.replace(/data\-bind=['"](.*?)['"]/g,"data-bind='"+key+".$1'");return m});return html}},{key:"resolveLoop",value:function resolveLoop(html){var loop=/<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g;var that=this;html=html.replace(loop,function(m,key,val){var keyItem=that.getDataByString(key);var keys=[];if(typeof keyItem==="function"){keys=keyItem.apply(that)}else{keys=keyItem}var ret="";if(keys instanceof Array){for(var i=0,n=keys.length;i<n;i++){ret+=that.resolveBlock(val,keys[i],i)}}ret=ret.replace(/\\([^\\])/g,"$1");return ret});return html}},{key:"removeData",value:function removeData(arr){var data=this.data;for(var i in data){for(var t=0,n=arr.length;t<n;t++){if(i===arr[t]){delete data[i]}}}return this}},{key:"hasLoop",value:function hasLoop(txt){var loop=/<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g;if(txt.match(loop)){return true}else{return false}}},{key:"getHtml",value:function getHtml(selector,row){var $template=$(selector);var html=$template.html();if(row){html=selector}if(!html){return""}var data=this.data;html=this.resolveInclude(html);html=this.resolveWith(html);while(this.hasLoop(html)){html=this.resolveLoop(html)}html=this.resolveBlock(html,data);html=html.replace(/\\([^\\])/g,"$1");html=this.resolveAbsBlock(html);return html.replace(/^([\t ])*\n/gm,"")}},{key:"update",value:function update(txt,part){var html=this.getHtml();var templates=this.templates;var renderWay=txt||"html";if(this.beforeUpdated){this.beforeUpdated()}for(var i=0,n=templates.length;i<n;i++){var tem=templates[i];var selector="#"+tem;var html=this.getHtml(selector);var $target=$("[data-id='"+tem+"']");if(!part||part==tem){if($target.length==0){var $newitem=$("<div data-id='"+tem+"'></div>");$newitem[renderWay](html);$(selector).after($newitem)}else{$target[renderWay](html)}if(part){break}}}this.updateBindingData(part);if(this.onUpdated){this.onUpdated()}return this}},{key:"updateBindingData",value:function updateBindingData(part){var that=this;var templates=that.templates;for(var i=0,n=templates.length;i<n;i++){var temp=templates[i];if(!part||part==temp){var $template=$("[data-id='"+temp+"']");$template.find("[data-bind]").each(function(){var data=that.getDataByString($(this).data("bind"));if($(this).attr("type")=="checkbox"||$(this).attr("type")=="radio"){if(data==$(this).val()){$(this).prop("checked",true)}}else{$(this).val(data)}});if(part){break}}}return this}},{key:"copyToClipBoard",value:function copyToClipBoard(){var copyArea=$("<textarea/>");$("body").append(copyArea);copyArea.text(this.getHtml());copyArea.select();document.execCommand("copy");copyArea.remove();return this}},{key:"applyMethod",value:function applyMethod(method){var args=[].splice.call(arguments,0);args.shift();return this.method[method].apply(this,args)}},{key:"getComputedProp",value:function getComputedProp(prop){return this.data[prop].apply(this)}},{key:"remove",value:function remove(path){var object=this.data;var stack=path.split(".");while(stack.length>1){object=object[stack.shift()]}var shift=stack.shift();if(shift.match(/^\d+$/)){object.splice(Number(shift),1)}else{delete object[shift]}return this}}]);return aTemplate}();module.exports=aTemplate},{"zepto-browserify":1}]},{},[2])(2)}); |
1108
index.js
@@ -9,572 +9,570 @@ "use strict"; | ||
var objs = []; | ||
var eventType = "input paste click change keydown contextmenu mouseup mousedown mousemove touchstart touchend touchmove compositionstart compositionend"; | ||
var eventType = "input paste click change keydown keyup contextmenu mouseup mousedown mousemove touchstart touchend touchmove compositionstart compositionend"; | ||
var dataAction = eventType.replace(/([a-z]+)/g, "[data-action-$1],") + "[data-action]"; | ||
var getObjectById = function getObjectById(id) { | ||
for (var i = 0, n = objs.length; i < n; i++) { | ||
var obj = objs[i]; | ||
var templates = obj.templates; | ||
for (var t = 0, m = templates.length; t < m; t++) { | ||
if (templates[t] == id) { | ||
return obj; | ||
} | ||
} | ||
} | ||
return null; | ||
for (var i = 0, n = objs.length; i < n; i++) { | ||
var obj = objs[i]; | ||
var templates = obj.templates; | ||
for (var t = 0, m = templates.length; t < m; t++) { | ||
if (templates[t] == id) { | ||
return obj; | ||
} | ||
} | ||
} | ||
return null; | ||
}; | ||
if (typeof jQuery !== "undefined") { | ||
// for IE | ||
$ = jQuery; | ||
// for IE | ||
$ = jQuery; | ||
} | ||
if (typeof document !== "undefined") { | ||
//data binding | ||
$(document).on("input change click", "[data-bind]", function (e) { | ||
var data = $(this).data("bind"); | ||
var val = $(this).val(); | ||
var attr = $(this).attr("href"); | ||
if (attr) { | ||
val = attr.replace("#", ""); | ||
} | ||
var id = $(this).parents("[data-id]").data("id"); | ||
if (id) { | ||
var obj = getObjectById(id); | ||
if ($(e.target).attr("type") == "radio") { | ||
if ($(this).is(":checked")) { | ||
obj.updateDataByString(data, val); | ||
} else { | ||
obj.updateDataByString(data, ''); | ||
} | ||
} else if ($(e.target).attr("type") == "checkbox") { | ||
(function () { | ||
var arr = []; | ||
$("[data-bind=\"" + data + "\"]").each(function () { | ||
if ($(this).is(":checked")) { | ||
arr.push($(this).val()); | ||
} | ||
}); | ||
obj.updateDataByString(data, arr); | ||
})(); | ||
} else { | ||
obj.updateDataByString(data, val); | ||
} | ||
} | ||
}); | ||
//action | ||
$(document).on(eventType, dataAction, function (e) { | ||
if (e.type == "click" && $(e.target).is("select")) { | ||
return; | ||
} | ||
if (e.type == "input" && $(e.target).attr("type") == "button") { | ||
return; | ||
} | ||
var events = eventType.split(" "); | ||
var $self = $(this); | ||
var action = "action"; | ||
events.forEach(function (event) { | ||
if ($self.data("action-" + event)) { | ||
if (e.type === event) { | ||
action += "-" + event; | ||
} | ||
} | ||
}); | ||
var string = $self.data(action); | ||
if (!string) { | ||
return; | ||
} | ||
var method = string.replace(/\(.*?\);?/, ""); | ||
var parameter = string.replace(/(.*?)\((.*?)\);?/, "$2"); | ||
var pts = parameter.split(","); //引き数 | ||
var id = $self.parents("[data-id]").data("id"); | ||
if (id) { | ||
var obj = getObjectById(id); | ||
obj.e = e; | ||
if (obj.method && obj.method[method]) { | ||
obj.method[method].apply(obj, pts); | ||
} else if (obj[method]) { | ||
obj[method].apply(obj, pts); | ||
} | ||
} | ||
}); | ||
//data binding | ||
$(document).on("input change click", "[data-bind]", function (e) { | ||
var data = $(this).data("bind"); | ||
var val = $(this).val(); | ||
var attr = $(this).attr("href"); | ||
if (attr) { | ||
val = attr.replace("#", ""); | ||
} | ||
var id = $(this).parents("[data-id]").data("id"); | ||
if (id) { | ||
var obj = getObjectById(id); | ||
if ($(e.target).attr("type") == "radio") { | ||
if ($(this).is(":checked")) { | ||
obj.updateDataByString(data, val); | ||
} else { | ||
obj.updateDataByString(data, ''); | ||
} | ||
} else if ($(e.target).attr("type") == "checkbox") { | ||
var arr = []; | ||
$("[data-bind=\"" + data + "\"]").each(function () { | ||
if ($(this).is(":checked")) { | ||
arr.push($(this).val()); | ||
} | ||
}); | ||
obj.updateDataByString(data, arr); | ||
} else { | ||
obj.updateDataByString(data, val); | ||
} | ||
} | ||
}); | ||
//action | ||
$(document).on(eventType, dataAction, function (e) { | ||
if (e.type == "click" && $(e.target).is("select")) { | ||
return; | ||
} | ||
if (e.type == "input" && $(e.target).attr("type") == "button") { | ||
return; | ||
} | ||
var events = eventType.split(" "); | ||
var $self = $(this); | ||
var action = "action"; | ||
events.forEach(function (event) { | ||
if ($self.data("action-" + event)) { | ||
if (e.type === event) { | ||
action += "-" + event; | ||
} | ||
} | ||
}); | ||
var string = $self.data(action); | ||
if (!string) { | ||
return; | ||
} | ||
var action = string.replace(/\(.*?\);?/, ""); | ||
var parameter = string.replace(/(.*?)\((.*?)\);?/, "$2"); | ||
var pts = parameter.split(","); //引き数 | ||
var id = $self.parents("[data-id]").data("id"); | ||
if (id) { | ||
var obj = getObjectById(id); | ||
obj.e = e; | ||
if (obj.method && obj.method[action]) { | ||
obj.method[action].apply(obj, pts); | ||
} else if (obj[action]) { | ||
obj[action].apply(obj, pts); | ||
} | ||
} | ||
}); | ||
} | ||
var aTemplate = function () { | ||
function aTemplate(opt) { | ||
_classCallCheck(this, aTemplate); | ||
function aTemplate(opt) { | ||
_classCallCheck(this, aTemplate); | ||
objs.push(this); | ||
for (var i in opt) { | ||
this[i] = opt[i]; | ||
} | ||
if (!this.data) { | ||
this.data = {}; | ||
} | ||
this.setId(); | ||
} | ||
objs.push(this); | ||
for (var i in opt) { | ||
this[i] = opt[i]; | ||
} | ||
if (!this.data) { | ||
this.data = {}; | ||
} | ||
this.setId(); | ||
} | ||
_createClass(aTemplate, [{ | ||
key: "addTemplate", | ||
value: function addTemplate(template, id) { | ||
$("body").append("<script type='text/template' id='" + id + "'>" + template + "</script>"); | ||
if (!this.templates) { | ||
this.templates = []; | ||
} | ||
this.templates.push(id); | ||
} | ||
}, { | ||
key: "loadHtml", | ||
value: function loadHtml() { | ||
var templates = this.templates; | ||
var promises = []; | ||
templates.forEach(function (template) { | ||
var d = new $.Deferred(); | ||
promises.push(d); | ||
var src = $("#" + template).attr("src"); | ||
$.ajax({ | ||
url: src, | ||
type: 'GET', | ||
dataType: 'text' | ||
}).success(function (data) { | ||
$("#" + template).html(data); | ||
d.resolve(); | ||
}); | ||
}); | ||
return $.when.apply($, promises); | ||
} | ||
}, { | ||
key: "getData", | ||
value: function getData() { | ||
return JSON.parse(JSON.stringify(this.data)); | ||
} | ||
}, { | ||
key: "saveData", | ||
value: function saveData(key) { | ||
var data = JSON.stringify(this.data); | ||
localStorage.setItem(key, data); | ||
} | ||
}, { | ||
key: "setData", | ||
value: function setData(val) { | ||
for (var i in val) { | ||
if (typeof val[i] !== "function") { | ||
this.data[i] = val[i]; | ||
} | ||
} | ||
} | ||
}, { | ||
key: "loadData", | ||
value: function loadData(key) { | ||
var data = JSON.parse(localStorage.getItem(key)); | ||
if (data) { | ||
for (var i in data) { | ||
if (typeof data[i] !== "function") { | ||
this.data[i] = data[i]; | ||
} | ||
} | ||
} | ||
} | ||
}, { | ||
key: "getRand", | ||
value: function getRand(a, b) { | ||
return ~~(Math.random() * (b - a + 1)) + a; | ||
} | ||
}, { | ||
key: "getRandText", | ||
value: function getRandText(limit) { | ||
var ret = ""; | ||
var strings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | ||
var length = strings.length; | ||
for (var i = 0; i < limit; i++) { | ||
ret += strings.charAt(Math.floor(this.getRand(0, length))); | ||
} | ||
return ret; | ||
} | ||
}, { | ||
key: "setId", | ||
value: function setId() { | ||
var text = void 0; | ||
var ids = aTemplate.ids; | ||
var flag = false; | ||
while (1) { | ||
text = this.getRandText(10); | ||
for (var i = 0, n = aTemplate.ids; i < n; i++) { | ||
if (aTemplate.ids[i] === text) { | ||
flag = true; | ||
} | ||
} | ||
if (flag === false) { | ||
break; | ||
} | ||
} | ||
this.data.aTemplate_id = text; | ||
} | ||
}, { | ||
key: "getDataFromObj", | ||
value: function getDataFromObj(s, o) { | ||
s = s.replace(/\[([a-zA-Z0-9._-]+)\]/g, '.$1'); // convert indexes to properties | ||
s = s.replace(/^\./, ''); // strip leading dot | ||
var a = s.split('.'); | ||
while (a.length) { | ||
var n = a.shift(); | ||
if (n in o) { | ||
o = o[n]; | ||
} else { | ||
return; | ||
} | ||
} | ||
return o; | ||
} | ||
}, { | ||
key: "getDataByString", | ||
value: function getDataByString(s) { | ||
var o = this.data; | ||
return this.getDataFromObj(s, o); | ||
} | ||
}, { | ||
key: "updateDataByString", | ||
value: function updateDataByString(path, newValue) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
object[stack.shift()] = newValue; | ||
} | ||
}, { | ||
key: "removeDataByString", | ||
value: function removeDataByString(path) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
var shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
} | ||
}, { | ||
key: "resolveBlock", | ||
value: function resolveBlock(html, item, i) { | ||
var that = this; | ||
var touchs = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+) -->/g); | ||
var touchnots = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+) -->/g); | ||
var exists = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):exist -->/g); | ||
var empties = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):empty -->/g); | ||
/*タッチブロック解決*/ | ||
if (touchs) { | ||
for (var k = 0, n = touchs.length; k < n; k++) { | ||
var start = touchs[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+)/, "($1):touch#($2)"); | ||
var end = start.replace(/BEGIN/, "END"); | ||
var reg = new RegExp(start + "(([\\n\\r\\t]|.)*?)" + end, "g"); | ||
html = html.replace(reg, function (m, key2, val, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (itemkey == val) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*タッチノットブロック解決*/ | ||
if (touchnots) { | ||
for (var _k = 0, _n = touchnots.length; _k < _n; _k++) { | ||
var _start = touchnots[_k]; | ||
_start = _start.replace(/([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+)/, "($1):touchnot#($2)"); | ||
var _end = _start.replace(/BEGIN/, "END"); | ||
var _reg = new RegExp(_start + "(([\\n\\r\\t]|.)*?)" + _end, "g"); | ||
html = html.replace(_reg, function (m, key2, val, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (itemkey != val) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*existブロックを解決*/ | ||
if (exists) { | ||
for (var _k2 = 0, _n2 = exists.length; _k2 < _n2; _k2++) { | ||
var _start2 = exists[_k2]; | ||
_start2 = _start2.replace(/([a-zA-Z0-9._-]+):exist/, "($1):exist"); | ||
var _end2 = _start2.replace(/BEGIN/, "END"); | ||
var _reg2 = new RegExp(_start2 + "(([\\n\\r\\t]|.)*?)" + _end2, "g"); | ||
html = html.replace(_reg2, function (m, key2, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (itemkey) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*emptyブロックを解決*/ | ||
if (empties) { | ||
for (var _k3 = 0, _n3 = empties.length; _k3 < _n3; _k3++) { | ||
var _start3 = empties[_k3]; | ||
_start3 = _start3.replace(/([a-zA-Z0-9._-]+):empty/, "($1):empty"); | ||
var _end3 = _start3.replace(/BEGIN/, "END"); | ||
var empty = new RegExp(_start3 + "(([\\n\\r\\t]|.)*?)" + _end3, "g"); | ||
html = html.replace(empty, function (m, key2, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (!itemkey) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*変数解決*/ | ||
html = html.replace(/{([a-zA-Z0-9._-]+)}(\[([a-zA-Z0-9._-]+)\])*/g, function (n, key3, key4, converter) { | ||
var data = void 0; | ||
if (key3 == "i") { | ||
data = i; | ||
} else { | ||
if (item[key3]) { | ||
if (typeof item[key3] === "function") { | ||
data = item[key3].apply(that); | ||
} else { | ||
data = item[key3]; | ||
} | ||
} else { | ||
if (converter && that.convert && that.convert[converter]) { | ||
return that.convert[converter].call(that, ""); | ||
} else { | ||
return ""; | ||
} | ||
} | ||
} | ||
if (converter && that.convert && that.convert[converter]) { | ||
return that.convert[converter].call(that, data); | ||
} else { | ||
return data; | ||
} | ||
}); | ||
return html; | ||
} | ||
/*絶対パス形式の変数を解決*/ | ||
_createClass(aTemplate, [{ | ||
key: "addTemplate", | ||
value: function addTemplate(template, id) { | ||
$("body").append("<script type='text/template' id='" + id + "'>" + template + "</script>"); | ||
if (!this.templates) { | ||
this.templates = []; | ||
} | ||
this.templates.push(id); | ||
} | ||
}, { | ||
key: "loadHtml", | ||
value: function loadHtml() { | ||
var templates = this.templates; | ||
var promises = []; | ||
templates.forEach(function (template) { | ||
var d = new $.Deferred(); | ||
promises.push(d); | ||
var src = $("#" + template).attr("src"); | ||
$.ajax({ | ||
url: src, | ||
type: 'GET', | ||
dataType: 'text' | ||
}).success(function (data) { | ||
$("#" + template).html(data); | ||
d.resolve(); | ||
}); | ||
}); | ||
return $.when.apply($, promises); | ||
} | ||
}, { | ||
key: "getData", | ||
value: function getData() { | ||
return JSON.parse(JSON.stringify(this.data)); | ||
} | ||
}, { | ||
key: "saveData", | ||
value: function saveData(key) { | ||
var data = JSON.stringify(this.data); | ||
localStorage.setItem(key, data); | ||
} | ||
}, { | ||
key: "setData", | ||
value: function setData(val) { | ||
for (var i in val) { | ||
if (typeof val[i] !== "function") { | ||
this.data[i] = val[i]; | ||
} | ||
} | ||
} | ||
}, { | ||
key: "loadData", | ||
value: function loadData(key) { | ||
var data = JSON.parse(localStorage.getItem(key)); | ||
if (data) { | ||
for (var i in data) { | ||
if (typeof data[i] !== "function") { | ||
this.data[i] = data[i]; | ||
} | ||
} | ||
} | ||
} | ||
}, { | ||
key: "getRand", | ||
value: function getRand(a, b) { | ||
return ~~(Math.random() * (b - a + 1)) + a; | ||
} | ||
}, { | ||
key: "getRandText", | ||
value: function getRandText(limit) { | ||
var ret = ""; | ||
var strings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | ||
var length = strings.length; | ||
for (var i = 0; i < limit; i++) { | ||
ret += strings.charAt(Math.floor(this.getRand(0, length))); | ||
} | ||
return ret; | ||
} | ||
}, { | ||
key: "setId", | ||
value: function setId() { | ||
var text; | ||
var ids = aTemplate.ids; | ||
var flag = false; | ||
while (1) { | ||
text = this.getRandText(10); | ||
for (var i = 0, n = aTemplate.ids; i < n; i++) { | ||
if (aTemplate.ids[i] === text) { | ||
flag = true; | ||
} | ||
} | ||
if (flag === false) { | ||
break; | ||
} | ||
} | ||
this.data.aTemplate_id = text; | ||
} | ||
}, { | ||
key: "getDataFromObj", | ||
value: function getDataFromObj(s, o) { | ||
s = s.replace(/\[([a-zA-Z0-9._-]+)\]/g, '.$1'); // convert indexes to properties | ||
s = s.replace(/^\./, ''); // strip leading dot | ||
var a = s.split('.'); | ||
while (a.length) { | ||
var n = a.shift(); | ||
if (n in o) { | ||
o = o[n]; | ||
} else { | ||
return; | ||
} | ||
} | ||
return o; | ||
} | ||
}, { | ||
key: "getDataByString", | ||
value: function getDataByString(s) { | ||
var o = this.data; | ||
return this.getDataFromObj(s, o); | ||
} | ||
}, { | ||
key: "updateDataByString", | ||
value: function updateDataByString(path, newValue) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
object[stack.shift()] = newValue; | ||
} | ||
}, { | ||
key: "removeDataByString", | ||
value: function removeDataByString(path) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
var shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
} | ||
}, { | ||
key: "resolveBlock", | ||
value: function resolveBlock(html, item, i) { | ||
var that = this; | ||
var touchs = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+) -->/g); | ||
var touchnots = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+) -->/g); | ||
var exists = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):exist -->/g); | ||
var empties = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):empty -->/g); | ||
/*タッチブロック解決*/ | ||
if (touchs) { | ||
for (var k = 0, n = touchs.length; k < n; k++) { | ||
var start = touchs[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+)/, "($1):touch#($2)"); | ||
var end = start.replace(/BEGIN/, "END"); | ||
var reg = new RegExp(start + "(([\\n\\r\\t]|.)*?)" + end, "g"); | ||
html = html.replace(reg, function (m, key2, val, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (itemkey == val) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*タッチノットブロック解決*/ | ||
if (touchnots) { | ||
for (var k = 0, n = touchnots.length; k < n; k++) { | ||
var start = touchnots[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+)/, "($1):touchnot#($2)"); | ||
var end = start.replace(/BEGIN/, "END"); | ||
var reg = new RegExp(start + "(([\\n\\r\\t]|.)*?)" + end, "g"); | ||
html = html.replace(reg, function (m, key2, val, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (itemkey != val) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*existブロックを解決*/ | ||
if (exists) { | ||
for (var k = 0, n = exists.length; k < n; k++) { | ||
var start = exists[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):exist/, "($1):exist"); | ||
var end = start.replace(/BEGIN/, "END"); | ||
var reg = new RegExp(start + "(([\\n\\r\\t]|.)*?)" + end, "g"); | ||
html = html.replace(reg, function (m, key2, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (itemkey) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*emptyブロックを解決*/ | ||
if (empties) { | ||
for (var k = 0, n = empties.length; k < n; k++) { | ||
var start = empties[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):empty/, "($1):empty"); | ||
var end = start.replace(/BEGIN/, "END"); | ||
var empty = new RegExp(start + "(([\\n\\r\\t]|.)*?)" + end, "g"); | ||
html = html.replace(empty, function (m, key2, next) { | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2, item); | ||
if (!itemkey) { | ||
return next; | ||
} else { | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*変数解決*/ | ||
html = html.replace(/{([a-zA-Z0-9._-]+)}(\[([a-zA-Z0-9._-]+)\])*/g, function (n, key3, key4, converter) { | ||
var data; | ||
if (key3 == "i") { | ||
data = i; | ||
} else { | ||
if (item[key3]) { | ||
if (typeof item[key3] === "function") { | ||
data = item[key3].apply(that); | ||
} else { | ||
data = item[key3]; | ||
} | ||
} else { | ||
if (converter && that.convert && that.convert[converter]) { | ||
return that.convert[converter].call(that, ""); | ||
} else { | ||
return ""; | ||
} | ||
} | ||
} | ||
if (converter && that.convert && that.convert[converter]) { | ||
return that.convert[converter].call(that, data); | ||
} else { | ||
return data; | ||
} | ||
}); | ||
return html; | ||
} | ||
/*絶対パス形式の変数を解決*/ | ||
}, { | ||
key: "resolveAbsBlock", | ||
value: function resolveAbsBlock(html) { | ||
var that = this; | ||
html = html.replace(/{(.*?)}/g, function (n, key3) { | ||
var data = that.getDataByString(key3); | ||
if (typeof data !== "undefined") { | ||
if (typeof data === "function") { | ||
return data.apply(that); | ||
} else { | ||
return data; | ||
} | ||
} else { | ||
return n; | ||
} | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "resolveInclude", | ||
value: function resolveInclude(html) { | ||
var include = /<!-- #include id="(.*?)" -->/g; | ||
html = html.replace(include, function (m, key) { | ||
return $("#" + key).html(); | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "resolveWith", | ||
value: function resolveWith(html) { | ||
var width = /<!-- BEGIN ([a-zA-Z0-9._-]+):with -->(([\n\r\t]|.)*?)<!-- END ([a-zA-Z0-9._-]+):with -->/g; | ||
html = html.replace(width, function (m, key, val) { | ||
m = m.replace(/data\-bind=['"](.*?)['"]/g, "data-bind='" + key + ".$1'"); | ||
return m; | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "resolveLoop", | ||
value: function resolveLoop(html) { | ||
var loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
var that = this; | ||
/*ループ文解決*/ | ||
html = html.replace(loop, function (m, key, val) { | ||
var keyItem = that.getDataByString(key); | ||
var keys = []; | ||
if (typeof keyItem === "function") { | ||
keys = keyItem.apply(that); | ||
} else { | ||
keys = keyItem; | ||
} | ||
var ret = ""; | ||
if (keys instanceof Array) { | ||
for (var i = 0, n = keys.length; i < n; i++) { | ||
ret += that.resolveBlock(val, keys[i], i); | ||
} | ||
} | ||
/*エスケープ削除*/ | ||
ret = ret.replace(/\\([^\\])/g, "$1"); | ||
return ret; | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "removeData", | ||
value: function removeData(arr) { | ||
var data = this.data; | ||
for (var i in data) { | ||
for (var t = 0, n = arr.length; t < n; t++) { | ||
if (i === arr[t]) { | ||
delete data[i]; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
}, { | ||
key: "hasLoop", | ||
value: function hasLoop(txt) { | ||
var loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
if (txt.match(loop)) { | ||
return true; | ||
} else { | ||
return false; | ||
} | ||
} | ||
}, { | ||
key: "getHtml", | ||
value: function getHtml(selector, row) { | ||
var $template = $(selector); | ||
var html = $template.html(); | ||
if (row) { | ||
html = selector; | ||
} | ||
if (!html) { | ||
return ""; | ||
} | ||
var data = this.data; | ||
/*インクルード解決*/ | ||
html = this.resolveInclude(html); | ||
/*with解決*/ | ||
html = this.resolveWith(html); | ||
/*ループ解決*/ | ||
while (this.hasLoop(html)) { | ||
html = this.resolveLoop(html); | ||
} | ||
/*変数解決*/ | ||
html = this.resolveBlock(html, data); | ||
/*エスケープ削除*/ | ||
html = html.replace(/\\([^\\])/g, "$1"); | ||
/*絶対パスで指定された変数を解決*/ | ||
html = this.resolveAbsBlock(html); | ||
/*空行削除*/ | ||
return html.replace(/^([\t ])*\n/gm, ""); | ||
} | ||
}, { | ||
key: "update", | ||
value: function update(txt, part) { | ||
var html = this.getHtml(); | ||
var templates = this.templates; | ||
var renderWay = txt || "html"; | ||
if (this.beforeUpdated) { | ||
this.beforeUpdated(); | ||
} | ||
for (var i = 0, n = templates.length; i < n; i++) { | ||
var tem = templates[i]; | ||
var selector = "#" + tem; | ||
var _html = this.getHtml(selector); | ||
var $target = $("[data-id='" + tem + "']"); | ||
if (!part || part == tem) { | ||
if ($target.length == 0) { | ||
var $newitem = $("<div data-id='" + tem + "'></div>"); | ||
$newitem[renderWay](_html); | ||
$(selector).after($newitem); | ||
} else { | ||
$target[renderWay](_html); | ||
} | ||
if (part) { | ||
break; | ||
} | ||
} | ||
} | ||
this.updateBindingData(part); | ||
if (this.onUpdated) { | ||
this.onUpdated(part); | ||
} | ||
return this; | ||
} | ||
}, { | ||
key: "updateBindingData", | ||
value: function updateBindingData(part) { | ||
var that = this; | ||
var templates = that.templates; | ||
for (var i = 0, n = templates.length; i < n; i++) { | ||
var temp = templates[i]; | ||
if (!part || part == temp) { | ||
var $template = $("[data-id='" + temp + "']"); | ||
$template.find("[data-bind]").each(function () { | ||
var data = that.getDataByString($(this).data("bind")); | ||
if ($(this).attr("type") == "checkbox" || $(this).attr("type") == "radio") { | ||
if (data == $(this).val()) { | ||
$(this).prop("checked", true); | ||
} | ||
} else { | ||
$(this).val(data); | ||
} | ||
}); | ||
if (part) { | ||
break; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
}, { | ||
key: "copyToClipBoard", | ||
value: function copyToClipBoard() { | ||
var copyArea = $("<textarea/>"); | ||
$("body").append(copyArea); | ||
copyArea.text(this.getHtml()); | ||
copyArea.select(); | ||
document.execCommand("copy"); | ||
copyArea.remove(); | ||
return this; | ||
} | ||
}, { | ||
key: "applyMethod", | ||
value: function applyMethod(method) { | ||
var args = [].splice.call(arguments, 0); | ||
args.shift(); | ||
return this.method[method].apply(this, args); | ||
} | ||
}, { | ||
key: "getComputedProp", | ||
value: function getComputedProp(prop) { | ||
return this.data[prop].apply(this); | ||
} | ||
}, { | ||
key: "remove", | ||
value: function remove(path) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
var shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
return this; | ||
} | ||
}]); | ||
}, { | ||
key: "resolveAbsBlock", | ||
value: function resolveAbsBlock(html) { | ||
var that = this; | ||
html = html.replace(/{(.*?)}/g, function (n, key3) { | ||
var data = that.getDataByString(key3); | ||
if (typeof data !== "undefined") { | ||
if (typeof data === "function") { | ||
return data.apply(that); | ||
} else { | ||
return data; | ||
} | ||
} else { | ||
return n; | ||
} | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "resolveInclude", | ||
value: function resolveInclude(html) { | ||
var include = /<!-- #include id="(.*?)" -->/g; | ||
html = html.replace(include, function (m, key) { | ||
return $("#" + key).html(); | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "resolveWith", | ||
value: function resolveWith(html) { | ||
var width = /<!-- BEGIN ([a-zA-Z0-9._-]+):with -->(([\n\r\t]|.)*?)<!-- END ([a-zA-Z0-9._-]+):with -->/g; | ||
html = html.replace(width, function (m, key, val) { | ||
m = m.replace(/data\-bind=['"](.*?)['"]/g, "data-bind='" + key + ".$1'"); | ||
return m; | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "resolveLoop", | ||
value: function resolveLoop(html) { | ||
var loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
var that = this; | ||
/*ループ文解決*/ | ||
html = html.replace(loop, function (m, key, val) { | ||
var keyItem = that.getDataByString(key); | ||
var keys = []; | ||
if (typeof keyItem === "function") { | ||
keys = keyItem.apply(that); | ||
} else { | ||
keys = keyItem; | ||
} | ||
var ret = ""; | ||
if (keys instanceof Array) { | ||
for (var i = 0, n = keys.length; i < n; i++) { | ||
ret += that.resolveBlock(val, keys[i], i); | ||
} | ||
} | ||
/*エスケープ削除*/ | ||
ret = ret.replace(/\\([^\\])/g, "$1"); | ||
return ret; | ||
}); | ||
return html; | ||
} | ||
}, { | ||
key: "removeData", | ||
value: function removeData(arr) { | ||
var data = this.data; | ||
for (var i in data) { | ||
for (var t = 0, n = arr.length; t < n; t++) { | ||
if (i === arr[t]) { | ||
delete data[i]; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
}, { | ||
key: "hasLoop", | ||
value: function hasLoop(txt) { | ||
var loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
if (txt.match(loop)) { | ||
return true; | ||
} else { | ||
return false; | ||
} | ||
} | ||
}, { | ||
key: "getHtml", | ||
value: function getHtml(selector, row) { | ||
var $template = $(selector); | ||
var html = $template.html(); | ||
if (row) { | ||
html = selector; | ||
} | ||
if (!html) { | ||
return ""; | ||
} | ||
var data = this.data; | ||
/*インクルード解決*/ | ||
html = this.resolveInclude(html); | ||
/*with解決*/ | ||
html = this.resolveWith(html); | ||
/*ループ解決*/ | ||
while (this.hasLoop(html)) { | ||
html = this.resolveLoop(html); | ||
} | ||
/*変数解決*/ | ||
html = this.resolveBlock(html, data); | ||
/*エスケープ削除*/ | ||
html = html.replace(/\\([^\\])/g, "$1"); | ||
/*絶対パスで指定された変数を解決*/ | ||
html = this.resolveAbsBlock(html); | ||
/*空行削除*/ | ||
return html.replace(/^([\t ])*\n/gm, ""); | ||
} | ||
}, { | ||
key: "update", | ||
value: function update(txt, part) { | ||
var html = this.getHtml(); | ||
var templates = this.templates; | ||
var renderWay = txt || "html"; | ||
if (this.beforeUpdated) { | ||
this.beforeUpdated(); | ||
} | ||
for (var i = 0, n = templates.length; i < n; i++) { | ||
var tem = templates[i]; | ||
var selector = "#" + tem; | ||
var html = this.getHtml(selector); | ||
var $target = $("[data-id='" + tem + "']"); | ||
if (!part || part == tem) { | ||
if ($target.length == 0) { | ||
var $newitem = $("<div data-id='" + tem + "'></div>"); | ||
$newitem[renderWay](html); | ||
$(selector).after($newitem); | ||
} else { | ||
$target[renderWay](html); | ||
} | ||
if (part) { | ||
break; | ||
} | ||
} | ||
} | ||
this.updateBindingData(part); | ||
if (this.onUpdated) { | ||
this.onUpdated(); | ||
} | ||
return this; | ||
} | ||
}, { | ||
key: "updateBindingData", | ||
value: function updateBindingData(part) { | ||
var that = this; | ||
var templates = that.templates; | ||
for (var i = 0, n = templates.length; i < n; i++) { | ||
var temp = templates[i]; | ||
if (!part || part == temp) { | ||
var $template = $("[data-id='" + temp + "']"); | ||
$template.find("[data-bind]").each(function () { | ||
var data = that.getDataByString($(this).data("bind")); | ||
if ($(this).attr("type") == "checkbox" || $(this).attr("type") == "radio") { | ||
if (data == $(this).val()) { | ||
$(this).prop("checked", true); | ||
} | ||
} else { | ||
$(this).val(data); | ||
} | ||
}); | ||
if (part) { | ||
break; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
}, { | ||
key: "copyToClipBoard", | ||
value: function copyToClipBoard() { | ||
var copyArea = $("<textarea/>"); | ||
$("body").append(copyArea); | ||
copyArea.text(this.getHtml()); | ||
copyArea.select(); | ||
document.execCommand("copy"); | ||
copyArea.remove(); | ||
return this; | ||
} | ||
}, { | ||
key: "applyMethod", | ||
value: function applyMethod(method) { | ||
var args = [].splice.call(arguments, 0); | ||
args.shift(); | ||
return this.method[method].apply(this, args); | ||
} | ||
}, { | ||
key: "getComputedProp", | ||
value: function getComputedProp(prop) { | ||
return this.data[prop].apply(this); | ||
} | ||
}, { | ||
key: "remove", | ||
value: function remove(path) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
var shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
return this; | ||
} | ||
}]); | ||
return aTemplate; | ||
return aTemplate; | ||
}(); | ||
module.exports = aTemplate; |
{ | ||
"name": "a-template", | ||
"version": "0.0.18", | ||
"version": "0.0.19", | ||
"author": "steelydylan", | ||
@@ -22,2 +22,6 @@ "description": "Simple Template Engine", | ||
"uglifyjs": "^2.4.10", | ||
"eslint": "^3.13.0", | ||
"eslint-config-airbnb": "^13.0.0", | ||
"eslint-config-airbnb-base": "^11.0.1", | ||
"eslint-plugin-import": "^2.2.0", | ||
"watch": "^1.0.1", | ||
@@ -24,0 +28,0 @@ "watchify": "^3.7.0" |
1002
src/index.js
@@ -1,88 +0,88 @@ | ||
let $ = require("zepto-browserify").$; | ||
const objs = []; | ||
const eventType = "input paste click change keydown contextmenu mouseup mousedown mousemove touchstart touchend touchmove compositionstart compositionend"; | ||
const dataAction = eventType.replace(/([a-z]+)/g,"[data-action-$1],") + "[data-action]"; | ||
const getObjectById = (id) => { | ||
for (let i = 0, n = objs.length; i < n; i++) { | ||
let obj = objs[i]; | ||
let templates = obj.templates; | ||
for (let t = 0, m = templates.length; t < m; t++) { | ||
if (templates[t] == id) { | ||
return obj; | ||
} | ||
} | ||
} | ||
return null; | ||
var $ = require("zepto-browserify").$; | ||
var objs = []; | ||
var eventType = "input paste click change keydown keyup contextmenu mouseup mousedown mousemove touchstart touchend touchmove compositionstart compositionend"; | ||
var dataAction = eventType.replace(/([a-z]+)/g,"[data-action-$1],") + "[data-action]"; | ||
var getObjectById = (id) => { | ||
for (var i = 0, n = objs.length; i < n; i++) { | ||
var obj = objs[i]; | ||
var templates = obj.templates; | ||
for (var t = 0, m = templates.length; t < m; t++) { | ||
if (templates[t] == id) { | ||
return obj; | ||
} | ||
} | ||
} | ||
return null; | ||
} | ||
if (typeof jQuery !=="undefined"){ | ||
// for IE | ||
$ = jQuery; | ||
if (typeof jQuery !== "undefined") { | ||
// for IE | ||
$ = jQuery; | ||
} | ||
if(typeof document !== "undefined"){ | ||
//data binding | ||
$(document).on("input change click", "[data-bind]", function(e) { | ||
let data = $(this).data("bind"); | ||
let val = $(this).val(); | ||
let attr = $(this).attr("href"); | ||
if (attr) { | ||
val = attr.replace("#", ""); | ||
} | ||
let id = $(this).parents("[data-id]").data("id"); | ||
if (id) { | ||
let obj = getObjectById(id); | ||
if ($(e.target).attr("type") == "radio") { | ||
if ($(this).is(":checked")) { | ||
obj.updateDataByString(data, val); | ||
} else { | ||
obj.updateDataByString(data, ''); | ||
} | ||
} else if ($(e.target).attr("type") == "checkbox") { | ||
let arr = []; | ||
$("[data-bind=\"" + data + "\"]").each(function () { | ||
if ($(this).is(":checked")) { | ||
arr.push($(this).val()); | ||
} | ||
}); | ||
obj.updateDataByString(data, arr); | ||
} else { | ||
obj.updateDataByString(data, val); | ||
} | ||
} | ||
}); | ||
//action | ||
$(document).on(eventType,dataAction,function(e){ | ||
if(e.type == "click" && $(e.target).is("select")){ | ||
return; | ||
} | ||
if(e.type == "input" && $(e.target).attr("type") == "button"){ | ||
return; | ||
} | ||
let events = eventType.split(" "); | ||
let $self = $(this); | ||
let action = "action"; | ||
events.forEach(function(event){ | ||
if ($self.data("action-"+event)) { | ||
if(e.type === event){ | ||
action += "-"+event; | ||
} | ||
} | ||
}); | ||
let string = $self.data(action); | ||
if(!string){ | ||
return; | ||
} | ||
let method = string.replace(/\(.*?\);?/,""); | ||
let parameter = string.replace(/(.*?)\((.*?)\);?/,"$2"); | ||
let pts = parameter.split(",");//引き数 | ||
let id = $self.parents("[data-id]").data("id"); | ||
if(id){ | ||
let obj = getObjectById(id); | ||
obj.e = e; | ||
if(obj.method && obj.method[method]){ | ||
obj.method[method].apply(obj,pts); | ||
}else if(obj[method]){ | ||
obj[method].apply(obj,pts); | ||
} | ||
} | ||
}); | ||
//data binding | ||
$(document).on("input change click", "[data-bind]", function(e) { | ||
var data = $(this).data("bind"); | ||
var val = $(this).val(); | ||
var attr = $(this).attr("href"); | ||
if (attr) { | ||
val = attr.replace("#", ""); | ||
} | ||
var id = $(this).parents("[data-id]").data("id"); | ||
if (id) { | ||
var obj = getObjectById(id); | ||
if ($(e.target).attr("type") == "radio") { | ||
if ($(this).is(":checked")) { | ||
obj.updateDataByString(data, val); | ||
} else { | ||
obj.updateDataByString(data, ''); | ||
} | ||
} else if ($(e.target).attr("type") == "checkbox") { | ||
var arr = []; | ||
$("[data-bind=\"" + data + "\"]").each(function () { | ||
if ($(this).is(":checked")) { | ||
arr.push($(this).val()); | ||
} | ||
}); | ||
obj.updateDataByString(data, arr); | ||
} else { | ||
obj.updateDataByString(data, val); | ||
} | ||
} | ||
}); | ||
//action | ||
$(document).on(eventType,dataAction,function(e){ | ||
if(e.type == "click" && $(e.target).is("select")){ | ||
return; | ||
} | ||
if(e.type == "input" && $(e.target).attr("type") == "button"){ | ||
return; | ||
} | ||
var events = eventType.split(" "); | ||
var $self = $(this); | ||
var action = "action"; | ||
events.forEach(function(event){ | ||
if ($self.data("action-"+event)) { | ||
if(e.type === event){ | ||
action += "-"+event; | ||
} | ||
} | ||
}); | ||
var string = $self.data(action); | ||
if(!string){ | ||
return; | ||
} | ||
var action = string.replace(/\(.*?\);?/,""); | ||
var parameter = string.replace(/(.*?)\((.*?)\);?/,"$2"); | ||
var pts = parameter.split(",");//引き数 | ||
var id = $self.parents("[data-id]").data("id"); | ||
if(id){ | ||
var obj = getObjectById(id); | ||
obj.e = e; | ||
if(obj.method && obj.method[action]){ | ||
obj.method[action].apply(obj,pts); | ||
}else if(obj[action]){ | ||
obj[action].apply(obj,pts); | ||
} | ||
} | ||
}); | ||
} | ||
@@ -92,447 +92,447 @@ | ||
class aTemplate { | ||
constructor(opt) { | ||
objs.push(this); | ||
for(let i in opt){ | ||
this[i] = opt[i]; | ||
} | ||
if(!this.data){ | ||
this.data = {}; | ||
} | ||
this.setId(); | ||
} | ||
constructor(opt) { | ||
objs.push(this); | ||
for(var i in opt){ | ||
this[i] = opt[i]; | ||
} | ||
if(!this.data){ | ||
this.data = {}; | ||
} | ||
this.setId(); | ||
} | ||
addTemplate(template,id) { | ||
$("body").append("<script type='text/template' id='"+id+"'>"+template+"</script>"); | ||
if(!this.templates){ | ||
this.templates = []; | ||
} | ||
this.templates.push(id); | ||
} | ||
addTemplate(template,id) { | ||
$("body").append("<script type='text/template' id='"+id+"'>"+template+"</script>"); | ||
if(!this.templates){ | ||
this.templates = []; | ||
} | ||
this.templates.push(id); | ||
} | ||
loadHtml() { | ||
let templates = this.templates; | ||
let promises = []; | ||
templates.forEach((template) => { | ||
let d = new $.Deferred(); | ||
promises.push(d); | ||
let src = $("#" + template).attr("src"); | ||
$.ajax({ | ||
url: src, | ||
type: 'GET', | ||
dataType: 'text' | ||
}).success(function(data) { | ||
$("#" + template).html(data); | ||
d.resolve(); | ||
}); | ||
}); | ||
return $.when.apply($, promises); | ||
} | ||
loadHtml() { | ||
var templates = this.templates; | ||
var promises = []; | ||
templates.forEach((template) => { | ||
var d = new $.Deferred(); | ||
promises.push(d); | ||
var src = $("#" + template).attr("src"); | ||
$.ajax({ | ||
url: src, | ||
type: 'GET', | ||
dataType: 'text' | ||
}).success(function(data) { | ||
$("#" + template).html(data); | ||
d.resolve(); | ||
}); | ||
}); | ||
return $.when.apply($, promises); | ||
} | ||
getData () { | ||
return JSON.parse(JSON.stringify(this.data)); | ||
} | ||
getData () { | ||
return JSON.parse(JSON.stringify(this.data)); | ||
} | ||
saveData (key) { | ||
let data = JSON.stringify(this.data); | ||
localStorage.setItem(key, data); | ||
} | ||
saveData (key) { | ||
var data = JSON.stringify(this.data); | ||
localStorage.setItem(key, data); | ||
} | ||
setData (val) { | ||
for (let i in val) { | ||
if (typeof val[i] !== "function") { | ||
this.data[i] = val[i]; | ||
} | ||
} | ||
} | ||
setData (val) { | ||
for (var i in val) { | ||
if (typeof val[i] !== "function") { | ||
this.data[i] = val[i]; | ||
} | ||
} | ||
} | ||
loadData (key) { | ||
let data = JSON.parse(localStorage.getItem(key)); | ||
if (data) { | ||
for (let i in data) { | ||
if (typeof data[i] !== "function") { | ||
this.data[i] = data[i]; | ||
} | ||
} | ||
} | ||
} | ||
loadData (key) { | ||
var data = JSON.parse(localStorage.getItem(key)); | ||
if (data) { | ||
for (var i in data) { | ||
if (typeof data[i] !== "function") { | ||
this.data[i] = data[i]; | ||
} | ||
} | ||
} | ||
} | ||
getRand (a, b) { | ||
return ~~(Math.random() * (b - a + 1)) + a; | ||
} | ||
getRand (a, b) { | ||
return ~~(Math.random() * (b - a + 1)) + a; | ||
} | ||
getRandText (limit) { | ||
let ret = ""; | ||
let strings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | ||
let length = strings.length; | ||
for (let i = 0; i < limit; i++) { | ||
ret += strings.charAt(Math.floor(this.getRand(0, length))); | ||
} | ||
return ret; | ||
} | ||
getRandText (limit) { | ||
var ret = ""; | ||
var strings = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | ||
var length = strings.length; | ||
for (var i = 0; i < limit; i++) { | ||
ret += strings.charAt(Math.floor(this.getRand(0, length))); | ||
} | ||
return ret; | ||
} | ||
setId () { | ||
let text; | ||
let ids = aTemplate.ids; | ||
let flag = false; | ||
while (1) { | ||
text = this.getRandText(10); | ||
for (let i = 0, n = aTemplate.ids; i < n; i++) { | ||
if (aTemplate.ids[i] === text) { | ||
flag = true; | ||
} | ||
} | ||
if (flag === false) { | ||
break; | ||
} | ||
} | ||
this.data.aTemplate_id = text; | ||
} | ||
setId () { | ||
var text; | ||
var ids = aTemplate.ids; | ||
var flag = false; | ||
while (1) { | ||
text = this.getRandText(10); | ||
for (var i = 0, n = aTemplate.ids; i < n; i++) { | ||
if (aTemplate.ids[i] === text) { | ||
flag = true; | ||
} | ||
} | ||
if (flag === false) { | ||
break; | ||
} | ||
} | ||
this.data.aTemplate_id = text; | ||
} | ||
getDataFromObj(s,o){ | ||
s = s.replace(/\[([a-zA-Z0-9._-]+)\]/g, '.$1'); // convert indexes to properties | ||
s = s.replace(/^\./, ''); // strip leading dot | ||
let a = s.split('.'); | ||
while (a.length) { | ||
let n = a.shift(); | ||
if (n in o) { | ||
o = o[n]; | ||
} else { | ||
return; | ||
} | ||
} | ||
return o; | ||
} | ||
getDataFromObj(s,o){ | ||
s = s.replace(/\[([a-zA-Z0-9._-]+)\]/g, '.$1'); // convert indexes to properties | ||
s = s.replace(/^\./, ''); // strip leading dot | ||
var a = s.split('.'); | ||
while (a.length) { | ||
var n = a.shift(); | ||
if (n in o) { | ||
o = o[n]; | ||
} else { | ||
return; | ||
} | ||
} | ||
return o; | ||
} | ||
getDataByString(s){ | ||
let o = this.data; | ||
return this.getDataFromObj(s,o); | ||
} | ||
getDataByString(s){ | ||
var o = this.data; | ||
return this.getDataFromObj(s,o); | ||
} | ||
updateDataByString (path, newValue) { | ||
let object = this.data; | ||
let stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
object[stack.shift()] = newValue; | ||
} | ||
updateDataByString (path, newValue) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
object[stack.shift()] = newValue; | ||
} | ||
removeDataByString (path) { | ||
let object = this.data; | ||
let stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
let shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
} | ||
removeDataByString (path) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
var shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
} | ||
resolveBlock(html,item,i){ | ||
let that = this; | ||
let touchs = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+) -->/g); | ||
let touchnots = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+) -->/g); | ||
let exists = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):exist -->/g); | ||
let empties = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):empty -->/g); | ||
/*タッチブロック解決*/ | ||
if(touchs){ | ||
for(let k = 0,n = touchs.length; k < n; k++){ | ||
let start = touchs[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+)/,"($1):touch#($2)"); | ||
let end = start.replace(/BEGIN/,"END"); | ||
let reg = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(reg,function(m,key2,val,next){ | ||
let itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(itemkey == val){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}) | ||
} | ||
} | ||
/*タッチノットブロック解決*/ | ||
if(touchnots){ | ||
for(let k = 0,n = touchnots.length; k < n; k++){ | ||
let start = touchnots[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+)/,"($1):touchnot#($2)"); | ||
let end = start.replace(/BEGIN/,"END"); | ||
let reg = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(reg,function(m,key2,val,next){ | ||
let itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(itemkey != val){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*existブロックを解決*/ | ||
if(exists){ | ||
for(let k = 0,n = exists.length; k < n; k++){ | ||
let start = exists[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):exist/,"($1):exist"); | ||
let end = start.replace(/BEGIN/,"END"); | ||
let reg = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(reg,function(m,key2,next){ | ||
let itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(itemkey){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*emptyブロックを解決*/ | ||
if(empties){ | ||
for(let k = 0,n = empties.length; k < n; k++){ | ||
let start = empties[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):empty/,"($1):empty"); | ||
let end = start.replace(/BEGIN/,"END"); | ||
let empty = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(empty,function(m,key2,next){ | ||
let itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(!itemkey){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*変数解決*/ | ||
html = html.replace(/{([a-zA-Z0-9._-]+)}(\[([a-zA-Z0-9._-]+)\])*/g,function(n,key3,key4,converter){ | ||
let data; | ||
if(key3 == "i"){ | ||
data = i; | ||
}else{ | ||
if(item[key3]){ | ||
if (typeof item[key3] === "function"){ | ||
data = item[key3].apply(that); | ||
}else{ | ||
data = item[key3]; | ||
} | ||
}else{ | ||
if(converter && that.convert && that.convert[converter]){ | ||
return that.convert[converter].call(that,""); | ||
}else{ | ||
return ""; | ||
} | ||
} | ||
} | ||
if(converter && that.convert && that.convert[converter]){ | ||
return that.convert[converter].call(that,data); | ||
}else{ | ||
return data; | ||
} | ||
}); | ||
return html; | ||
} | ||
/*絶対パス形式の変数を解決*/ | ||
resolveAbsBlock(html){ | ||
let that = this; | ||
html = html.replace(/{(.*?)}/g,function(n,key3){ | ||
let data = that.getDataByString(key3); | ||
if(typeof data !== "undefined"){ | ||
if (typeof data === "function"){ | ||
return data.apply(that); | ||
}else{ | ||
return data; | ||
} | ||
}else{ | ||
return n; | ||
} | ||
}); | ||
return html; | ||
} | ||
resolveBlock(html,item,i){ | ||
var that = this; | ||
var touchs = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+) -->/g); | ||
var touchnots = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+) -->/g); | ||
var exists = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):exist -->/g); | ||
var empties = html.match(/<!-- BEGIN ([a-zA-Z0-9._-]+):empty -->/g); | ||
/*タッチブロック解決*/ | ||
if(touchs){ | ||
for(var k = 0,n = touchs.length; k < n; k++){ | ||
var start = touchs[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):touch#([a-zA-Z0-9._-]+)/,"($1):touch#($2)"); | ||
var end = start.replace(/BEGIN/,"END"); | ||
var reg = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(reg,function(m,key2,val,next){ | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(itemkey == val){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}) | ||
} | ||
} | ||
/*タッチノットブロック解決*/ | ||
if(touchnots){ | ||
for(var k = 0,n = touchnots.length; k < n; k++){ | ||
var start = touchnots[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):touchnot#([a-zA-Z0-9._-]+)/,"($1):touchnot#($2)"); | ||
var end = start.replace(/BEGIN/,"END"); | ||
var reg = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(reg,function(m,key2,val,next){ | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(itemkey != val){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*existブロックを解決*/ | ||
if(exists){ | ||
for(var k = 0,n = exists.length; k < n; k++){ | ||
var start = exists[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):exist/,"($1):exist"); | ||
var end = start.replace(/BEGIN/,"END"); | ||
var reg = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(reg,function(m,key2,next){ | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(itemkey){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*emptyブロックを解決*/ | ||
if(empties){ | ||
for(var k = 0,n = empties.length; k < n; k++){ | ||
var start = empties[k]; | ||
start = start.replace(/([a-zA-Z0-9._-]+):empty/,"($1):empty"); | ||
var end = start.replace(/BEGIN/,"END"); | ||
var empty = new RegExp(start+"(([\\n\\r\\t]|.)*?)"+end,"g"); | ||
html = html.replace(empty,function(m,key2,next){ | ||
var itemkey = typeof item[key2] === "function" ? item[key2].apply(that) : that.getDataFromObj(key2,item); | ||
if(!itemkey){ | ||
return next; | ||
}else{ | ||
return ""; | ||
} | ||
}); | ||
} | ||
} | ||
/*変数解決*/ | ||
html = html.replace(/{([a-zA-Z0-9._-]+)}(\[([a-zA-Z0-9._-]+)\])*/g,function(n,key3,key4,converter){ | ||
var data; | ||
if(key3 == "i"){ | ||
data = i; | ||
}else{ | ||
if(item[key3]){ | ||
if (typeof item[key3] === "function"){ | ||
data = item[key3].apply(that); | ||
}else{ | ||
data = item[key3]; | ||
} | ||
}else{ | ||
if(converter && that.convert && that.convert[converter]){ | ||
return that.convert[converter].call(that,""); | ||
}else{ | ||
return ""; | ||
} | ||
} | ||
} | ||
if(converter && that.convert && that.convert[converter]){ | ||
return that.convert[converter].call(that,data); | ||
}else{ | ||
return data; | ||
} | ||
}); | ||
return html; | ||
} | ||
/*絶対パス形式の変数を解決*/ | ||
resolveAbsBlock(html){ | ||
var that = this; | ||
html = html.replace(/{(.*?)}/g,function(n,key3){ | ||
var data = that.getDataByString(key3); | ||
if(typeof data !== "undefined"){ | ||
if (typeof data === "function"){ | ||
return data.apply(that); | ||
}else{ | ||
return data; | ||
} | ||
}else{ | ||
return n; | ||
} | ||
}); | ||
return html; | ||
} | ||
resolveInclude(html){ | ||
let include = /<!-- #include id="(.*?)" -->/g; | ||
html = html.replace(include,function(m,key){ | ||
return $("#"+key).html(); | ||
}); | ||
return html; | ||
} | ||
resolveInclude(html){ | ||
var include = /<!-- #include id="(.*?)" -->/g; | ||
html = html.replace(include,function(m,key){ | ||
return $("#"+key).html(); | ||
}); | ||
return html; | ||
} | ||
resolveWith(html){ | ||
let width = /<!-- BEGIN ([a-zA-Z0-9._-]+):with -->(([\n\r\t]|.)*?)<!-- END ([a-zA-Z0-9._-]+):with -->/g; | ||
html = html.replace(width,function(m,key,val){ | ||
m = m.replace(/data\-bind=['"](.*?)['"]/g,"data-bind='"+key+".$1'"); | ||
return m; | ||
}); | ||
return html; | ||
} | ||
resolveWith(html){ | ||
var width = /<!-- BEGIN ([a-zA-Z0-9._-]+):with -->(([\n\r\t]|.)*?)<!-- END ([a-zA-Z0-9._-]+):with -->/g; | ||
html = html.replace(width,function(m,key,val){ | ||
m = m.replace(/data\-bind=['"](.*?)['"]/g,"data-bind='"+key+".$1'"); | ||
return m; | ||
}); | ||
return html; | ||
} | ||
resolveLoop(html){ | ||
let loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
let that = this; | ||
/*ループ文解決*/ | ||
html = html.replace(loop,function(m,key,val){ | ||
let keyItem = that.getDataByString(key); | ||
let keys = []; | ||
if(typeof keyItem === "function"){ | ||
keys = keyItem.apply(that); | ||
}else{ | ||
keys = keyItem; | ||
} | ||
let ret = ""; | ||
if(keys instanceof Array){ | ||
for(let i = 0,n = keys.length; i < n; i++){ | ||
ret += that.resolveBlock(val,keys[i],i); | ||
} | ||
} | ||
/*エスケープ削除*/ | ||
ret = ret.replace(/\\([^\\])/g,"$1"); | ||
return ret; | ||
}); | ||
return html; | ||
} | ||
resolveLoop(html){ | ||
var loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
var that = this; | ||
/*ループ文解決*/ | ||
html = html.replace(loop,function(m,key,val){ | ||
var keyItem = that.getDataByString(key); | ||
var keys = []; | ||
if(typeof keyItem === "function"){ | ||
keys = keyItem.apply(that); | ||
}else{ | ||
keys = keyItem; | ||
} | ||
var ret = ""; | ||
if(keys instanceof Array){ | ||
for(var i = 0,n = keys.length; i < n; i++){ | ||
ret += that.resolveBlock(val,keys[i],i); | ||
} | ||
} | ||
/*エスケープ削除*/ | ||
ret = ret.replace(/\\([^\\])/g,"$1"); | ||
return ret; | ||
}); | ||
return html; | ||
} | ||
removeData(arr){ | ||
let data = this.data; | ||
for(let i in data){ | ||
for(let t = 0,n = arr.length; t < n; t++){ | ||
if(i === arr[t]){ | ||
delete data[i]; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
removeData(arr){ | ||
var data = this.data; | ||
for(var i in data){ | ||
for(var t = 0,n = arr.length; t < n; t++){ | ||
if(i === arr[t]){ | ||
delete data[i]; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
hasLoop(txt){ | ||
let loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
if(txt.match(loop)){ | ||
return true; | ||
}else{ | ||
return false; | ||
} | ||
} | ||
hasLoop(txt){ | ||
var loop = /<!-- BEGIN (.+?):loop -->(([\n\r\t]|.)*?)<!-- END (.+?):loop -->/g; | ||
if(txt.match(loop)){ | ||
return true; | ||
}else{ | ||
return false; | ||
} | ||
} | ||
getHtml(selector,row){ | ||
let $template = $(selector); | ||
let html = $template.html(); | ||
if(row){ | ||
html = selector; | ||
} | ||
if(!html){ | ||
return ""; | ||
} | ||
let data = this.data; | ||
/*インクルード解決*/ | ||
html = this.resolveInclude(html); | ||
/*with解決*/ | ||
html = this.resolveWith(html); | ||
/*ループ解決*/ | ||
while(this.hasLoop(html)){ | ||
html = this.resolveLoop(html); | ||
} | ||
/*変数解決*/ | ||
html = this.resolveBlock(html,data); | ||
/*エスケープ削除*/ | ||
html = html.replace(/\\([^\\])/g,"$1"); | ||
/*絶対パスで指定された変数を解決*/ | ||
html = this.resolveAbsBlock(html); | ||
/*空行削除*/ | ||
return html.replace(/^([\t ])*\n/gm,""); | ||
} | ||
getHtml(selector,row){ | ||
var $template = $(selector); | ||
var html = $template.html(); | ||
if(row){ | ||
html = selector; | ||
} | ||
if(!html){ | ||
return ""; | ||
} | ||
var data = this.data; | ||
/*インクルード解決*/ | ||
html = this.resolveInclude(html); | ||
/*with解決*/ | ||
html = this.resolveWith(html); | ||
/*ループ解決*/ | ||
while(this.hasLoop(html)){ | ||
html = this.resolveLoop(html); | ||
} | ||
/*変数解決*/ | ||
html = this.resolveBlock(html,data); | ||
/*エスケープ削除*/ | ||
html = html.replace(/\\([^\\])/g,"$1"); | ||
/*絶対パスで指定された変数を解決*/ | ||
html = this.resolveAbsBlock(html); | ||
/*空行削除*/ | ||
return html.replace(/^([\t ])*\n/gm,""); | ||
} | ||
update(txt,part){ | ||
let html = this.getHtml(); | ||
let templates = this.templates; | ||
let renderWay = txt || "html"; | ||
if(this.beforeUpdated){ | ||
this.beforeUpdated(); | ||
} | ||
for(let i = 0,n = templates.length; i < n; i++){ | ||
let tem = templates[i]; | ||
let selector = "#"+tem; | ||
let html = this.getHtml(selector); | ||
let $target = $("[data-id='"+tem+"']"); | ||
if(!part || part == tem){ | ||
if($target.length == 0){ | ||
let $newitem = $("<div data-id='"+tem+"'></div>"); | ||
$newitem[renderWay](html); | ||
$(selector).after($newitem); | ||
}else{ | ||
$target[renderWay](html); | ||
} | ||
if(part){ | ||
break; | ||
} | ||
} | ||
} | ||
this.updateBindingData(part); | ||
if(this.onUpdated){ | ||
this.onUpdated(part); | ||
} | ||
return this; | ||
} | ||
update(txt,part){ | ||
var html = this.getHtml(); | ||
var templates = this.templates; | ||
var renderWay = txt || "html"; | ||
if(this.beforeUpdated){ | ||
this.beforeUpdated(); | ||
} | ||
for(var i = 0,n = templates.length; i < n; i++){ | ||
var tem = templates[i]; | ||
var selector = "#"+tem; | ||
var html = this.getHtml(selector); | ||
var $target = $("[data-id='"+tem+"']"); | ||
if(!part || part == tem){ | ||
if($target.length == 0){ | ||
var $newitem = $("<div data-id='"+tem+"'></div>"); | ||
$newitem[renderWay](html); | ||
$(selector).after($newitem); | ||
}else{ | ||
$target[renderWay](html); | ||
} | ||
if(part){ | ||
break; | ||
} | ||
} | ||
} | ||
this.updateBindingData(part); | ||
if(this.onUpdated){ | ||
this.onUpdated(); | ||
} | ||
return this; | ||
} | ||
updateBindingData(part){ | ||
let that = this; | ||
let templates = that.templates; | ||
for(let i = 0,n = templates.length; i < n; i++){ | ||
let temp = templates[i]; | ||
if(!part || part == temp){ | ||
let $template = $("[data-id='"+temp+"']"); | ||
$template.find("[data-bind]").each(function(){ | ||
let data = that.getDataByString($(this).data("bind")); | ||
if($(this).attr("type") == "checkbox" || $(this).attr("type") == "radio"){ | ||
if(data == $(this).val()){ | ||
$(this).prop("checked",true); | ||
} | ||
}else{ | ||
$(this).val(data); | ||
} | ||
}); | ||
if(part){ | ||
break; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
updateBindingData(part){ | ||
var that = this; | ||
var templates = that.templates; | ||
for(var i = 0,n = templates.length; i < n; i++){ | ||
var temp = templates[i]; | ||
if(!part || part == temp){ | ||
var $template = $("[data-id='"+temp+"']"); | ||
$template.find("[data-bind]").each(function(){ | ||
var data = that.getDataByString($(this).data("bind")); | ||
if($(this).attr("type") == "checkbox" || $(this).attr("type") == "radio"){ | ||
if(data == $(this).val()){ | ||
$(this).prop("checked",true); | ||
} | ||
}else{ | ||
$(this).val(data); | ||
} | ||
}); | ||
if(part){ | ||
break; | ||
} | ||
} | ||
} | ||
return this; | ||
} | ||
copyToClipBoard () { | ||
let copyArea = $("<textarea/>"); | ||
$("body").append(copyArea); | ||
copyArea.text(this.getHtml()); | ||
copyArea.select(); | ||
document.execCommand("copy"); | ||
copyArea.remove(); | ||
return this; | ||
} | ||
copyToClipBoard () { | ||
var copyArea = $("<textarea/>"); | ||
$("body").append(copyArea); | ||
copyArea.text(this.getHtml()); | ||
copyArea.select(); | ||
document.execCommand("copy"); | ||
copyArea.remove(); | ||
return this; | ||
} | ||
applyMethod (method) { | ||
let args = [].splice.call(arguments, 0); | ||
args.shift(); | ||
return this.method[method].apply(this, args); | ||
} | ||
applyMethod (method) { | ||
var args = [].splice.call(arguments, 0); | ||
args.shift(); | ||
return this.method[method].apply(this, args); | ||
} | ||
getComputedProp (prop) { | ||
return this.data[prop].apply(this); | ||
} | ||
getComputedProp (prop) { | ||
return this.data[prop].apply(this); | ||
} | ||
remove (path) { | ||
let object = this.data; | ||
let stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
let shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
return this; | ||
} | ||
remove (path) { | ||
var object = this.data; | ||
var stack = path.split('.'); | ||
while (stack.length > 1) { | ||
object = object[stack.shift()]; | ||
} | ||
var shift = stack.shift(); | ||
if (shift.match(/^\d+$/)) { | ||
object.splice(Number(shift), 1); | ||
} else { | ||
delete object[shift]; | ||
} | ||
return this; | ||
} | ||
} | ||
module.exports = aTemplate; |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
257178
15
12
3218