/** * 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, '>')); } 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(''); 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(description, source, scenario) { if (description || source || scenario) { this.h('Example', function(){ if (description) this.html(description); 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++; var className = {'class': heading.toLowerCase()}; if (content instanceof Array) { this.ul(content, className, fn); } else if (fn) { this.tag('div', className, fn); } else { this.tag('div', className, 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('
  • '); dom.text(fn ? fn(item) : item); dom.out.push('
  • \n'); }); }); } }; 4f4a5e96'>docs/src/gen-docs.js
    blob: 2915e110316938bd162021edb2c3ec93ee39834a (plain)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    
    var reader = require('./reader.js'),
        ngdoc = require('./ngdoc.js'),
        writer = require('./writer.js'),
        SiteMap = require('./SiteMap.js').SiteMap,
        appCache = require('./appCache.js').appCache,
        Q = require('qq');
    
    process.on('uncaughtException', function(err) {
      console.error(err.stack || err);
    });
    
    var start = now();
    var docs;
    
    writer.makeDir('build/docs/syntaxhighlighter').then(function() {
      console.log('Generating Angular Reference Documentation...');
      return reader.collect();
    }).then(function generateHtmlDocPartials(docs_) {
      docs = docs_;
      ngdoc.merge(docs);
      var fileFutures = [];
      docs.forEach(function(doc){
        // this hack is here because on OSX angular.module and angular.Module map to the same file.
        var id = doc.id.replace('angular.Module', 'angular.IModule');
        fileFutures.push(writer.output('partials/' + doc.section + '/' + id + '.html', doc.html()));
      });
    
      writeTheRest(fileFutures);
    
      return Q.deep(fileFutures);
    }).then(function generateManifestFile() {
      return appCache('build/docs/').then(function(list) {
        writer.output('appcache-offline.manifest', list);
      });
    }).then(function printStats() {
      console.log('DONE. Generated ' + docs.length + ' pages in ' + (now()-start) + 'ms.' );
    }).end();
    
    
    function writeTheRest(writesFuture) {
      var metadata = ngdoc.metadata(docs);
    
      writesFuture.push(writer.copyDir('img'));
      writesFuture.push(writer.copyDir('examples'));
    
      var manifest = 'manifest="/build/docs/appcache.manifest"';
    
      writesFuture.push(writer.copy('docs/src/templates/index.html', 'build/docs/index.html',
                                    writer.replace, {'doc:manifest': ''})); //manifest //TODO(i): enable
    
      writesFuture.push(writer.copy('docs/src/templates/index.html', 'build/docs/index-nocache.html',
                                    writer.replace, {'doc:manifest': ''}));
    
    
      writesFuture.push(writer.copy('docs/src/templates/index.html', 'build/docs/index-jq.html',
                                    writer.replace, {'doc:manifest': manifest}));
    
      writesFuture.push(writer.copy('docs/src/templates/index.html', 'build/docs/index-jq-nocache.html',
                                    writer.replace, {'doc:manifest': ''}));
    
    
      writesFuture.push(writer.copy('docs/src/templates/index.html', 'build/docs/index-debug.html',
                                    writer.replace, {'doc:manifest': ''}));
    
      writesFuture.push(writer.copy('docs/src/templates/index.html', 'build/docs/index-jq-debug.html',
                                    writer.replace, {'doc:manifest': ''}));
    
      writesFuture.push(writer.copyTpl('offline.html'));
      writesFuture.push(writer.copyTpl('docs-scenario.html'));
      writesFuture.push(writer.copyTpl('jquery.min.js'));
    
      writesFuture.push(writer.output('docs-keywords.js',
                                    ['NG_PAGES=', JSON.stringify(metadata).replace(/{/g, '\n{'), ';']));
      writesFuture.push(writer.output('sitemap.xml', new SiteMap(docs).render()));
      writesFuture.push(writer.output('docs-scenario.js', ngdoc.scenarios(docs)));
      writesFuture.push(writer.output('robots.txt', 'Sitemap: http://docs.angularjs.org/sitemap.xml\n'));
      writesFuture.push(writer.output('appcache.manifest',appCache()));
      writesFuture.push(writer.copyTpl('.htaccess'));
    
      writesFuture.push(writer.merge(['docs.js',
                                      'doc_widgets.js'],
                                      'docs-combined.js'));
      writesFuture.push(writer.merge(['docs.css',
                                      'doc_widgets.css'],
                                      'docs-combined.css'));
      writesFuture.push(writer.merge(['syntaxhighlighter/shCore.js',
                                      'syntaxhighlighter/shBrushJScript.js',
                                      'syntaxhighlighter/shBrushXml.js'],
                                      'syntaxhighlighter/syntaxhighlighter-combined.js'));
      writesFuture.push(writer.merge(['syntaxhighlighter/shCore.css',
                                      'syntaxhighlighter/shThemeDefault.css'],
                                      'syntaxhighlighter/syntaxhighlighter-combined.css'));
    }
    
    
    function now() { return new Date().getTime(); }
    
    function noop() {};