diff options
Diffstat (limited to 'docs/src/example.js')
| -rw-r--r-- | docs/src/example.js | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/docs/src/example.js b/docs/src/example.js new file mode 100644 index 00000000..519b6cb1 --- /dev/null +++ b/docs/src/example.js @@ -0,0 +1,126 @@ +var seqCount = 0; +var usedIds = {}; +var makeUnique = { + 'index.html': true, + 'style.css': true, + 'script.js': true, + 'unit.js': true, + 'spec.js': true, + 'scenario.js': true +} + +function ids(list) { + return list.map(function(item) { return item.id; }).join(' '); +}; + + +exports.Example = function(scenarios) { + this.module = ''; + this.deps = ['angular.js']; + this.html = []; + this.css = []; + this.js = []; + this.unit = []; + this.scenario = []; + this.scenarios = scenarios; +} + +exports.Example.prototype.setModule = function(module) { + if (module) { + this.module = module; + } +}; + +exports.Example.prototype.addDeps = function(deps) { + deps && deps.split(/[\s\,]/).forEach(function(dep) { + if (dep) { + this.deps.push(dep); + } + }, this); +}; + +exports.Example.prototype.addSource = function(name, content) { + var ext = name == 'scenario.js' ? 'scenario' : name.split('.')[1], + id = name; + + if (makeUnique[name] && usedIds[id]) { + id = name + '-' + (seqCount++); + } + usedIds[id] = true; + + this[ext].push({name: name, content: content, id: id}); + if (name.match(/\.js$/) && name !== 'spec.js' && name !== 'unit.js' && name != 'scenario.js') { + this.deps.push(name); + } + if (ext == 'scenario') { + this.scenarios.push(content); + } +}; + +exports.Example.prototype.toHtml = function() { + return '<h1>Demo Source Code</h1>\n' + + this.toHtmlEdit() + + this.toHtmlTabs() + + '<h1>Demo Source Code</h1>\n' + + this.toHtmlEmbed(); +}; + + +exports.Example.prototype.toHtmlEdit = function() { + var out = []; + out.push('<div source-edit="' + this.module + '"'); + out.push(' source-edit-deps="' + this.deps.join(' ') + '"'); + out.push(' source-edit-html="' + ids(this.html) + '"'); + out.push(' source-edit-css="' + ids(this.css) + '"'); + out.push(' source-edit-js="' + ids(this.js) + '"'); + out.push(' source-edit-unit="' + ids(this.unit) + '"'); + out.push(' source-edit-scenario="' + ids(this.scenario) + '"'); + out.push('></div>\n'); + return out.join(''); +}; + +exports.Example.prototype.toHtmlTabs = function() { + var out = [], + self = this; + + out.push('<div class="tabbable">'); + htmlTabs(this.html); + htmlTabs(this.css); + htmlTabs(this.js); + htmlTabs(this.unit); + htmlTabs(this.scenario); + out.push('</div>'); + return out.join(''); + + function htmlTabs(sources) { + sources.forEach(function(source) { + var wrap = '', + isCss = source.name.match(/\.css$/), + name = source.name; + + if (name === 'index.html') { + wrap = ' ng-html-wrap="' + self.module + ' ' + self.deps.join(' ') + '"'; + } + if (name == 'scenario.js') name = 'End to end test'; + + out.push( + '<div class="tab-pane" title="' + name + '">\n' + + '<pre class="prettyprint linenums" ng-set-text="' + source.id + '"' + wrap + '></pre>\n' + + (isCss + ? ('<style type="text/css" id="' + source.id + '">' + source.content + '</style>\n') + : ('<script type="text/ng-template" id="' + source.id + '">' + source.content + '</script>\n') ) + + '</div>\n'); + }); + } +}; + +exports.Example.prototype.toHtmlEmbed = function() { + var out = []; + out.push('<div class="well doc-example-live"'); + out.push(' ng-embed-app="' + this.module + '"'); + out.push(' ng-set-html="' + this.html[0].id + '"'); + out.push(' ng-eval-javascript="' + ids(this.js) + '">'); + out.push('</div>'); + return out.join(''); +}; + |
