diff --git a/examples.html b/examples.html index f5a09df..4aa27fb 100644 --- a/examples.html +++ b/examples.html @@ -15,6 +15,10 @@ pageTitle : "Weld examples", description : "Below is a list of examples", dogfood : "This page was rendered with weld", + link: { + "@.": "foo", + "@href": "bar" + }, example : [ { title : 'Render an object into some elements', @@ -44,6 +48,7 @@

Random title

This is a description about this page..

+

here is some dogfood

diff --git a/lib/weld.js b/lib/weld.js index f66fee3..5ffc96d 100644 --- a/lib/weld.js +++ b/lib/weld.js @@ -340,6 +340,27 @@ obj = value[lkey]; target = ops.match(template, element, lkey, obj); + if(lkey.length > 1 && lkey[0] == '@') { + var attr = lkey.substr(1); + + if(attr == '.') { + + // set the element's value as normal + if(~({}).toString.call(value).indexOf('Date')) { + value[lkey] = value[lkey].toString(); + } + + if (value.nodeType || typeof value[lkey] !== 'object') { + ops.set(parent, element, key, value[lkey], row); + } + } else { + // set the element's attribute + element.setAttribute(attr, value[lkey]); + } + + continue; + } + if (target) { ops.traverse(template, target, lkey, obj, row); @@ -444,6 +465,8 @@ return res; }, match : function match(parent, element, key, value) { + if(key[0] == '@') return; + if(typeof config.alias[key] !== 'undefined') { if(typeof config.alias[key] === 'function') { key = config.alias[key](parent, element, key, value) || key; diff --git a/lib/weld.min.js b/lib/weld.min.js index 3353c24..cc73e71 100644 --- a/lib/weld.min.js +++ b/lib/weld.min.js @@ -1 +1 @@ -(function(i){var o=(typeof console==="undefined")?{log:function(){}}:console;var a=false;if(typeof require!=="undefined"){var m=require("tty");if(m.isatty&&m.isatty(0)){a=true}}var h={gray:"\033[37m",darkgray:"\033[40;30m",red:"\033[31m",green:"\033[32m",yellow:"\033[33m",lightblue:"\033[1;34m",cyan:"\033[36m",white:"\033[1;37m"},c=/input|select|textarea|option|button/i,g=/img/i,l=0,f=a?(h.green+" ✓"+h.gray):" Success",k=a?(h.red+" ✗"+h.gray):" Fail",j=function j(r,d){var q=r.toUpperCase();return function(v,u,t,w){o.log(e(),((a?(h.gray+"┌ "):"+ ")+q+" -"),"parent:",b(v)+",","element:",b(u)+",","key:",b(t)+",","value:",b(w));l+=1;if(d){var s=d(v,u,t,w);l-=1;o.log(e(),(a?"└ ":"+ ")+u+""+(s!==false?f:k));return s}l-=1;n("- OPERATION NOT FOUND: ",q)}},e=function e(){var d=l,q="";while(d--){q+=a?" │ ":" | "}return q},n=function n(){var d=Array.prototype.slice.call(arguments);o.log(e(),d.join(" "))},b=function b(r){var q=r+"",d="undefined";if(a){if(q==="false"||q==="null"||q===""||q===d||typeof r===d||r===false){if(q===""){q="(empty string)"}return h.red+q+h.gray}else{return h.yellow+q+h.gray}}return q};i.weld=function p(y,u,D){var t={alias:{},debug:false,insert:false},s={siblings:function A(L,G,N,K){var H=[],M,F,E,I,J=L.children;cs=J.length;G.weld={parent:L,classes:G.className.split(" ")};while(cs--){M=J[cs];if(M===G){if(cs-1){return L}}}}}},B=y.parentNode,q,r,z,d;if(D){for(r in D){if(D.hasOwnProperty(r)){t[r]=D[r]}}}d=t.debug;for(q in s){if(s.hasOwnProperty(q)){currentOp=s[q];z=t[q]||s[q];if(d){z=j(q,z)}s[q]=z}}s.traverse(null,y,null,u);if(t.debug){o.log(B.innerHTML)}}})((typeof exports==="undefined")?window:exports); \ No newline at end of file +(function(exports){if(!Object.keys){var hasDontEnumBug=true,dontEnums=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],dontEnumsLength=dontEnums.length;for(var key in{toString:null}){hasDontEnumBug=false}Object.keys=function keys(object){if(typeof object!=="object"&&typeof object!=="function"||object===null){throw new TypeError("Object.keys called on a non-object")}var keys=[];for(var name in object){if(object.hasOwnProperty(name)){keys.push(name)}}if(hasDontEnumBug){for(var i=0,ii=dontEnumsLength;i>>0;if(len===0){return-1}var n=0;if(arguments.length>0){n=Number(arguments[1]);if(n!=n){n=0}else if(n!=0&&n!=Infinity&&n!=-Infinity){n=(n>0||-1)*Math.floor(Math.abs(n))}}if(n>=len){return-1}var k=n>=0?n:Math.max(len-Math.abs(n),0);for(;k1&&lkey[0]=="@"){var attr=lkey.substr(1);if(attr=="."){if(~{}.toString.call(value).indexOf("Date")){value[lkey]=value[lkey].toString()}if(value.nodeType||typeof value[lkey]!=="object"){ops.set(parent,element,key,value[lkey],row)}}else{element.setAttribute(attr,value[lkey])}continue}if(target){ops.traverse(template,target,lkey,obj,row)}else if(target!==false&&typeof obj==="object"&&Object.keys(obj).length>0){ops.traverse(templateParent,template,lkey,obj)}}}},elementType:function elementType(parent,element,key,value){if(element){var nodeName=element.nodeName;if(typeof nodeName==="string"){if(inputRegex.test(nodeName)){return"input"}if(imageRegex.test(nodeName)){return"image"}if(textareaRegex.test(nodeName)){return"textarea"}}}},map:false,insert:function(parent,element){if(element.weld&&element.weld.insertBefore){parent.insertBefore(element,element.weld.insertBefore)}else{parent.appendChild(element)}},set:function set(parent,element,key,value,row){if(ops.map&&ops.map(parent,element,key,value,row)===false){return false}if(debug){d("- SET: value is",value.tagName)}var type=ops.elementType(parent,element,key,value),res=false;if(value&&value.nodeType){if(element.ownerDocument!==value.ownerDocument){value=element.ownerDocument.importNode(value,true)}else if(value.parentNode){value.parentNode.removeChild(value)}while(element.firstChild){element.removeChild(element.firstChild)}element.appendChild(value);res=true}else if(type==="input"){if(element.tagName.toLowerCase()==="select"){element.value=value}else if(element.type.toLowerCase()==="checkbox"){if(truthyRegex.test(value)){element.setAttribute("checked",true)}else if(element.hasAttribute("checked")){element.removeAttribute("checked")}}else{element.setAttribute("value",value)}res=true}else if(type==="image"){element.setAttribute("src",value);res=true}else if(type==="textarea"){element.textContent=value;if(element.value!==value){element.value=value}res=true}else{element.textContent=value;res=true}return res},match:function match(parent,element,key,value){if(key[0]=="@")return;if(typeof config.alias[key]!=="undefined"){if(typeof config.alias[key]==="function"){key=config.alias[key](parent,element,key,value)||key}else if(config.alias[key]===false){return false}else{key=config.alias[key]}}if(key&&key.nodeType){return key}if(element){if(element.querySelector){return element.querySelector("."+key+",#"+key+',[name="'+key+'"]')}else{var els=element.getElementsByTagName("*"),l=els.length,e,i;for(i=0;i-1){return e}}}}}};for(currentOpKey in ops){if(ops.hasOwnProperty(currentOpKey)){currentOp=ops[currentOpKey];fn=config[currentOpKey]||ops[currentOpKey];if(debug){fn=debuggable(currentOpKey,fn)}ops[currentOpKey]=fn}}ops.traverse(null,DOMTarget,null,data);if(config.debug){logger.log(DOMTarget.outerHTML)}};if(typeof exports.define!=="undefined"&&exports.define.amd){define("weld",[],function(){return window.weld})}})(typeof process!=="undefined"&&typeof process.title!=="undefined"?exports:window);