html2halvalla v2.4.0
Not fully complete, but still a huge time saver. Tested on dozens of files that only needed minor touch ups after conversion.
Installation
npm install -g html2halvallaCommand Line Synopsys
html2halvalla test/simple.htmlExample Output (for above usage)
T.doctype TODO
T.html ->
T.head ->
T.title 'A simple test page'
T.style type: 'text/css', '.foo {\n color: red\n }'
T.body '.awesome', ->
T.div '#root.super.special', ->
T.comment 'This page is rapidly becoming not-so-simple'
T.h1 'A simple test page'
T.p ->
T.text 'With some awesome text, and a'
T.a href: 'http://www.google.com', 'link'
T.text '.'
T.p '#paragraph_2', ->
T.text 'And here is an image:'
T.img src: 'fake/source', title: 'not really'
T.text 'As well as a disabled select:'
T.select disabled: 'disabled', ->
T.option 'Oh boy!'
T.script type: 'text/javascript', 'console.log("Hello there");\n console.log("How\'s it going?");'
T.span()Full Command Line Usage
html2halvalla [options] <html-file>
--prefix=<string> Prepends a string to each element function call default 'T.'
--s=slug creates output directory for contents
--b=breakoutId break tag with id to separate havalla source
--m=matchtext exact match for text in html -- inserts 'id="b-value' in html tag
--e=extractList extract repeated tags by tagname and classname RE -- inserts 'id=b-value_0123455'
--selfTest append code to render the halvalla template for test--
See "Supported options" below for additional details.
internal API
convert(html, stream, [options], [callback])
html must be a string.
stream is a "Writable Stream".
options is an optional hash. See next section for details.
callback is optional and passed (error) if something goes wrong.
Supported options:
prefixprepends a string to the begining of each element functional call. (default:'T.')
For example, using the prefix
@would result in@body ->.
bis a string for the breakoutId. "Break Out" this tag ID element and it's children as a separate file. The HTML tag with that id is directed to a new halvalla source class and file in the slug directoryexample '--b=bloviation' will direct a
<tag ID='bloviation' ...to a new file in the slug directory wrapped in a class statementmis a string that matches the original html text and inserts the breakoutId into a tag that can only be doescribed by it's actual text of classnames.the output files
test/footer.coffeeandtest/header.coffeeare examples.eis a RE of the form 'tagname..class-to-find..find-this-class-too' and inserts the matchinghtml elements into the Break Out file. Matched classes will have unique tag names based on the breakoutId. see the file
test/blov/dicey.coffeefor an example extracted fromtest/bs.html.
Example REPL Session
bin/html2halvalla --b=header --m='<header' --b=footer --m='<footer' --b=bloviation --m='div class="large-8 columns"' --s=blov test/bs.htmlMatches the '<header' text in the html and replace it with `<header id="#{option b.value}" <header id=header
And will decode an html file into four separate files named html.coffee, header.coffee, footer.coffee and bloviation.coffee (If the id for 'bloviation' already exists in the html file, the '-m' option is not needed.)