diff options
Diffstat (limited to 'docs/src/dom.js')
| -rw-r--r-- | docs/src/dom.js | 123 | 
1 files changed, 123 insertions, 0 deletions
| diff --git a/docs/src/dom.js b/docs/src/dom.js new file mode 100644 index 00000000..e6dd09e6 --- /dev/null +++ b/docs/src/dom.js @@ -0,0 +1,123 @@ +/** + * DOM generation class + */ + +exports.DOM = DOM; + +////////////////////////////////////////////////////////// + +function DOM(){ +  this.out = []; +  this.headingDepth = 1; +} + +var INLINE_TAGS = { +    i: true, +    b: true +}; + +DOM.prototype = {  +  toString: function() { +    return this.out.join(''); +  }, +   +  text: function(content) { +    if (typeof content == "string") { +      this.out.push(content.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>')); +    } else if (typeof content == 'function') { +      content.call(this, this); +    } else if (content instanceof Array) { +      this.ul(content); +    } +  }, + +  html: function(html) { +    if (html) { +      this.out.push(html); +    } +  }, + +  tag: function(name, attr, text) { +    if (!text) { +      text = attr; +      attr = {}; +      if (name == 'code') +        attr['ng:non-bindable'] = ''; +    } +    this.out.push('<' + name); +    for(var key in attr) { +      this.out.push(" " + key + '="' + attr[key] + '"'); +    } +    this.out.push('>'); +    this.text(text); +    this.out.push('</' + name + '>'); +    if (!INLINE_TAGS[name])  +      this.out.push('\n'); +  }, +   +  code: function(text) { +    this.tag('div', {'ng:non-bindable':''}, function(){ +      this.tag('pre', {'class':"brush: js; html-script: true;"}, text); +    }); +  }, +   +  example: function(source, scenario) { +    if (source || scenario) { +      this.h('Example', function(){ +        if (scenario === false) { +          this.code(source); +        } else { +          this.tag('doc:example', function(){ +            if (source) this.tag('doc:source', source); +            if (scenario) this.tag('doc:scenario', scenario); +          }); +        } +      }); +    } +  }, +   +  h: function(heading, content, fn){ +    if (content==undefined || content && content.legth == 0) return; +    this.tag('h' + this.headingDepth, heading); +    this.headingDepth++; +    if (content instanceof Array) { +      this.ul(content, {'class': heading.toLowerCase()}, fn); +    } else if (fn) { +      fn.call(this, content); +    } else { +      this.text(content); +    }  +    this.headingDepth--; +  }, +   +  h1: function(attr, text) { +    this.tag('h1', attr, text); +  }, +   +  h2: function(attr, text) { +    this.tag('h2', attr, text); +  }, +   +  h3: function(attr, text) { +    this.tag('h3', attr, text); +  }, +   +  p: function(attr, text) { +    this.tag('p', attr, text); +  }, +   +  ul: function(list, attr, fn) { +    if (typeof attr == 'function') { +      fn = attr; +      attr = {}; +    } +    this.tag('ul', attr, function(dom){ +      list.forEach(function(item){ +        dom.out.push('<li>'); +        dom.text(fn ? fn(item) : item); +        dom.out.push('</li>\n'); +      }); +    }); +  } +   +};
\ No newline at end of file | 
