From 258cae83dc1a03b6b878a7b4236c499288cd2624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matias=20Niemel=C3=A4?= Date: Mon, 8 Jul 2013 21:58:14 -0400 Subject: [PATCH] chore(ngdocs): replace showdown.js with marked.js --- docs/component-spec/annotationsSpec.js | 2 +- .../components/angular-bootstrap/bootstrap.js | 12 ++- docs/spec/ngdocSpec.js | 79 +++++++++---------- docs/src/gen-docs.js | 3 +- docs/src/ngdoc.js | 10 ++- docs/src/templates/index.html | 2 +- karma-docs.conf.js | 2 +- package.json | 2 +- src/ng/animator.js | 2 +- src/ng/directive/ngRepeat.js | 2 +- 10 files changed, 62 insertions(+), 54 deletions(-) diff --git a/docs/component-spec/annotationsSpec.js b/docs/component-spec/annotationsSpec.js index 29cb9c53ef99..321118add9e6 100644 --- a/docs/component-spec/annotationsSpec.js +++ b/docs/component-spec/annotationsSpec.js @@ -57,7 +57,7 @@ describe('Docs Annotations', function() { $scope.$apply(); element.triggerHandler('click'); expect(popoverElement.title()).toBe('#title_text'); - expect(popoverElement.content()).toBe('

heading

'); + expect(popoverElement.content()).toBe('

heading

\n'); })); }); diff --git a/docs/components/angular-bootstrap/bootstrap.js b/docs/components/angular-bootstrap/bootstrap.js index 71972200c607..170e88053b99 100644 --- a/docs/components/angular-bootstrap/bootstrap.js +++ b/docs/components/angular-bootstrap/bootstrap.js @@ -257,7 +257,7 @@ var popoverElement = function() { content : function(value) { if(value && value.length > 0) { - value = new Showdown.converter().makeHtml(value); + value = marked(value); } return this.contentElement.html(value); }, @@ -380,4 +380,12 @@ directive.foldout = ['$http', '$animator','$window', function($http, $animator, } }]; -angular.module('bootstrap', []).directive(directive).factory('popoverElement', popoverElement); +angular.module('bootstrap', []) + .directive(directive) + .factory('popoverElement', popoverElement) + .run(function() { + marked.setOptions({ + gfm: true, + tables: true + }); + }); diff --git a/docs/spec/ngdocSpec.js b/docs/spec/ngdocSpec.js index 128e01066310..607745d85d47 100644 --- a/docs/spec/ngdocSpec.js +++ b/docs/spec/ngdocSpec.js @@ -59,10 +59,10 @@ describe('ngdoc', function() { '@param {function(number, string=)} d fn with optional arguments'); doc.parse(); expect(doc.param).toEqual([ - {name:'a', description:'

short

', type:'*', optional:false, 'default':undefined}, - {name:'b', description:'

med

', type:'Type', optional:false, 'default':undefined}, - {name:'c', description:'

long\nline

', type:'Class', optional:true, 'default':'2'}, - {name:'d', description:'

fn with optional arguments

', + {name:'a', description:'

short

\n
', type:'*', optional:false, 'default':undefined}, + {name:'b', description:'

med

\n
', type:'Type', optional:false, 'default':undefined}, + {name:'c', description:'

long\nline

\n
', type:'Class', optional:true, 'default':'2'}, + {name:'d', description:'

fn with optional arguments

\n
', type: 'function(number, string=)', optional: false, 'default':undefined} ]); }); @@ -72,7 +72,7 @@ describe('ngdoc', function() { doc.parse(); expect(doc.returns).toEqual({ type: 'Type', - description: '

text bold.

' + description: '

text bold.

\n
' }); }); @@ -142,26 +142,26 @@ describe('ngdoc', function() { '
\n' +
             '<b>angular</b>.k\n' +
             '
\n' + - ' asdf x

'); + ' asdf x

\n'); }); it('should wrap everything inside a container tag', function() { var doc = new Doc('@name superman').parse(); var content = doc.markdown('hello'); - expect(content).toMatch('

hello

'); + expect(content).toMatch('

hello

\n
'); }); it('should use the content before a colon as the name prefix for the className of the tag container', function() { var doc = new Doc('@name super: man').parse(); var content = doc.markdown('hello'); - expect(content).toMatch('

hello

'); + expect(content).toMatch('

hello

\n
'); }); it('should replace text between two
 tags', function() {
       expect(new Doc().markdown('
x
\n# One\n
b
')). - toMatch('\n\n

One

\n\n\n

One

\n\n' + + 'before\n
\n' + '
' + - '\ngit bla bla\n\n' + - '')).toEqual( + '\ngit bla bla\n
\n' + + '
')).toEqual( - '

before

\n' + + '

before

\n
\n' + '
\n' + 'git bla bla\n' + - '\n' + - '

'); + '
\n' + + '
'); }); it('should unindent text before processing based on the second line', function() { @@ -190,10 +190,10 @@ describe('ngdoc', function() { ' fourth line\n\n' + ' fifth line')). toMatch('

first line\n' + - 'second line

\n\n' + + 'second line

\n' + '
third line\n' +
-                ' fourth line\n
\n\n' + - '

fifth line

'); + ' fourth line\n' + + '

fifth line

\n'); }); it('should unindent text before processing based on the first line', function() { @@ -202,11 +202,11 @@ describe('ngdoc', function() { ' third line\n' + ' fourth line\n\n' + ' fifth line')). - toMatch('

first line

\n\n' + + toMatch('

first line

\n' + '
second line\n' +
                 'third line\n' +
-                ' fourth line\n
\n\n' + - '

fifth line

'); + ' fourth line\n' + + '

fifth line

\n
'); }); @@ -304,7 +304,7 @@ describe('ngdoc', function() { name : 'number', optional: false, 'default' : undefined, - description : '

Number \nto format.

' }]); + description : '

Number \nto format.

\n
' }]); }); it('should parse with default and optional', function() { @@ -315,7 +315,7 @@ describe('ngdoc', function() { name : 'fractionSize', optional: true, 'default' : '2', - description : '

desc

' }]); + description : '

desc

\n
' }]); }); }); @@ -325,8 +325,8 @@ describe('ngdoc', function() { doc.ngdoc = 'service'; doc.parse(); expect(doc.requires).toEqual([ - {name:'$service', text:'

for \nA

'}, - {name:'$another', text:'

for B

'}]); + {name:'$service', text:'

for \nA

\n
'}, + {name:'$another', text:'

for B

\n
'}]); expect(doc.html()).toContain('$service'); expect(doc.html()).toContain('$another'); expect(doc.html()).toContain('

for \nA

'); @@ -378,7 +378,7 @@ describe('ngdoc', function() { var doc = new Doc("@name a\n@property {string} name desc rip tion"); doc.parse(); expect(doc.properties[0].name).toEqual('name'); - expect(doc.properties[0].description).toEqual('

desc rip tion

'); + expect(doc.properties[0].description).toEqual('

desc rip tion

\n
'); }); it('should parse @property with type and description both', function() { @@ -386,7 +386,7 @@ describe('ngdoc', function() { doc.parse(); expect(doc.properties[0].name).toEqual('name'); expect(doc.properties[0].type).toEqual('bool'); - expect(doc.properties[0].description).toEqual('

desc rip tion

'); + expect(doc.properties[0].description).toEqual('

desc rip tion

\n
'); }); }); @@ -409,26 +409,26 @@ describe('ngdoc', function() { it('should parse @returns with type and description', function() { var doc = new Doc("@name a\n@returns {string} descrip tion"); doc.parse(); - expect(doc.returns).toEqual({type: 'string', description: '

descrip tion

'}); + expect(doc.returns).toEqual({type: 'string', description: '

descrip tion

\n
'}); }); it('should parse @returns with complex type and description', function() { var doc = new Doc("@name a\n@returns {function(string, number=)} description"); doc.parse(); - expect(doc.returns).toEqual({type: 'function(string, number=)', description: '

description

'}); + expect(doc.returns).toEqual({type: 'function(string, number=)', description: '

description

\n
'}); }); it('should transform description of @returns with markdown', function() { var doc = new Doc("@name a\n@returns {string} descrip *tion*"); doc.parse(); - expect(doc.returns).toEqual({type: 'string', description: '

descrip tion

'}); + expect(doc.returns).toEqual({type: 'string', description: '

descrip tion

\n
'}); }); it('should support multiline content', function() { var doc = new Doc("@name a\n@returns {string} description\n new line\n another line"); doc.parse(); expect(doc.returns). - toEqual({type: 'string', description: '

description\nnew line\nanother line

'}); + toEqual({type: 'string', description: '

description\nnew line\nanother line

\n
'}); }); }); @@ -437,7 +437,7 @@ describe('ngdoc', function() { var doc = new Doc("@name a\n@description
abc
"); doc.parse(); expect(doc.description). - toBe('
<b>abc</b>
'); + toBe('
<b>abc</b>
\n
'); }); it('should support multiple pre blocks', function() { @@ -445,11 +445,10 @@ describe('ngdoc', function() { doc.parse(); expect(doc.description). toBe('

foo \n' + - '

abc
\n\n' + - '

bah

\n\n' + + '
abc
\n' + + '

bah

\n' + '

foo \n' + - '

cba
'); - + '
cba
\n
'); }); it('should support nested @link annotations with or without description', function() { @@ -491,7 +490,7 @@ describe('ngdoc', function() { it('should not remove {{}}', function() { var doc = new Doc('@name a\n@example text {{ abc }}'); doc.parse(); - expect(doc.example).toEqual('

text {{ abc }}

'); + expect(doc.example).toEqual('

text {{ abc }}

\n
'); }); }); @@ -511,11 +510,11 @@ describe('ngdoc', function() { expect(doc.html()).toContain('

Method\'s this

\n' + '
' + '
' + - '

I am self.

' + + '

I am self.

\n' + '
' + '
\n'); expect(doc.html()).toContain('

Method\'s this

\n' + - '

I am self.

'); + '

I am self.

\n
'); }); }); @@ -542,7 +541,7 @@ describe('ngdoc', function() { var doc = new Doc('@ngdoc overview\n@name angular\n@description\n#heading\ntext'); doc.parse(); expect(doc.html()).toContain('text'); - expect(doc.html()).toContain('

heading

'); + expect(doc.html()).toContain('

heading

'); expect(doc.html()).not.toContain('Description'); }); }); diff --git a/docs/src/gen-docs.js b/docs/src/gen-docs.js index 2e711ab31c81..10b013854023 100755 --- a/docs/src/gen-docs.js +++ b/docs/src/gen-docs.js @@ -83,8 +83,7 @@ function writeTheRest(writesFuture) { writesFuture.push(writer.copyDir('components/components-font-awesome/font', 'components/font-awesome/font')); writesFuture.push(writer.copyDir('components/bootstrap', 'components/bootstrap')); - writesFuture.push(writer.copy('node_modules/showdown/src/showdown.js', 'components/showdown.js')); - writesFuture.push(writer.copy('node_modules/showdown/compressed/showdown.js', 'components/showdown.min.js')); + writesFuture.push(writer.copy('node_modules/marked/lib/marked.js', 'components/marked.js')); writesFuture.push(writer.copy('components/lunr.js/lunr.js', 'components/lunr.js')); writesFuture.push(writer.copy('components/lunr.js/lunr.min.js', 'components/lunr.min.js')); writesFuture.push(writer.copy('components/jquery/jquery.js', 'components/jquery.js')); diff --git a/docs/src/ngdoc.js b/docs/src/ngdoc.js index 4ad478f499bc..394510c53553 100644 --- a/docs/src/ngdoc.js +++ b/docs/src/ngdoc.js @@ -1,8 +1,6 @@ /** * All parsing/transformation code goes here. All code here should be sync to ease testing. */ - -var Showdown = require('showdown'); var DOM = require('./dom.js').DOM; var htmlEscape = require('./dom.js').htmlEscape; var Example = require('./example.js').Example; @@ -10,10 +8,14 @@ var NEW_LINE = /\n\r?/; var globalID = 0; var fs = require('fs'); var fspath = require('path'); -var markdown = new Showdown.converter({ extensions : ['table'] }); var shell = require('shelljs'); var gruntUtil = require('../../lib/grunt/utils.js'); var errorsJson; +var marked = require('marked'); +marked.setOptions({ + gfm: true, + tables: true +}); var lookupMinerrMsg = function (doc) { var code, namespace; @@ -289,7 +291,7 @@ Doc.prototype = { pageClassName = pageClassName || prepareClassName(this.name || 'docs') + suffix; text = '
' + - markdown.makeHtml(text) + + marked(text) + '
'; text = text.replace(/(?:

)?(REPLACEME\d+)(?:<\/p>)?/g, function(_, id) { return placeholderMap[id]; diff --git a/docs/src/templates/index.html b/docs/src/templates/index.html index 65e26c99ecb6..82a5c87e5270 100644 --- a/docs/src/templates/index.html +++ b/docs/src/templates/index.html @@ -47,7 +47,7 @@ addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync); addTag('script', {src: 'components/google-code-prettify.js' }, sync); addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync); - addTag('script', {src: 'components/' + (debug ? 'showdown.js' : 'showdown.min.js') }, sync); + addTag('script', {src: 'components/marked.js' }, sync); addTag('script', {src: 'docs-data.js'}, sync); addTag('script', {src: 'js/docs.js'}, sync); diff --git a/karma-docs.conf.js b/karma-docs.conf.js index ae15ddfc7684..65f51fdd4d0e 100644 --- a/karma-docs.conf.js +++ b/karma-docs.conf.js @@ -18,7 +18,7 @@ module.exports = function(config) { 'build/docs/components/lunr.js', 'build/docs/components/google-code-prettify.js', - 'build/docs/components/showdown.js', + 'build/docs/components/marked.js', 'build/docs/components/angular-bootstrap.js', 'build/docs/components/angular-bootstrap-prettify.js', diff --git a/package.json b/package.json index 2578b8c41c26..0bcad1f095dd 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "karma-sauce-launcher": "~0.0.4", "karma-script-launcher": "~0.0.1", "yaml-js": "0.0.5", - "showdown": "0.3.1", + "marked": "~0.2.9", "rewire": "1.1.3", "grunt-contrib-jasmine-node": "~0.1.1", "grunt-parallel": "~0.2.0", diff --git a/src/ng/animator.js b/src/ng/animator.js index 2a549f129730..a9ea574391f6 100644 --- a/src/ng/animator.js +++ b/src/ng/animator.js @@ -16,7 +16,7 @@ * Below is a more detailed breakdown of the supported callback events provided by pre-exisitng ng directives: * * | Directive | Supported Animations | - * |========================================================== |====================================================| + * |---------------------------------------------------------- |----------------------------------------------------| * | {@link ng.directive:ngRepeat#animations ngRepeat} | enter, leave and move | * | {@link ngRoute.directive:ngView#animations ngView} | enter and leave | * | {@link ng.directive:ngInclude#animations ngInclude} | enter and leave | diff --git a/src/ng/directive/ngRepeat.js b/src/ng/directive/ngRepeat.js index 7da6710535b3..e0b2cb38de20 100644 --- a/src/ng/directive/ngRepeat.js +++ b/src/ng/directive/ngRepeat.js @@ -12,7 +12,7 @@ * Special properties are exposed on the local scope of each template instance, including: * * | Variable | Type | Details | - * |===========|=================|=============================================================================| + * |-----------|-----------------|-----------------------------------------------------------------------------| * | `$index` | {@type number} | iterator offset of the repeated element (0..length-1) | * | `$first` | {@type boolean} | true if the repeated element is first in the iterator. | * | `$middle` | {@type boolean} | true if the repeated element is between the first and last in the iterator. |