aboutsummaryrefslogtreecommitdiffstats
path: root/docs/spec/sourceLinkSpec.js
blob: 68d952369400b54659986ac469a433967f0ba51b (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
var ngdoc = require('../src/ngdoc.js');
var gruntUtil = require('../../lib/grunt/utils.js');

describe('Docs Links', function() {

  describe('links', function() {
    var doc;

    beforeEach(function() {
      doc = new ngdoc.Doc("@ngdoc function\n@name ng.filter:a\n@function");
      doc.section = 'api';
      doc.file = 'test.js';
      doc.line = 42;
      doc.parse();
    });

    it('should have an "improve this doc" button', function() {
      expect(doc.html()).
        toContain('<a href="http://github.com/angular/angular.js/edit/master/test.js" class="improve-docs btn btn-primary"><i class="icon-edit"> </i> Improve this doc</a>');
    });

    it('should have an "view source" button', function() {
      spyOn(gruntUtil, 'getVersion').andReturn({cdn: '1.2.299'});

      expect(doc.html()).
        toContain('<a href="http://github.com/angular/angular.js/tree/v1.2.299/test.js#L42" class="view-source btn btn-action"><i class="icon-zoom-in"> </i> View source</a>');
    });
  });

});
/span> '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.json = []; 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.enableAnimations = function() { this.animations = true; }; exports.Example.prototype.disableAnimations = function() { this.animations = false; }; exports.Example.prototype.toHtml = function() { var html = "<h2>Source</h2>\n"; html += this.toHtmlEdit(); html += this.toHtmlTabs(); if(this.animations) { html += '<div class="pull-right">'; html += ' <button class="btn btn-primary" ng-click="animationsOff=true" ng-hide="animationsOff">Animations on</button>'; html += ' <button class="btn btn-primary disabled" ng-click="animationsOff=false" ng-show="animationsOff">Animations off</button>'; html += '</div>'; } html += "<h2>Demo</h2>\n"; html += this.toHtmlEmbed(); return html; }; 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-json="' + ids(this.json) + '"'); 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.json); 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 animate-container"'); if(this.animations) { out.push(" ng-class=\"{'animations-off':animationsOff == true}\""); } 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(''); };