UNPKG

3.77 kBJavaScriptView Raw
1!function(){var CoffeeScript,indentText,keywords,keywordsRegex,util,__slice=[].slice;CoffeeScript=require("coffee-script");indentText=function(text,indent){if(indent==null){indent=" "}return indent+text.replace(/\n/g,"\n"+indent)};keywords=["on","each","with"];keywordsRegex=RegExp("^\\s*("+keywords.join("|")+")\\s+");util={indent:indentText,filters:{verbatim:function(content,compiler){return compiler.buffer('"""'+content.replace(/(#)/,"\\$1")+'"""')},plain:function(content,compiler){return compiler.buffer(JSON.stringify(content))},coffeescript:function(content,compiler){return[content]},javascript:function(content,compiler){return["`",compiler.indent(content),"`"]}},element:function(tag,contents){var lines;if(contents==null){contents=[]}return lines=["__runtime.push document.createElement("+JSON.stringify(tag)+")"].concat(__slice.call(contents),["__runtime.pop()"])},buffer:function(value){return["__runtime.text "+value]},attributes:function(node){var attributeLines,attributes,classes,id,ids,idsAndClasses;id=node.id,classes=node.classes,attributes=node.attributes;if(id){ids=[JSON.stringify(id)]}else{ids=[]}classes=(classes||[]).map(JSON.stringify);if(attributes){attributes=attributes.filter(function(_arg){var name,value;name=_arg.name,value=_arg.value;if(name==="class"){classes.push(value);return false}else if(name==="id"){ids.push(value);return false}else{return true}})}else{attributes=[]}idsAndClasses=[];if(ids.length){idsAndClasses.push("__runtime.id "+ids.join(", "))}if(classes.length){idsAndClasses.push("__runtime.classes "+classes.join(", "))}attributeLines=attributes.map(function(_arg){var name,value;name=_arg.name,value=_arg.value;name=JSON.stringify(name);return"__runtime.attribute "+name+", "+value});return idsAndClasses.concat(attributeLines)},render:function(node){var filter,tag,text;tag=node.tag,filter=node.filter,text=node.text;if(tag){return this.tag(node)}else if(filter){return this.filter(node)}else{return this.contents(node)}},replaceKeywords:function(codeString){return codeString.replace(keywordsRegex,"__runtime.$1 ")},filter:function(node){var filter,filterName;filterName=node.filter;if(filter=this.filters[filterName]){return[].concat.apply([],this.filters[filterName](node.content,this))}else{return["__runtime.filter("+JSON.stringify(filterName)+", "+JSON.stringify(node.content)+")"]}},contents:function(node){var bufferedCode,childContent,children,code,contents,indent,text,unbufferedCode;children=node.children,bufferedCode=node.bufferedCode,unbufferedCode=node.unbufferedCode,text=node.text;if(unbufferedCode){indent=true;code=this.replaceKeywords(unbufferedCode);contents=[code]}else if(bufferedCode){contents=this.buffer(bufferedCode)}else if(text){contents=this.buffer(JSON.stringify(text))}else if(node.tag){contents=[]}else if(node.comment){return[]}else{contents=[];console.warn("No content for node:",node)}if(children){childContent=this.renderNodes(children);if(indent){childContent=this.indent(childContent.join("\n"))}contents=contents.concat(childContent)}return this.attributes(node).concat(contents)},renderNodes:function(nodes){return[].concat.apply([],nodes.map(this.render,this))},tag:function(node){var tag;tag=node.tag;return this.element(tag,this.contents(node))}};exports.compile=function(parseTree,_arg){var compiler,items,options,program,programSource,source;compiler=(_arg!=null?_arg:{}).compiler;if(compiler){CoffeeScript=compiler}items=util.renderNodes(parseTree);source="(data) ->\n (->\n __runtime = HAMLjr.Runtime(this)\n\n __runtime.push document.createDocumentFragment()\n"+util.indent(items.join("\n")," ")+"\n __runtime.pop()\n ).call(data)";options={bare:true};programSource=source;program=CoffeeScript.compile(programSource,options);return program}}.call(this);
\No newline at end of file