aboutsummaryrefslogtreecommitdiffstats
path: root/docs/src/dom.js
diff options
context:
space:
mode:
Diffstat (limited to 'docs/src/dom.js')
-rw-r--r--docs/src/dom.js123
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, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;'));
+ } 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