From bf03eb007c31bec4ea9f2ca8a947f9833bb348c9 Mon Sep 17 00:00:00 2001 From: Misko Hevery Date: Mon, 24 Jan 2011 13:33:47 -0800 Subject: Added SiteMap generation to the documentation --- docs/spec/sitemapSpec.js | 23 +++++++++++++++++++++++ docs/src/SiteMap.js | 31 +++++++++++++++++++++++++++++++ docs/src/gen-docs.js | 5 ++++- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 docs/spec/sitemapSpec.js create mode 100644 docs/src/SiteMap.js (limited to 'docs') diff --git a/docs/spec/sitemapSpec.js b/docs/spec/sitemapSpec.js new file mode 100644 index 00000000..2a5c4901 --- /dev/null +++ b/docs/spec/sitemapSpec.js @@ -0,0 +1,23 @@ +var SiteMap = require('sitemap.js').SiteMap; +var Doc = require('ngdoc.js').Doc; + + +describe('sitemap', function(){ + it('should render empty sitemap', function(){ + var map = new SiteMap([]); + expect(map.render()).toEqual([ + '', + '', + '', ''].join('\n')); + }); + + it('should render ngdoc url', function(){ + var map = new SiteMap([new Doc({name: 'a.b.c<>\'"&'})]); + expect(map.render()).toContain([ + ' ', + 'http://docs.angularjs.org/#!a.b.c<>'"&', + 'weekly', + ''].join('')); + + }); +}); diff --git a/docs/src/SiteMap.js b/docs/src/SiteMap.js new file mode 100644 index 00000000..f6f909e9 --- /dev/null +++ b/docs/src/SiteMap.js @@ -0,0 +1,31 @@ +exports.SiteMap = SiteMap; + +/** + * @see http://www.sitemaps.org/protocol.php + * + * @param docs + * @returns {SiteMap} + */ +function SiteMap(docs){ + this.render = function(){ + var map = []; + map.push(''); + map.push(''); + docs.forEach(function(doc){ + map.push(' http://docs.angularjs.org/#!' + + encode(doc.name) + 'weekly'); + }); + map.push(''); + map.push(''); + return map.join('\n'); + }; + + function encode(text){ + return text + .replace(/&/mg, '&') + .replace(//mg, '>') + .replace(/'/mg, ''') + .replace(/"/mg, '"'); + } +} diff --git a/docs/src/gen-docs.js b/docs/src/gen-docs.js index 1c03a0f1..a287a2be 100644 --- a/docs/src/gen-docs.js +++ b/docs/src/gen-docs.js @@ -3,7 +3,8 @@ require.paths.push('lib'); var reader = require('reader.js'), ngdoc = require('ngdoc.js'), writer = require('writer.js'), - callback = require('callback.js'); + callback = require('callback.js'), + SiteMap = require('SiteMap.js').SiteMap; var docs = []; var start; @@ -30,6 +31,8 @@ var writes = callback.chain(function(){ writer.copy('doc_widgets.css', writes.waitFor()); writer.copy('docs-scenario.html', writes.waitFor()); writer.output('docs-scenario.js', ngdoc.scenarios(docs), writes.waitFor()); + writer.output('sitemap.xml', new SiteMap(docs).render(), writes.waitFor()); + writer.output('robots.txt', 'Sitemap: http://docs.angularjs.org/sitemap.xml\n', writes.waitFor()); writer.copy('syntaxhighlighter/shBrushJScript.js', writes.waitFor()); writer.copy('syntaxhighlighter/shBrushXml.js', writes.waitFor()); writer.copy('syntaxhighlighter/shCore.css', writes.waitFor()); -- cgit v1.2.3