aboutsummaryrefslogtreecommitdiffstats
path: root/docs/src
diff options
context:
space:
mode:
Diffstat (limited to 'docs/src')
-rw-r--r--docs/src/SiteMap.js33
-rw-r--r--docs/src/appCache.js76
-rw-r--r--docs/src/dom.js184
-rw-r--r--docs/src/example.js160
-rwxr-xr-xdocs/src/gen-docs.js150
-rw-r--r--docs/src/ignore.words701
-rw-r--r--docs/src/ngdoc.js1435
-rw-r--r--docs/src/reader.js97
-rw-r--r--docs/src/templates/.htaccess19
-rw-r--r--docs/src/templates/css/animations.css62
-rw-r--r--docs/src/templates/css/doc_widgets.css150
-rw-r--r--docs/src/templates/css/docs.css575
-rw-r--r--docs/src/templates/css/prettify.css51
-rw-r--r--docs/src/templates/docs-scenario.html44
-rw-r--r--docs/src/templates/favicon.icobin1150 -> 0 bytes
-rw-r--r--docs/src/templates/index.html388
-rw-r--r--docs/src/templates/js/docs.js933
-rw-r--r--docs/src/templates/offline.html4
-rw-r--r--docs/src/writer.js166
19 files changed, 0 insertions, 5228 deletions
diff --git a/docs/src/SiteMap.js b/docs/src/SiteMap.js
deleted file mode 100644
index 16b10266..00000000
--- a/docs/src/SiteMap.js
+++ /dev/null
@@ -1,33 +0,0 @@
-exports.SiteMap = SiteMap;
-
-/**
- * @see http://www.sitemaps.org/protocol.php
- *
- * @param docs
- * @returns {SiteMap}
- */
-function SiteMap(docs){
- this.render = function() {
- var map = [];
- map.push('<?xml version="1.0" encoding="UTF-8"?>');
- map.push('<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">');
- docs.forEach(function(doc){
- map.push(' <url><loc>http://docs.angularjs.org/' +
- encode(doc.section) + '/' +
- encode(doc.id) +
- '</loc><changefreq>weekly</changefreq></url>');
- });
- map.push('</urlset>');
- map.push('');
- return map.join('\n');
- };
-
- function encode(text){
- return text
- .replace(/&/mg, '&amp;')
- .replace(/</mg, '&lt;')
- .replace(/>/mg, '&gt;')
- .replace(/'/mg, '&apos;')
- .replace(/"/mg, '&quot;');
- }
-}
diff --git a/docs/src/appCache.js b/docs/src/appCache.js
deleted file mode 100644
index 1a816eb8..00000000
--- a/docs/src/appCache.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
-* Generate appCache Manifest file here
-*/
-
-exports.appCache = appCache;
-var fs = require('q-io/fs');
-var Q = require('qq');
-function identity($) {return $;}
-
-function appCache(path) {
- if(!path) {
- return appCacheTemplate();
- }
- var blackList = ["build/docs/offline.html",
- "build/docs/sitemap.xml",
- "build/docs/robots.txt",
- "build/docs/docs-scenario.html",
- "build/docs/docs-scenario.js",
- "build/docs/appcache.manifest",
- "build/docs/.htaccess"
- ];
-
- var result = ["CACHE MANIFEST",
- "# " + new Date().toISOString(),
- "",
- "# cache all of these",
- "CACHE:",
- "../angular.min.js"];
-
- var resultPostfix = ["",
- "FALLBACK:",
- "/ /build/docs/index.html",
- "",
- "# allow access to google analytics and twitter when we are online",
- "NETWORK:",
- "*"];
-
- var promise = fs.listTree(path).then(function(files){
- var fileFutures = [];
- files.forEach(function(file){
- fileFutures.push(fs.isFile(file).then(function(isFile){
- if (isFile && blackList.indexOf(file) == -1) {
- return file.replace('build/docs/','');
- }
- }));
- });
- return Q.deep(fileFutures);
- }).then(function(files){
- return result.concat(files.filter(identity)).concat(resultPostfix).join('\n');
- });
-
- return promise;
-}
-
-function appCacheTemplate() {
- return ["CACHE MANIFEST",
- "# " + new Date().toISOString(),
- "",
- "# cache all of these",
- "CACHE:",
- "syntaxhighlighter/syntaxhighlighter-combined.js",
- "../angular.min.js",
- "docs-combined.js",
- "docs-data.js",
- "docs-combined.css",
- "syntaxhighlighter/syntaxhighlighter-combined.css",
- "img/texture_1.png",
- "img/yellow_bkgnd.jpg",
- "",
- "FALLBACK:",
- "/ /build/docs/offline.html",
- "",
- "# allow access to google analytics and twitter when we are online",
- "NETWORK:",
- "*"].join('\n');
-}
diff --git a/docs/src/dom.js b/docs/src/dom.js
deleted file mode 100644
index e696faf4..00000000
--- a/docs/src/dom.js
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * DOM generation class
- */
-
-exports.DOM = DOM;
-exports.htmlEscape = htmlEscape;
-exports.normalizeHeaderToId = normalizeHeaderToId;
-
-//////////////////////////////////////////////////////////
-
-function htmlEscape(text){
- return text
- .replace(/&/g, '&amp;')
- .replace(/</g, '&lt;')
- .replace(/>/g, '&gt;')
- .replace(/\{\{/g, '<span>{{</span>')
- .replace(/\}\}/g, '<span>}}</span>');
-}
-
-function nonEmpty(header) {
- return !!header;
-}
-
-function idFromCurrentHeaders(headers) {
- if (headers.length === 1) return headers[0];
- // Do not include the first level title, as that's the title of the page.
- return headers.slice(1).filter(nonEmpty).join('_');
-}
-
-function normalizeHeaderToId(header) {
- if (typeof header !== 'string') {
- return '';
- }
-
- return header.toLowerCase()
- .replace(/<.*>/g, '') // html tags
- .replace(/[\!\?\:\.\']/g, '') // special characters
- .replace(/&#\d\d;/g, '') // html entities
- .replace(/\(.*\)/mg, '') // stuff in parenthesis
- .replace(/\s$/, '') // trailing spaces
- .replace(/\s+/g, '-'); // replace whitespaces with dashes
-}
-
-
-function DOM() {
- this.out = [];
- this.headingDepth = 0;
- this.currentHeaders = [];
- this.anchors = [];
-}
-
-var INLINE_TAGS = {
- i: true,
- b: true,
- a: true
-};
-
-DOM.prototype = {
- toString: function() {
- return this.out.join('');
- },
-
- text: function(content) {
- if (typeof content == "string") {
- this.out.push(htmlEscape(content));
- } else if (typeof content == 'function') {
- content.call(this, this);
- } else if (content instanceof Array) {
- this.ul(content);
- }
- },
-
- html: function(html) {
- if (!html) return;
-
- var self = this;
- // rewrite header levels, add ids and collect the ids
- html = html.replace(/<h(\d)(.*?)>([\s\S]+?)<\/h\1>/gm, function(_, level, attrs, content) {
- level = parseInt(level, 10) + self.headingDepth; // change header level based on the context
-
- self.currentHeaders[level - 1] = normalizeHeaderToId(content);
- self.currentHeaders.length = level;
-
- var id = idFromCurrentHeaders(self.currentHeaders);
- self.anchors.push(id);
- return '<h' + level + attrs + ' id="' + id + '">' + content + '</h' + level + '>';
- });
-
- // collect anchors
- html = html.replace(/<a name="(\w*)">/g, function(match, anchor) {
- self.anchors.push(anchor);
- return match;
- });
-
- 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('</' + name + '>');
- if (!INLINE_TAGS[name])
- this.out.push('\n');
- },
-
- code: function(text) {
- this.tag('pre', {'class':"prettyprint linenums"}, text);
- },
-
- div: function(attr, text) {
- this.tag('div', attr, text);
- },
-
- h: function(heading, content, fn){
- if (content==undefined || (content instanceof Array && content.length == 0)) return;
-
- this.headingDepth++;
- this.currentHeaders[this.headingDepth - 1] = normalizeHeaderToId(heading);
- this.currentHeaders.length = this.headingDepth;
-
- var className = null,
- anchor = null;
- if (typeof heading == 'string') {
- var id = idFromCurrentHeaders(this.currentHeaders);
- this.anchors.push(id);
- anchor = {'id': id};
- var classNameValue = this.currentHeaders[this.headingDepth - 1]
- if(classNameValue == 'hide') classNameValue = '';
- className = {'class': classNameValue};
- }
- this.tag('h' + this.headingDepth, anchor, heading);
- if (content instanceof Array) {
- this.ul(content, className, fn);
- } else if (fn) {
- this.tag('div', className, function() {
- fn.call(this, content);
- });
- } 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('<li>');
- dom.text(fn ? fn(item) : item);
- dom.out.push('</li>\n');
- });
- });
- }
-
-};
diff --git a/docs/src/example.js b/docs/src/example.js
deleted file mode 100644
index 7a32ce04..00000000
--- a/docs/src/example.js
+++ /dev/null
@@ -1,160 +0,0 @@
-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,
- 'protractorTest.js': true
-}
-
-function ids(list) {
- return list.map(function(item) { return item.id; }).join(' ');
-};
-
-
-exports.Example = function(scenarios, protractorTests) {
- this.module = '';
- this.deps = ['angular.js'];
- this.html = [];
- this.css = [];
- this.js = [];
- this.json = [];
- this.unit = [];
- this.scenario = [];
- this.scenarios = scenarios;
- this.protractorTest = [];
- this.protractorTests = protractorTests;
-}
-
-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 (name == 'protractorTest.js') {
- ext = 'protractorTest';
- }
-
- 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);
- }
- if (ext == 'protractorTest') {
- this.protractorTests.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(' source-edit-protractor="' + ids(this.protractorTest) + '"');
- 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);
- htmlTabs(this.protractorTest);
- 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 = 'ngScenario e2e test';
- if (name == 'protractorTest.js') name = 'Protractor e2e 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('');
-};
-
diff --git a/docs/src/gen-docs.js b/docs/src/gen-docs.js
deleted file mode 100755
index ff8d8311..00000000
--- a/docs/src/gen-docs.js
+++ /dev/null
@@ -1,150 +0,0 @@
-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'),
- errorsJson = require('../../build/errors.json').errors;
-
-var start = now();
-var docs;
-
-writer.makeDir('build/docs/', true).then(function() {
- return writer.makeDir('build/docs/partials/');
-}).then(function() {
- return writer.makeDir('build/docs/components/');
-}).then(function() {
- return writer.makeDir('build/docs/components/bootstrap');
-}).then(function() {
- return writer.makeDir('build/docs/components/font-awesome');
-}).then(function() {
- return writer.makeDir('build/docs/e2etests');
-}).then(function() {
- console.log('Generating AngularJS Reference Documentation...');
- return reader.collect();
-}).then(function generateHtmlDocPartials(docs_) {
- docs = docs_;
- ngdoc.merge(docs);
- var fileFutures = [], namespace;
-
- var isErrorDocPresent = function (search) {
- return docs.some(function (doc) {
- return doc.ngdoc === 'error' && doc.name === search;
- });
- };
-
- // Check that each generated error code has a doc file.
- Object.keys(errorsJson).forEach(function (prop) {
- if (typeof errorsJson[prop] === 'object') {
- namespace = errorsJson[prop];
- Object.keys(namespace).forEach(function (code) {
- var search = prop + ':' + code;
- if (!isErrorDocPresent(search)) {
- throw new Error('Missing ngdoc file for error code: ' + search);
- }
- });
- } else {
- if (!isErrorDocPresent(prop)) {
- throw new Error('Missing ngdoc file for error code: ' + prop);
- }
- }
- });
-
- 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()));
- // If it has a sample Protractor test, output that as well.
- if (doc.protractorTests.length) {
- fileFutures.push(writer.output('ptore2e/' + doc.section + '/' + id + '.jquery_test.js',
- ngdoc.writeProtractorTest(doc, 'index-jq-nocache.html#!/')));
- fileFutures.push(writer.output('ptore2e/' + doc.section + '/' + id + '.jqlite_test.js',
- ngdoc.writeProtractorTest(doc, 'index-nocache.html#!/')));
- }
- });
-
- ngdoc.checkBrokenLinks(docs);
-
- 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.' );
-}).done();
-
-
-function writeTheRest(writesFuture) {
- var metadata = ngdoc.metadata(docs);
- var versions = ngdoc.ngVersions();
- var currentVersion = ngdoc.ngCurrentVersion();
-
- writesFuture.push(writer.symlink('../../docs/content/notes', 'build/docs/notes', 'directory'));
- writesFuture.push(writer.symlinkTemplate('css', 'directory'));
- writesFuture.push(writer.symlink('../../docs/img', 'build/docs/img', 'directory'));
- writesFuture.push(writer.symlinkTemplate('js', 'directory'));
-
- var manifest = 'manifest="/build/docs/appcache.manifest"';
-
- writesFuture.push(writer.copyDir('bower_components/components-font-awesome/css', 'components/font-awesome/css'));
- writesFuture.push(writer.copyDir('bower_components/components-font-awesome/font', 'components/font-awesome/font'));
- writesFuture.push(writer.copyDir('bower_components/bootstrap', 'components/bootstrap'));
-
- writesFuture.push(writer.copy('node_modules/marked/lib/marked.js', 'components/marked.js'));
- writesFuture.push(writer.copy('bower_components/lunr.js/lunr.js', 'components/lunr.js'));
- writesFuture.push(writer.copy('bower_components/lunr.js/lunr.min.js', 'components/lunr.min.js'));
- writesFuture.push(writer.copy('bower_components/jquery/jquery.js', 'components/jquery.js'));
- writesFuture.push(writer.copy('bower_components/jquery/jquery.min.js', 'components/jquery.min.js'));
- writesFuture.push(writer.copy('bower_components/google-code-prettify/src/prettify.js', 'components/google-code-prettify.js'));
- writesFuture.push(writer.copy('docs/components/angular-bootstrap/bootstrap.js', 'components/angular-bootstrap.js'));
- writesFuture.push(writer.copy('docs/components/angular-bootstrap/bootstrap-prettify.js', 'components/angular-bootstrap-prettify.js'));
-
- writesFuture.push(writer.copy('docs/src/templates/index.html', 'index.html',
- writer.replace, {'doc:manifest': ''})); //manifest //TODO(i): enable
-
- writesFuture.push(writer.copy('docs/src/templates/index.html', 'index-nocache.html',
- writer.replace, {'doc:manifest': ''}));
-
-
- writesFuture.push(writer.copy('docs/src/templates/index.html', 'index-jq.html',
- writer.replace, {'doc:manifest': ''}));
-
- writesFuture.push(writer.copy('docs/src/templates/index.html', 'index-jq-nocache.html',
- writer.replace, {'doc:manifest': ''}));
-
-
- writesFuture.push(writer.copy('docs/src/templates/index.html', 'index-debug.html',
- writer.replace, {'doc:manifest': ''}));
-
- writesFuture.push(writer.copy('docs/src/templates/index.html', 'index-jq-debug.html',
- writer.replace, {'doc:manifest': ''}));
-
- writesFuture.push(writer.symlinkTemplate('offline.html'));
-
- writesFuture.push(writer.copyTemplate('docs-scenario.html')); // will be rewritten, don't symlink
- writesFuture.push(writer.output('docs-scenario.js', ngdoc.scenarios(docs)));
-
- writesFuture.push(writer.output('docs-data.js',[
- "angular.module('docsData', [])",
- ".value('NG_PAGES'," + JSON.stringify(metadata).replace(/{/g, '\n{') + ")",
- ".value('NG_VERSION'," + JSON.stringify(currentVersion) + ")",
- ".value('NG_VERSIONS'," + JSON.stringify(versions) + ");"
- ]));
- writesFuture.push(writer.output('sitemap.xml', new SiteMap(docs).render()));
-
- writesFuture.push(writer.output('robots.txt', 'Sitemap: http://docs.angularjs.org/sitemap.xml\n'));
- writesFuture.push(writer.output('appcache.manifest',appCache()));
- writesFuture.push(writer.copyTemplate('.htaccess')); // will be rewritten, don't symlink
-
- writesFuture.push(writer.symlinkTemplate('favicon.ico'));
-}
-
-
-function now() { return new Date().getTime(); }
-
-function noop() {};
-
diff --git a/docs/src/ignore.words b/docs/src/ignore.words
deleted file mode 100644
index 82b9f2fc..00000000
--- a/docs/src/ignore.words
+++ /dev/null
@@ -1,701 +0,0 @@
-a
-able
-about
-above
-abst
-accordance
-according
-accordingly
-across
-act
-actually
-added
-adj
-adopted
-affected
-affecting
-affects
-after
-afterwards
-again
-against
-ah
-all
-almost
-alone
-along
-already
-also
-although
-always
-am
-among
-amongst
-an
-and
-announce
-another
-any
-anybody
-anyhow
-anymore
-anyone
-anything
-anyway
-anyways
-anywhere
-apparently
-approximately
-are
-aren
-arent
-arise
-around
-as
-aside
-ask
-asking
-at
-auth
-available
-away
-awfully
-b
-back
-be
-became
-because
-become
-becomes
-becoming
-been
-before
-beforehand
-begin
-beginning
-beginnings
-begins
-behind
-being
-believe
-below
-beside
-besides
-between
-beyond
-biol
-both
-brief
-briefly
-but
-by
-c
-ca
-came
-can
-cannot
-can't
-cant
-cause
-causes
-certain
-certainly
-co
-com
-come
-comes
-contain
-containing
-contains
-could
-couldnt
-d
-date
-did
-didn't
-didnt
-different
-do
-does
-doesn't
-doesnt
-doing
-done
-don't
-dont
-down
-downwards
-due
-during
-e
-each
-ed
-edu
-effect
-eg
-eight
-eighty
-either
-else
-elsewhere
-end
-ending
-enough
-especially
-et
-et-al
-etc
-even
-ever
-every
-everybody
-everyone
-everything
-everywhere
-ex
-except
-f
-far
-few
-ff
-fifth
-first
-five
-fix
-followed
-following
-follows
-for
-former
-formerly
-forth
-found
-four
-from
-further
-furthermore
-g
-gave
-get
-gets
-getting
-give
-given
-gives
-giving
-go
-goes
-gone
-got
-gotten
-h
-had
-happens
-hardly
-has
-hasn't
-hasnt
-have
-haven't
-havent
-having
-he
-hed
-hence
-her
-here
-hereafter
-hereby
-herein
-heres
-hereupon
-hers
-herself
-hes
-hi
-hid
-him
-himself
-his
-hither
-home
-how
-howbeit
-however
-hundred
-i
-id
-ie
-if
-i'll
-ill
-im
-immediate
-immediately
-importance
-important
-in
-inc
-indeed
-index
-information
-instead
-into
-invention
-inward
-is
-isn't
-isnt
-it
-itd
-it'll
-itll
-its
-itself
-i've
-ive
-j
-just
-k
-keep
-keeps
-kept
-keys
-kg
-km
-know
-known
-knows
-l
-largely
-last
-lately
-later
-latter
-latterly
-least
-less
-lest
-let
-lets
-like
-liked
-likely
-line
-little
-'ll
-'ll
-look
-looking
-looks
-ltd
-m
-made
-mainly
-make
-makes
-many
-may
-maybe
-me
-mean
-means
-meantime
-meanwhile
-merely
-mg
-might
-million
-miss
-ml
-more
-moreover
-most
-mostly
-mr
-mrs
-much
-mug
-must
-my
-myself
-n
-na
-name
-namely
-nay
-nd
-near
-nearly
-necessarily
-necessary
-need
-needs
-neither
-never
-nevertheless
-new
-next
-nine
-ninety
-no
-nobody
-non
-none
-nonetheless
-noone
-nor
-normally
-nos
-not
-noted
-nothing
-now
-nowhere
-o
-obtain
-obtained
-obviously
-of
-off
-often
-oh
-ok
-okay
-old
-omitted
-on
-once
-one
-ones
-only
-onto
-or
-ord
-other
-others
-otherwise
-ought
-our
-ours
-ourselves
-out
-outside
-over
-overall
-owing
-own
-p
-page
-pages
-part
-particular
-particularly
-past
-per
-perhaps
-placed
-please
-plus
-poorly
-possible
-possibly
-potentially
-pp
-predominantly
-present
-previously
-primarily
-probably
-promptly
-proud
-provides
-put
-q
-que
-quickly
-quite
-qv
-r
-ran
-rather
-rd
-re
-readily
-really
-recent
-recently
-ref
-refs
-regarding
-regardless
-regards
-related
-relatively
-research
-respectively
-resulted
-resulting
-results
-right
-run
-s
-said
-same
-saw
-say
-saying
-says
-sec
-section
-see
-seeing
-seem
-seemed
-seeming
-seems
-seen
-self
-selves
-sent
-seven
-several
-shall
-she
-shed
-she'll
-shell
-shes
-should
-shouldn't
-shouldnt
-show
-showed
-shown
-showns
-shows
-significant
-significantly
-similar
-similarly
-since
-six
-slightly
-so
-some
-somebody
-somehow
-someone
-somethan
-something
-sometime
-sometimes
-somewhat
-somewhere
-soon
-sorry
-specifically
-specified
-specify
-specifying
-state
-states
-still
-stop
-strongly
-sub
-substantially
-successfully
-such
-sufficiently
-suggest
-sup
-sure
-t
-take
-taken
-taking
-tell
-tends
-th
-than
-thank
-thanks
-thanx
-that
-that'll
-thatll
-thats
-that've
-thatve
-the
-their
-theirs
-them
-themselves
-then
-thence
-there
-thereafter
-thereby
-thered
-therefore
-therein
-there'll
-therell
-thereof
-therere
-theres
-thereto
-thereupon
-there've
-thereve
-these
-they
-theyd
-they'll
-theyll
-theyre
-they've
-theyve
-think
-this
-those
-thou
-though
-thoughh
-thousand
-throug
-through
-throughout
-thru
-thus
-til
-tip
-to
-together
-too
-took
-toward
-towards
-tried
-tries
-truly
-try
-trying
-ts
-twice
-two
-u
-un
-under
-unfortunately
-unless
-unlike
-unlikely
-until
-unto
-up
-upon
-ups
-us
-use
-used
-useful
-usefully
-usefulness
-uses
-using
-usually
-v
-value
-various
-'ve
-'ve
-very
-via
-viz
-vol
-vols
-vs
-w
-want
-wants
-was
-wasn't
-wasnt
-way
-we
-wed
-welcome
-we'll
-well
-went
-were
-weren't
-werent
-we've
-weve
-what
-whatever
-what'll
-whatll
-whats
-when
-whence
-whenever
-where
-whereafter
-whereas
-whereby
-wherein
-wheres
-whereupon
-wherever
-whether
-which
-while
-whim
-whither
-who
-whod
-whoever
-whole
-who'll
-wholl
-whom
-whomever
-whos
-whose
-why
-widely
-will
-willing
-wish
-with
-within
-without
-won't
-wont
-words
-would
-wouldn't
-wouldnt
-www
-x
-y
-yes
-yet
-you
-youd
-you'll
-youll
-your
-youre
-yours
-yourself
-yourselves
-you've
-youve
-z
-zero
diff --git a/docs/src/ngdoc.js b/docs/src/ngdoc.js
deleted file mode 100644
index 78f968d9..00000000
--- a/docs/src/ngdoc.js
+++ /dev/null
@@ -1,1435 +0,0 @@
-/**
- * All parsing/transformation code goes here. All code here should be sync to ease testing.
- */
-var DOM = require('./dom.js').DOM;
-var htmlEscape = require('./dom.js').htmlEscape;
-var Example = require('./example.js').Example;
-var NEW_LINE = /\n\r?/;
-var globalID = 0;
-var fs = require('fs');
-var fspath = require('path');
-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;
-
- if (errorsJson === undefined) {
- errorsJson = require('../../build/errors.json').errors;
- }
-
- namespace = doc.getMinerrNamespace();
- code = doc.getMinerrCode();
- if (namespace === undefined) {
- return errorsJson[code];
- }
- return errorsJson[namespace][code];
-};
-
-exports.trim = trim;
-exports.metadata = metadata;
-exports.scenarios = scenarios;
-exports.writeProtractorTest = writeProtractorTest;
-exports.merge = merge;
-exports.checkBrokenLinks = checkBrokenLinks;
-exports.Doc = Doc;
-
-exports.ngVersions = function() {
- var versions = [], regex = /^v([1-9]\d*(?:\.\d+\S+)+)$/; //only fetch >= 1.0.0 versions
- shell.exec('git tag', {silent: true}).output.split(/\s*\n\s*/)
- .forEach(function(line) {
- var matches = regex.exec(line);
- if(matches && matches.length > 0) {
- versions.push(matches[1]);
- }
- });
-
- //match the future version of AngularJS that is set in the package.json file
- return expandVersions(sortVersionsNaturally(versions), exports.ngCurrentVersion().full);
-
- function expandVersions(versions, latestVersion) {
- var RC_VERSION = /rc\d/;
- //copy the array to avoid changing the versions param data
- //the latest version is not on the git tags list, but
- //docs.angularjs.org will always point to master as of 1.2
- versions = versions.concat([latestVersion]);
-
- var firstUnstable, expanded = [];
- for(var i=versions.length-1;i>=0;i--) {
- var version = versions[i],
- split = version.split('.'),
- isMaster = version == latestVersion,
- isStable = split[1] % 2 === 0 && !RC_VERSION.test(version);
-
- var title = 'AngularJS - v' + version;
-
- var docsPath = version < '1.0.2' ? 'docs-' + version : 'docs';
-
- var url = isMaster ?
- 'http://docs.angularjs.org' :
- 'http://code.angularjs.org/' + version + '/' + docsPath;
-
- expanded.push({
- version : version,
- stable : isStable,
- title : title,
- group : (isStable ? 'Stable' : 'Unstable'),
- url : url
- });
- };
-
- return expanded;
- };
-
- function sortVersionsNaturally(versions) {
- var versionMap = {},
- NON_RC_RELEASE_NUMBER = 999;
- for(var i = versions.length - 1; i >= 0; i--) {
- var version = versions[i];
- var split = version.split(/\.|rc/);
- var baseVersion = split[0] + '.' + split[1] + '.' + split[2];
-
- //create a map of RC versions for each version
- //this way each RC version can be sorted in "natural" order
- versionMap[baseVersion] = versionMap[baseVersion] || [];
-
- //NON_RC_RELEASE_NUMBER is used to signal the non-RC version for the release and
- //it will always appear at the top of the list since the number is so high!
- versionMap[baseVersion].push(
- version == baseVersion ? NON_RC_RELEASE_NUMBER : parseInt(version.match(/rc\.?(\d+)/)[1]));
- };
-
- //flatten the map so that the RC versions occur in a natural sorted order
- //and the official non-RC version shows up at the top of the list of sorted
- //RC versions!
- var angularVersions = [];
- sortedKeys(versionMap).forEach(function(key) {
- var versions = versionMap[key];
-
- //basic numerical sort
- versions.sort(function(a,b) {
- return a - b;
- });
-
- versions.forEach(function(v) {
- angularVersions.push(v == NON_RC_RELEASE_NUMBER ? key : key + 'rc' + v);
- });
- });
-
- return angularVersions;
- };
-
- function sortedKeys(obj) {
- var keys = [];
- for(var key in obj) {
- keys.push(key);
- };
- keys.sort(true);
- return keys;
- };
-};
-
-exports.ngCurrentVersion = function() {
- return gruntUtil.getVersion();
-};
-
-var BOOLEAN_ATTR = {};
-['multiple', 'selected', 'checked', 'disabled', 'readOnly', 'required'].forEach(function(value) {
- BOOLEAN_ATTR[value] = true;
-});
-
-//////////////////////////////////////////////////////////
-function Doc(text, file, line) {
- if (typeof text == 'object') {
- for ( var key in text) {
- this[key] = text[key];
- }
- } else {
- this.text = text;
- this.file = file;
- this.line = line;
- }
- this.scenarios = this.scenarios || [];
- this.protractorTests = this.protractorTests || [];
- this.requires = this.requires || [];
- this.param = this.param || [];
- this.properties = this.properties || [];
- this.methods = this.methods || [];
- this.events = this.events || [];
- this.links = this.links || [];
- this.anchors = this.anchors || [];
-}
-Doc.METADATA_IGNORE = (function() {
- var words = fs.readFileSync(__dirname + '/ignore.words', 'utf8');
- return words.toString().split(/[,\s\n\r]+/gm);
-})();
-
-
-Doc.prototype = {
- keywords: function keywords() {
- var keywords = {};
- var words = [];
- Doc.METADATA_IGNORE.forEach(function(ignore){ keywords[ignore] = true; });
-
- function extractWords(text) {
- var tokens = text.toLowerCase().split(/[\.\s,`'"#]+/mg);
- tokens.forEach(function(key){
- var match = key.match(/^((ng:|[\$_a-z])[\w\-_]+)/);
- if (match){
- key = match[1];
- if (!keywords[key]) {
- keywords[key] = true;
- words.push(key);
- }
- }
- });
- }
-
- extractWords(this.text);
- this.properties.forEach(function(prop) {
- extractWords(prop.text || prop.description || '');
- });
- this.methods.forEach(function(method) {
- extractWords(method.text || method.description || '');
- });
- if (this.ngdoc === 'error') {
- words.push(this.getMinerrNamespace());
- words.push(this.getMinerrCode());
- }
- words.sort();
- return words.join(' ');
- },
-
- shortDescription : function() {
- if (!this.description) return this.description;
- var text = this.description.split("\n")[0];
- text = text.replace(/<.+?\/?>/g, '');
- text = text.replace(/{/g,'&#123;');
- text = text.replace(/}/g,'&#125;');
- return text;
- },
-
- getMinerrNamespace: function () {
- if (this.ngdoc !== 'error') {
- throw new Error('Tried to get the minErr namespace, but @ngdoc ' +
- this.ngdoc + ' was supplied. It should be @ngdoc error');
- }
- return this.name.split(':')[0];
- },
-
- getMinerrCode: function () {
- if (this.ngdoc !== 'error') {
- throw new Error('Tried to get the minErr error code, but @ngdoc ' +
- this.ngdoc + ' was supplied. It should be @ngdoc error');
- }
- return this.name.split(':')[1];
- },
-
- /**
- * Converts relative urls (without section) into absolute
- * Absolute url means url with section
- *
- * @example
- * - if the link is inside any api doc:
- * angular.widget -> api/angular.widget
- *
- * - if the link is inside any guid doc:
- * intro -> guide/intro
- *
- * @param {string} url Absolute or relative url
- * @returns {string} Absolute url
- */
- convertUrlToAbsolute: function(url) {
- var hashIdx = url.indexOf('#');
-
- // Lowercase hash parts of the links,
- // so that we can keep correct API names even when the urls are lowercased.
- if (hashIdx !== -1) {
- url = url.substr(0, hashIdx) + url.substr(hashIdx).toLowerCase();
- }
-
- if (url.substr(-1) == '/') return url + 'index';
- if (url.match(/\//)) return url;
- return this.section + '/' + url;
- },
-
- markdown: function(text) {
- if (!text) return text;
-
- var self = this,
- IS_URL = /^(https?:\/\/|ftps?:\/\/|mailto:|\.|\/)/,
- IS_ANGULAR = /^(api\/)?(angular|ng|AUTO)\./,
- IS_HASH = /^#/,
- parts = trim(text).split(/(<pre.*?>[\s\S]*?<\/pre>|<doc:example(\S*).*?>[\s\S]*?<\/doc:example>|<example[^>]*>[\s\S]*?<\/example>)/),
- seq = 0,
- placeholderMap = {};
-
- function placeholder(text) {
- var id = 'REPLACEME' + (seq++);
- placeholderMap[id] = text;
- return id;
- }
-
- function extractInlineDocCode(text, tag) {
- if(tag == 'all') {
- //use a greedy operator to match the last </docs> tag
- regex = /\/\/<docs.*?>([.\s\S]+)\/\/<\/docs>/im;
- }
- else {
- //use a non-greedy operator to match the next </docs> tag
- regex = new RegExp("\/\/<docs\\s*tag=\"" + tag + "\".*?>([.\\s\\S]+?)\/\/<\/docs>","im");
- }
- var matches = regex.exec(text.toString());
- return matches && matches.length > 1 ? matches[1] : "";
- }
-
- parts.forEach(function(text, i) {
- parts[i] = (text || '').
- replace(/<example(?:\s+module="([^"]*)")?(?:\s+deps="([^"]*)")?(\s+animations="true")?>([\s\S]*?)<\/example>/gmi,
- function(_, module, deps, animations, content) {
-
- var example = new Example(self.scenarios, self.protractorTests);
- if(animations) {
- example.enableAnimations();
- example.addDeps('angular-animate.js');
- }
-
- example.setModule(module);
- example.addDeps(deps);
- content.replace(/<file\s+name="([^"]*)"\s*>([\s\S]*?)<\/file>/gmi, function(_, name, content) {
- example.addSource(name, content);
- });
- content.replace(/<file\s+src="([^"]+)"(?:\s+tag="([^"]+)")?(?:\s+name="([^"]+)")?\s*\/?>/gmi, function(_, file, tag, name) {
- if(fs.existsSync(file)) {
- var content = fs.readFileSync(file, 'utf8');
- if(content && content.length > 0) {
- if(tag && tag.length > 0) {
- content = extractInlineDocCode(content, tag);
- }
- name = name && name.length > 0 ? name : fspath.basename(file);
- example.addSource(name, content);
- }
- }
- return '';
- })
- return placeholder(example.toHtml());
- }).
- replace(/(?:\*\s+)?<file.+?src="([^"]+)"(?:\s+tag="([^"]+)")?\s*\/?>/i, function(_, file, tag) {
- if(fs.existsSync(file)) {
- var content = fs.readFileSync(file, 'utf8');
- if(tag && tag.length > 0) {
- content = extractInlineDocCode(content, tag);
- }
- return content;
- }
- }).
- replace(/^<doc:example(\s+[^>]*)?>([\s\S]*)<\/doc:example>/mi, function(_, attrs, content) {
- var html, script, scenario,
- example = new Example(self.scenarios, self.protractorTests);
-
- example.setModule((attrs||'module=""').match(/^\s*module=["'](.*)["']\s*$/)[1]);
- content.
- replace(/<doc:source(\s+[^>]*)?>([\s\S]*)<\/doc:source>/mi, function(_, attrs, content) {
- example.addSource('index.html', content.
- replace(/<script>([\s\S]*)<\/script>/mi, function(_, script) {
- example.addSource('script.js', script);
- return '';
- }).
- replace(/<style>([\s\S]*)<\/style>/mi, function(_, style) {
- example.addSource('style.css', style);
- return '';
- })
- );
- }).
- replace(/(<doc:scenario>)([\s\S]*)(<\/doc:scenario>)/mi, function(_, before, content){
- example.addSource('scenario.js', content);
- }).replace(/(<doc:protractor>)([\s\S]*)(<\/doc:protractor>)/mi, function(_, before, content){
- example.addSource('protractorTest.js', content);
- });
-
- return placeholder(example.toHtml());
- }).
- replace(/^<pre(.*?)>([\s\S]*?)<\/pre>/mi, function(_, attrs, content){
- return placeholder(
- '<pre'+attrs+' class="prettyprint linenums">' +
- content.replace(/</g, '&lt;').replace(/>/g, '&gt;') +
- '</pre>');
- }).
- replace(/<div([^>]*)><\/div>/, '<div$1>\n<\/div>').
- replace(/{@link\s+([^\s}]+)\s*([^}]*?)\s*}/g, function(_all, url, title){
- var isFullUrl = url.match(IS_URL),
- isAngular = url.match(IS_ANGULAR),
- isHash = url.match(IS_HASH),
- absUrl = isHash
- ? url
- : (isFullUrl ? url : self.convertUrlToAbsolute(url));
-
- if (!isFullUrl) self.links.push(absUrl);
-
- return '<a href="' + absUrl + '">' +
- (isAngular ? '<code>' : '') +
- (title || url).replace(/^#/g, '').replace(/\n/g, ' ') +
- (isAngular ? '</code>' : '') +
- '</a>';
- }).
- replace(/{@type\s+(\S+)(?:\s+(\S+))?}/g, function(_, type, url) {
- url = url || '#';
- return '<a href="' + url + '" class="' + self.prepare_type_hint_class_name(type) + '">' + type + '</a>';
- }).
- replace(/{@installModule\s+(\S+)?}/g, function(_, module) {
- return explainModuleInstallation(module);
- });
- });
- text = parts.join('');
-
- function prepareClassName(text) {
- return text.toLowerCase().replace(/[_\W]+/g, '-');
- };
-
- var pageClassName, suffix = '-page';
- if(this.name) {
- var split = this.name.match(/^\s*(.+?)\s*:\s*(.+)/);
- if(split && split.length > 1) {
- var before = prepareClassName(split[1]);
- var after = prepareClassName(split[2]);
- pageClassName = before + suffix + ' ' + before + '-' + after + suffix;
- }
- }
- pageClassName = pageClassName || prepareClassName(this.name || 'docs') + suffix;
-
- text = '<div class="' + pageClassName + '">' +
- marked(text) +
- '</div>';
- text = text.replace(/(?:<p>)?(REPLACEME\d+)(?:<\/p>)?/g, function(_, id) {
- return placeholderMap[id];
- });
-
- //!annotate CONTENT
- //!annotate="REGEX" CONTENT
- //!annotate="REGEX" TITLE|CONTENT
- text = text.replace(/\n?\/\/!annotate\s*(?:=\s*['"](.+?)['"])?\s+(.+?)\n\s*(.+?\n)/img,
- function(_, pattern, content, line) {
- var pattern = new RegExp(pattern || '.+');
- var title, text, split = content.split(/\|/);
- if(split.length > 1) {
- text = split[1];
- title = split[0];
- }
- else {
- title = 'Info';
- text = content;
- }
- return "\n" + line.replace(pattern, function(match) {
- return '<div class="nocode nocode-content" data-popover ' +
- 'data-content="' + text + '" ' +
- 'data-title="' + title + '">' +
- match +
- '</div>';
- });
- }
- );
-
- //!details /path/to/local/docs/file.html
- //!details="REGEX" /path/to/local/docs/file.html
- text = text.replace(/\/\/!details\s*(?:=\s*['"](.+?)['"])?\s+(.+?)\n\s*(.+?\n)/img,
- function(_, pattern, url, line) {
- url = '/notes/' + url;
- var pattern = new RegExp(pattern || '.+');
- return line.replace(pattern, function(match) {
- return '<div class="nocode nocode-content" data-foldout data-url="' + url + '">' + match + '</div>';
- });
- }
- );
-
- return text;
- },
-
- parse: function() {
- var atName;
- var atText;
- var match;
- var self = this;
- self.text.split(NEW_LINE).forEach(function(line){
- if ((match = line.match(/^\s*@(\w+)(\s+(.*))?/))) {
- // we found @name ...
- // if we have existing name
- flush();
- atName = match[1];
- atText = [];
- if(match[3]) atText.push(match[3]);
- } else {
- if (atName) {
- atText.push(line);
- }
- }
- });
- flush();
- this.shortName = this.name.split(/[\.:#]/).pop().trim();
- this.id = this.id || // if we have an id just use it
- (this.ngdoc === 'error' ? this.name : '') ||
- (((this.file||'').match(/.*(\/|\\)([^(\/|\\)]*)\.ngdoc/)||{})[2]) || // try to extract it from file name
- this.name; // default to name
- this.moduleName = parseModuleName(this.id);
- this.description = this.markdown(this.description);
- this.example = this.markdown(this.example);
- this['this'] = this.markdown(this['this']);
- return this;
-
- function parseModuleName(id) {
- var module = id.split('.')[0];
- if(module == 'angular') {
- module = 'ng';
- }
- return module;
- }
-
- function flush() {
- if (atName) {
- var text = trim(atText.join('\n')), match;
- if (atName == 'param') {
- match = text.match(/^\{([^}]+)\}\s+(([^\s=]+)|\[(\S+)=([^\]]+)\])\s+(.*)/);
- // 1 1 23 3 4 4 5 5 2 6 6
- if (!match) {
- throw new Error("Not a valid 'param' format: " + text + ' (found in: ' + self.file + ':' + self.line + ')');
- }
-
- var optional = (match[1].slice(-1) === '=');
- var param = {
- name: match[4] || match[3],
- description:self.markdown(text.replace(match[0], match[6])),
- type: optional ? match[1].substring(0, match[1].length-1) : match[1],
- optional: optional,
- default: match[5]
- };
- self.param.push(param);
- } else if (atName == 'returns' || atName == 'return') {
- match = text.match(/^\{([^}]+)\}\s+(.*)/);
- if (!match) {
- throw new Error("Not a valid 'returns' format: " + text + ' (found in: ' + self.file + ':' + self.line + ')');
- }
- self.returns = {
- type: match[1],
- description: self.markdown(text.replace(match[0], match[2]))
- };
- } else if(atName == 'requires') {
- match = text.match(/^([^\s]*)\s*([\S\s]*)/);
- self.requires.push({
- name: match[1],
- text: self.markdown(match[2])
- });
- } else if(atName == 'property') {
- match = text.match(/^\{(\S+)\}\s+(\S+)(\s+(.*))?/);
- if (!match) {
- throw new Error("Not a valid 'property' format: " + text + ' (found in: ' + self.file + ':' + self.line + ')');
- }
- var property = new Doc({
- type: match[1],
- name: match[2],
- shortName: match[2],
- description: self.markdown(text.replace(match[0], match[4]))
- });
- self.properties.push(property);
- } else if(atName == 'eventType') {
- match = text.match(/^([^\s]*)\s+on\s+([\S\s]*)/);
- self.type = match[1];
- self.target = match[2];
- } else {
- self[atName] = text;
- }
- }
- }
- },
-
- html: function() {
- var dom = new DOM(),
- self = this,
- minerrMsg;
-
- var gitTagFromFullVersion = function(version) {
- var match = version.match(/sha\.(\w{7})/);
-
- if (match) {
- // git sha
- return match[1];
- }
-
- // git tag
- return 'v' + version;
- };
-
- if (this.section === 'api') {
- dom.tag('a', {
- href: 'http://github.com/angular/angular.js/tree/' +
- gitTagFromFullVersion(gruntUtil.getVersion().full) + '/' + self.file + '#L' + self.line,
- class: 'view-source btn btn-action' }, function(dom) {
- dom.tag('i', {class:'icon-zoom-in'}, ' ');
- dom.text(' View source');
- });
- }
- dom.tag('a', {
- href: 'http://github.com/angular/angular.js/edit/master/' + self.file,
- class: 'improve-docs btn btn-primary' }, function(dom) {
- dom.tag('i', {class:'icon-edit'}, ' ');
- dom.text(' Improve this doc');
- });
- dom.h(title(this), function() {
- notice('deprecated', 'Deprecated API', self.deprecated);
- if (self.ngdoc === 'error') {
- minerrMsg = lookupMinerrMsg(self);
- dom.tag('pre', {
- class:'minerr-errmsg',
- 'error-display': minerrMsg.replace(/"/g, '&quot;')
- }, minerrMsg);
- }
- if (self.ngdoc != 'overview') {
- dom.h('Description', self.description, dom.html);
- }
- dom.h('Dependencies', self.requires, function(require){
- dom.tag('code', function() {
- dom.tag('a', {href: 'api/ng.' + require.name}, require.name);
- });
- dom.html(require.text);
- });
-
- (self['html_usage_' + self.ngdoc] || function() {
- throw new Error("Don't know how to format @ngdoc: " + self.ngdoc);
- }).call(self, dom);
-
- dom.h('Example', self.example, dom.html);
- });
-
- self.anchors = dom.anchors;
-
- return dom.toString();
-
- //////////////////////////
-
- function notice(name, legend, msg){
- if (self[name] === undefined) return;
- dom.tag('fieldset', {'class':name}, function(dom){
- dom.tag('legend', legend);
- dom.text(msg);
- });
- }
-
- },
-
- prepare_type_hint_class_name : function(type) {
- var typeClass = type.toLowerCase().match(/^[-\w]+/) || [];
- typeClass = typeClass[0] ? typeClass[0] : 'object';
- return 'label type-hint type-hint-' + typeClass;
- },
-
- html_usage_parameters: function(dom) {
- var self = this;
- var params = this.param ? this.param : [];
- if(this.animations) {
- dom.h('Animations', this.animations, function(animations){
- dom.html('<ul>');
- var animations = animations.split("\n");
- animations.forEach(function(ani) {
- dom.html('<li>');
- dom.text(ani);
- dom.html('</li>');
- });
- dom.html('</ul>');
- });
- dom.html('<a href="api/ngAnimate.$animate">Click here</a> to learn more about the steps involved in the animation.');
- }
- if(params.length > 0) {
- dom.html('<h2>Parameters</h2>');
- dom.html('<table class="variables-matrix table table-bordered table-striped">');
- dom.html('<thead>');
- dom.html('<tr>');
- dom.html('<th>Param</th>');
- dom.html('<th>Type</th>');
- dom.html('<th>Details</th>');
- dom.html('</tr>');
- dom.html('</thead>');
- dom.html('<tbody>');
- for(var i=0;i<params.length;i++) {
- param = params[i];
- var name = param.name;
- var types = param.type;
- if(types[0]=='(') {
- types = types.substr(1);
- }
-
- var limit = types.length - 1;
- if(types.charAt(limit) == ')' && types.charAt(limit-1) != '(') {
- types = types.substr(0,limit);
- }
- types = types.split(/\|(?![\(\)\w\|\s]+>)/);
- if (param.optional) {
- name += ' <div><em>(optional)</em></div>';
- }
- dom.html('<tr>');
- dom.html('<td>' + name + '</td>');
- dom.html('<td>');
- for(var j=0;j<types.length;j++) {
- var type = types[j];
- dom.html('<a href="" class="' + self.prepare_type_hint_class_name(type) + '">');
- dom.text(type);
- dom.html('</a>');
- }
-
- dom.html('</td>');
- var description = '<td>';
- description += param.description;
- if (param.default) {
- description += ' <p><em>(default: ' + param.default + ')</em></p>';
- }
- description += '</td>';
- dom.html(description);
- dom.html('</tr>');
- };
- dom.html('</tbody>');
- dom.html('</table>');
- }
- },
-
- html_usage_returns: function(dom) {
- var self = this;
- if (self.returns) {
- dom.html('<h2>Returns</h2>');
- dom.html('<table class="variables-matrix">');
- dom.html('<tr>');
- dom.html('<td>');
- dom.html('<a href="" class="' + self.prepare_type_hint_class_name(self.returns.type) + '">');
- dom.text(self.returns.type);
- dom.html('</a>');
- dom.html('</td>');
- dom.html('<td>');
- dom.html(self.returns.description);
- dom.html('</td>');
- dom.html('</tr>');
- dom.html('</table>');
- }
- },
-
- html_usage_this: function(dom) {
- var self = this;
- if (self['this']) {
- dom.h(function(dom){
- dom.html("Method's <code>this</code>");
- }, function(dom){
- dom.html(self['this']);
- });
- }
- },
-
- html_usage_function: function(dom){
- var self = this;
- var name = self.name.match(/^angular(\.mock)?\.(\w+)$/) ? self.name : self.name.split(/\./).pop()
-
- dom.h('Usage', function() {
- dom.code(function() {
- dom.text(name);
- dom.text('(');
- self.parameters(dom, ', ');
- dom.text(');');
- });
-
- self.html_usage_parameters(dom);
- self.html_usage_this(dom);
- self.html_usage_returns(dom);
- });
- this.method_properties_events(dom);
- },
-
- html_usage_property: function(dom){
- var self = this;
- dom.h('Usage', function() {
- dom.code(function() {
- dom.text(self.name);
- });
-
- self.html_usage_returns(dom);
- });
- },
-
- html_usage_directive: function(dom){
- var self = this;
- dom.h('Usage', function() {
- var restrict = self.restrict || 'A';
-
- if (restrict.match(/E/)) {
- dom.html('<p>');
- dom.text('This directive can be used as custom element, but be aware of ');
- dom.tag('a', {href:'guide/ie'}, 'IE restrictions');
- dom.text('.');
- dom.html('</p>');
- }
-
- if (self.usage) {
- dom.tag('pre', function() {
- dom.tag('code', function() {
- dom.text(self.usage);
- });
- });
- } else {
- if (restrict.match(/E/)) {
- dom.text('as element:');
- dom.code(function() {
- dom.text('<');
- dom.text(dashCase(self.shortName));
- renderParams('\n ', '="', '"');
- dom.text('>\n</');
- dom.text(dashCase(self.shortName));
- dom.text('>');
- });
- }
- if (restrict.match(/A/)) {
- var element = self.element || 'ANY';
- dom.text('as attribute');
- dom.code(function() {
- dom.text('<' + element + ' ');
- dom.text(dashCase(self.shortName));
- renderParams('\n ', '="', '"', true);
- dom.text('>\n ...\n');
- dom.text('</' + element + '>');
- });
- }
- if (restrict.match(/C/)) {
- dom.text('as class');
- var element = self.element || 'ANY';
- dom.code(function() {
- dom.text('<' + element + ' class="');
- dom.text(dashCase(self.shortName));
- renderParams(' ', ': ', ';', true);
- dom.text('">\n ...\n');
- dom.text('</' + element + '>');
- });
- }
- }
- self.html_usage_directiveInfo(dom);
- self.html_usage_parameters(dom);
- });
-
- self.method_properties_events(dom);
-
- function renderParams(prefix, infix, suffix, skipSelf) {
- (self.param||[]).forEach(function(param) {
- var skip = skipSelf && (param.name == self.shortName || param.name.indexOf(self.shortName + '|') == 0);
- if (!skip) {
- dom.text(prefix);
- dom.text(param.optional ? '[' : '');
- var parts = param.name.split('|');
- dom.text(dashCase(parts[skipSelf ? 0 : 1] || parts[0]));
- }
- if (BOOLEAN_ATTR[param.name]) {
- dom.text(param.optional ? ']' : '');
- } else {
- dom.text(BOOLEAN_ATTR[param.name] ? '' : infix );
- dom.text(('{' + param.type + '}').replace(/^\{\'(.*)\'\}$/, '$1'));
- dom.text(suffix);
- dom.text(param.optional && !skip ? ']' : '');
- }
- });
- }
-
- },
-
- html_usage_filter: function(dom){
- var self = this;
- dom.h('Usage', function() {
- dom.h('In HTML Template Binding', function() {
- dom.tag('code', function() {
- if (self.usage) {
- dom.text(self.usage);
- } else {
- dom.text('{{ ');
- dom.text(self.shortName);
- dom.text('_expression | ');
- dom.text(self.shortName);
- self.parameters(dom, ':', true);
- dom.text(' }}');
- }
- });
- });
-
- dom.h('In JavaScript', function() {
- dom.tag('code', function() {
- dom.text('$filter(\'');
- dom.text(self.shortName);
- dom.text('\')(');
- self.parameters(dom, ', ');
- dom.text(')');
- });
- });
-
- self.html_usage_parameters(dom);
- self.html_usage_this(dom);
- self.html_usage_returns(dom);
- });
- },
-
- html_usage_inputType: function(dom){
- var self = this;
- dom.h('Usage', function() {
- dom.code(function() {
- dom.text('<input type="' + self.shortName + '"');
- (self.param||[]).forEach(function(param){
- dom.text('\n ');
- dom.text(param.optional ? ' [' : ' ');
- dom.text(dashCase(param.name));
- dom.text(BOOLEAN_ATTR[param.name] ? '' : '="{' + param.type + '}"');
- dom.text(param.optional ? ']' : '');
- });
- dom.text('>');
- });
- self.html_usage_parameters(dom);
- });
- },
-
- html_usage_directiveInfo: function(dom) {
- var self = this;
- var list = [];
-
-
- if (self.scope !== undefined) {
- list.push('This directive creates new scope.');
- }
- if (self.priority !== undefined) {
- list.push('This directive executes at priority level ' + self.priority + '.');
- }
-
- if (list.length) {
- dom.h('Directive info', function() {
- dom.ul(list);
- });
- }
- },
-
- html_usage_overview: function(dom){
- dom.html(this.description);
- },
-
- html_usage_error: function (dom) {
- dom.html();
- },
-
- html_usage_interface: function(dom){
- var self = this;
-
- if (this.param.length) {
- dom.h('Usage', function() {
- dom.code(function() {
- dom.text(self.name.split('.').pop());
- dom.text('(');
- self.parameters(dom, ', ');
- dom.text(');');
- });
-
- self.html_usage_parameters(dom);
- self.html_usage_this(dom);
- self.html_usage_returns(dom);
- });
- }
- this.method_properties_events(dom);
- },
-
- html_usage_service: function(dom) {
- this.html_usage_interface(dom)
- },
-
- html_usage_object: function(dom) {
- this.html_usage_interface(dom)
- },
-
- method_properties_events: function(dom) {
- var self = this;
- if (self.methods.length) {
- dom.div({class:'member method'}, function(){
- dom.h('Methods', self.methods, function(method){
- var signature = (method.param || []).map(property('name'));
- dom.h(method.shortName + '(' + signature.join(', ') + ')', method, function() {
- dom.html(method.description);
- method.html_usage_parameters(dom);
- self.html_usage_this(dom);
- method.html_usage_returns(dom);
-
- dom.h('Example', method.example, dom.html);
- });
- });
- });
- }
- if (self.properties.length) {
- dom.div({class:'member property'}, function(){
- dom.h('Properties', self.properties, function(property){
- dom.h(property.shortName, function() {
- dom.html(property.description);
- if (!property.html_usage_returns) {
- console.log(property);
- }
- property.html_usage_returns(dom);
- dom.h('Example', property.example, dom.html);
- });
- });
- });
- }
- if (self.events.length) {
- dom.div({class:'member event'}, function(){
- dom.h('Events', self.events, function(event){
- dom.h(event.shortName, event, function() {
- dom.html(event.description);
- if (event.type == 'listen') {
- dom.tag('div', {class:'inline'}, function() {
- dom.h('Listen on:', event.target);
- });
- } else {
- dom.tag('div', {class:'inline'}, function() {
- dom.h('Type:', event.type);
- });
- dom.tag('div', {class:'inline'}, function() {
- dom.h('Target:', event.target);
- });
- }
- event.html_usage_parameters(dom);
- self.html_usage_this(dom);
-
- dom.h('Example', event.example, dom.html);
- });
- });
- });
- }
- },
-
- parameters: function(dom, separator, skipFirst, prefix) {
- var sep = prefix ? separator : '';
- (this.param||[]).forEach(function(param, i){
- if (!(skipFirst && i==0)) {
- if (param.optional) {
- dom.text('[' + sep + param.name + ']');
- } else {
- dom.text(sep + param.name);
- }
- }
- sep = separator;
- });
- }
-
-};
-//////////////////////////////////////////////////////////
-
-
-//////////////////////////////////////////////////////////
-var GLOBALS = /^angular\.([^\.]+)$/,
- MODULE = /^((?:(?!^angular\.)[^\.])+)$/,
- MODULE_MOCK = /^angular\.mock\.([^\.]+)$/,
- MODULE_DIRECTIVE = /^((?:(?!^angular\.)[^\.])+)\.directive:([^\.]+)$/,
- MODULE_DIRECTIVE_INPUT = /^((?:(?!^angular\.)[^\.])+)\.directive:input\.([^\.]+)$/,
- MODULE_FILTER = /^((?:(?!^angular\.)[^\.])+)\.filter:([^\.]+)$/,
- MODULE_SERVICE = /^((?:(?!^angular\.)[^\.])+)\.([^\.]+?)(Provider)?$/,
- MODULE_TYPE = /^((?:(?!^angular\.)[^\.])+)\..+\.([A-Z][^\.]+)$/;
-
-
-function title(doc) {
- if (!doc.name) return doc.name;
- var match,
- text = doc.name;
-
- var makeTitle = function (name, type, componentType, component) {
- // Makes title markup.
- // makeTitle('Foo', 'directive', 'module', 'ng') ->
- // Foo is a directive in module ng
- return function () {
- this.tag('code', name);
- this.tag('div', function () {
- this.tag('span', {class: 'hint'}, function () {
- if (type && component) {
- this.text(type + ' in ' + componentType + ' ');
- this.tag('code', component);
- }
- });
- });
- };
- };
-
- if (doc.ngdoc === 'error') {
- return makeTitle(doc.fullName, 'error', 'component', doc.getMinerrNamespace());
- } else if (text == 'angular.Module') {
- return makeTitle('Module', 'Type', 'module', 'ng');
- } else if (match = text.match(GLOBALS)) {
- return makeTitle('angular.' + match[1], 'API', 'module', 'ng');
- } else if (match = text.match(MODULE)) {
- return makeTitle('', '', 'module', match[1]);
- } else if (match = text.match(MODULE_MOCK)) {
- return makeTitle('angular.mock.' + match[1], 'API', 'module', 'ng');
- } else if (match = text.match(MODULE_DIRECTIVE)) {
- return makeTitle(match[2], 'directive', 'module', match[1]);
- } else if (match = text.match(MODULE_DIRECTIVE_INPUT)) {
- return makeTitle('input [' + match[2] + ']', 'directive', 'module', match[1]);
- } else if (match = text.match(MODULE_FILTER)) {
- return makeTitle(match[2], 'filter', 'module', match[1]);
- } else if (match = text.match(MODULE_SERVICE)) {
- return makeTitle(match[2] + (match[3] || ''), 'service', 'module', match[1]);
- } else if (match = text.match(MODULE_TYPE)) {
- return makeTitle(match[2], 'type', 'module', match[1]);
- }
- return text;
-}
-
-
-function scenarios(docs){
- var specs = [];
-
- specs.push('describe("angular+jqlite", function() {');
- appendSpecs('index-nocache.html#!/');
- specs.push('});');
-
- specs.push('');
- specs.push('');
-
- specs.push('describe("angular+jquery", function() {');
- appendSpecs('index-jq-nocache.html#!/');
- specs.push('});');
-
- return specs.join('\n');
-
- function appendSpecs(urlPrefix) {
- docs.forEach(function(doc){
- specs.push(' describe("' + doc.section + '/' + doc.id + '", function() {');
- specs.push(' beforeEach(function() {');
- specs.push(' browser().navigateTo("' + urlPrefix + doc.section + '/' + doc.id + '");');
- specs.push(' });');
- specs.push(' ');
- doc.scenarios.forEach(function(scenario){
- specs.push(indentCode(trim(scenario), 4));
- specs.push('');
- });
- specs.push('});');
- specs.push('');
- });
- }
-}
-
-function writeProtractorTest(doc, pathPrefix){
- var lines = [];
- lines.push('describe("' + doc.section + '/' + doc.id + '", function() {');
- lines.push(' beforeEach(function() {');
- lines.push(' browser.get("' + pathPrefix + doc.section + '/' + doc.id + '");');
- lines.push(' });');
- lines.push('');
- doc.protractorTests.forEach(function(test){
- lines.push(indentCode(trim(test), 0));
- lines.push('');
- });
- lines.push('});');
- lines.push('');
- return lines.join('\n');
-}
-
-
-//////////////////////////////////////////////////////////
-function metadata(docs){
- var pages = [];
- docs.forEach(function(doc){
- var path = (doc.name || '').split(/(\:\s*)/);
- for ( var i = 1; i < path.length; i++) {
- path.splice(i, 1);
- }
- var shortName = path.pop().trim();
-
- if (path.pop() == 'input') {
- shortName = 'input [' + shortName + ']';
- }
-
- pages.push({
- section: doc.section,
- id: doc.id,
- name: title(doc),
- shortName: shortName,
- type: doc.ngdoc,
- moduleName: doc.moduleName,
- shortDescription: doc.shortDescription(),
- keywords: doc.keywords()
- });
- });
- pages.sort(sidebarSort);
- return pages;
-}
-
-var KEYWORD_PRIORITY = {
- '.index': 1,
- '.overview': 1,
- '.bootstrap': 2,
- '.mvc': 3,
- '.scopes': 4,
- '.compiler': 5,
- '.templates': 6,
- '.services': 7,
- '.di': 8,
- '.unit-testing': 9,
- '.dev_guide': 9,
- '.dev_guide.overview': 1,
- '.dev_guide.bootstrap': 2,
- '.dev_guide.bootstrap.auto_bootstrap': 1,
- '.dev_guide.bootstrap.manual_bootstrap': 2,
- '.dev_guide.mvc': 3,
- '.dev_guide.mvc.understanding_model': 1,
- '.dev_guide.mvc.understanding_controller': 2,
- '.dev_guide.mvc.understanding_view': 3,
- '.dev_guide.scopes': 4,
- '.dev_guide.scopes.understanding_scopes': 1,
- '.dev_guide.scopes.internals': 2,
- '.dev_guide.compiler': 5,
- '.dev_guide.templates': 6,
- '.dev_guide.services': 7,
- '.dev_guide.di': 8,
- '.dev_guide.unit-testing': 9
-};
-
-var GUIDE_PRIORITY = [
- 'introduction',
- 'overview',
- 'concepts',
- 'dev_guide.mvc',
-
- 'dev_guide.mvc.understanding_controller',
- 'dev_guide.mvc.understanding_model',
- 'dev_guide.mvc.understanding_view',
-
- 'dev_guide.services.understanding_services',
- 'dev_guide.services.managing_dependencies',
- 'dev_guide.services.creating_services',
- 'dev_guide.services.injecting_controllers',
- 'dev_guide.services.testing_services',
- 'dev_guide.services.$location',
- 'dev_guide.services',
-
- 'databinding',
- 'dev_guide.templates.css-styling',
- 'dev_guide.templates.filters.creating_filters',
- 'dev_guide.templates.filters',
- 'dev_guide.templates.filters.using_filters',
- 'dev_guide.templates',
-
- 'di',
- 'providers',
- 'module',
- 'scope',
- 'expression',
- 'bootstrap',
- 'directive',
- 'compiler',
-
- 'forms',
- 'animations',
-
- 'dev_guide.e2e-testing',
- 'dev_guide.unit-testing',
-
- 'i18n',
- 'ie',
- 'migration',
-];
-
-function sidebarSort(a, b){
- priorityA = GUIDE_PRIORITY.indexOf(a.id);
- priorityB = GUIDE_PRIORITY.indexOf(b.id);
-
- if (priorityA > -1 || priorityB > -1) {
- return priorityA < priorityB ? -1 : (priorityA > priorityB ? 1 : 0);
- }
-
- function mangleName(doc) {
- var path = doc.id.split(/\./);
- var mangled = [];
- var partialName = '';
- path.forEach(function(name){
- partialName += '.' + name;
- mangled.push(KEYWORD_PRIORITY[partialName] || 5);
- mangled.push(name);
- });
- return (doc.section + '/' + mangled.join('.')).toLowerCase();
- }
- var nameA = mangleName(a);
- var nameB = mangleName(b);
- return nameA < nameB ? -1 : (nameA > nameB ? 1 : 0);
-}
-
-
-//////////////////////////////////////////////////////////
-function trim(text) {
- var MAX_INDENT = 9999;
- var empty = RegExp.prototype.test.bind(/^\s*$/);
- var lines = text.split('\n');
- var minIndent = MAX_INDENT;
- var indentRegExp;
- var ignoreLine = (lines[0][0] != ' ' && lines.length > 1);
- // ignore first line if it has no indentation and there is more than one line
-
- lines.forEach(function(line){
- if (ignoreLine) {
- ignoreLine = false;
- return;
- }
-
- var indent = line.match(/^\s*/)[0].length;
- if (indent > 0 || minIndent == MAX_INDENT) {
- minIndent = Math.min(minIndent, indent);
- }
- });
-
- indentRegExp = new RegExp('^\\s{0,' + minIndent + '}');
-
- for ( var i = 0; i < lines.length; i++) {
- lines[i] = lines[i].replace(indentRegExp, '');
- }
-
- // remove leading lines
- while (empty(lines[0])) {
- lines.shift();
- }
-
- // remove trailing
- while (empty(lines[lines.length - 1])) {
- lines.pop();
- }
- return lines.join('\n');
-}
-
-function indentCode(text, spaceCount) {
- var lines = text.split('\n'),
- indent = '',
- fixedLines = [];
-
- while(spaceCount--) indent += ' ';
-
- lines.forEach(function(line) {
- fixedLines.push(indent + line);
- });
-
- return fixedLines.join('\n');
-}
-
-//////////////////////////////////////////////////////////
-function merge(docs){
- var byFullId = {};
-
- docs.forEach(function(doc) {
- byFullId[doc.section + '/' + doc.id] = doc;
- });
-
- for(var i = 0; i < docs.length;) {
- if (findParent(docs[i], 'method') || findParent(docs[i], 'property') || findParent(docs[i], 'event')) {
- docs.splice(i, 1);
- } else {
- i++;
- }
- }
-
- function findParent(doc, name) {
- var parentName = doc[name + 'Of'];
- if (!parentName) return false;
-
- var parent = byFullId['api/' + parentName];
- if (!parent)
- throw new Error("No parent named '" + parentName + "' for '" +
- doc.name + "' in @" + name + "Of.");
-
- var listName = (name + 's').replace(/ys$/, 'ies');
- var list = parent[listName] = (parent[listName] || []);
- list.push(doc);
- list.sort(orderByName);
- return true;
- }
-
- function orderByName(a, b){
- return a.name < b.name ? -1 : (a.name > b.name ? 1 : 0);
- }
-}
-//////////////////////////////////////////////////////////
-
-
-function checkBrokenLinks(docs) {
- var byFullId = Object.create(null);
-
- docs.forEach(function(doc) {
- byFullId[doc.section + '/' + doc.id] = doc;
- if (doc.section === 'api') {
- doc.anchors.push('directive', 'service', 'filter', 'function');
- }
- });
-
- docs.forEach(function(doc) {
- doc.links.forEach(function(link) {
- // convert #id to path#id
- if (link[0] == '#') {
- link = doc.section + '/' + doc.id.split('#').shift() + link;
- }
-
- var parts = link.split('#');
- var pageLink = parts[0];
- var anchorLink = parts[1];
- var linkedPage = byFullId[pageLink];
-
- if (!linkedPage) {
- console.log('WARNING: ' + doc.section + '/' + doc.id + ' (defined in ' + doc.file + ') points to a non existing page "' + link + '"!');
- } else if (anchorLink && linkedPage.anchors.indexOf(anchorLink) === -1) {
- console.log('WARNING: ' + doc.section + '/' + doc.id + ' (defined in ' + doc.file + ') points to a non existing anchor "' + link + '"!');
- }
- });
- });
-}
-
-
-function property(name) {
- return function(value){
- return value[name];
- };
-}
-
-
-var DASH_CASE_REGEXP = /[A-Z]/g;
-function dashCase(name){
- return name.replace(DASH_CASE_REGEXP, function(letter, pos) {
- return (pos ? '-' : '') + letter.toLowerCase();
- });
-}
-//////////////////////////////////////////////////////////
-
-function explainModuleInstallation(moduleName){
- var ngMod = ngModule(moduleName),
- modulePackage = 'angular-' + moduleName,
- modulePackageFile = modulePackage + '.js';
-
- // Deal with inconsistent ngMock naming - doing it verbosely and explicitly here
- // rather than cleverly interweaving it in the previous lines to make it obvious
- // what is going on
- if ( moduleName == 'mock' ) {
- modulePackage = 'angular-mocks';
- modulePackageFile = modulePackage + '.js';
- }
-
- return '<h1>Installation</h1>' +
- '<p>First include <code>' + modulePackageFile +'</code> in your HTML:</p><pre><code>' +
- ' &lt;script src=&quot;angular.js&quot;&gt;\n' +
- ' &lt;script src=&quot;' + modulePackageFile + '&quot;&gt;</pre></code>' +
-
- '<p>You can download this file from the following places:</p>' +
- '<ul>' +
- '<li>[Google CDN](https://developers.google.com/speed/libraries/devguide#angularjs)<br>' +
- 'e.g. <code>"//ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/' + modulePackageFile + '"</code></li>' +
- '<li>[Bower](http://bower.io)<br>' +
- 'e.g. <code>bower install ' + modulePackage + '@X.Y.Z</code></li>' +
- '<li><a href="http://code.angularjs.org/">code.angularjs.org</a><br>' +
- 'e.g. <code>"//code.angularjs.org/X.Y.Z/' + modulePackageFile + '"</code></li>' +
- '</ul>' +
- '<p>where X.Y.Z is the AngularJS version you are running.</p>' +
- '<p>Then load the module in your application by adding it as a dependent module:</p><pre><code>' +
- ' angular.module(\'app\', [\'' + ngMod + '\']);</pre></code>' +
-
- '<p>With that you\'re ready to get started!</p>';
-}
-
-function ngModule(moduleName) {
- return 'ng' + moduleName[0].toUpperCase() + moduleName.substr(1);
-}
diff --git a/docs/src/reader.js b/docs/src/reader.js
deleted file mode 100644
index bb9b6b5f..00000000
--- a/docs/src/reader.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- * All reading related code here. This is so that we can separate the async code from sync code
- * for testability
- */
-
-exports.collect = collect;
-
-var ngdoc = require('./ngdoc.js'),
- Q = require('qq'),
- qfs = require('q-io/fs'),
- PATH = require('path');
-
-var NEW_LINE = /\n\r?/;
-
-function collect() {
- var allDocs = [];
-
- //collect docs in JS Files
- var path = 'src';
- var promiseA = Q.when(qfs.listTree(path), function(files) {
- var done;
- //read all files in parallel.
- files.forEach(function(file) {
- var work;
- if(/\.js$/.test(file)) {
- work = Q.when(qfs.read(file, 'b'), function(content) {
- processJsFile(content, file).forEach (function(doc) {
- allDocs.push(doc);
- });
- });
- }
- done = Q.when(done, function() {
- return work;
- });
- });
- return done;
- });
-
- //collect all ng Docs in Content Folder
- var path2 = 'docs/content';
- var promiseB = Q.when(qfs.listTree(path2), function(files){
- var done2;
- files.forEach(function(file) {
- var work2;
- if (file.match(/\.ngdoc$/)) {
- work2 = Q.when(qfs.read(file, 'b'), function(content){
- var section = '@section ' + file.split(PATH.sep)[2] + '\n';
- allDocs.push(new ngdoc.Doc(section + content.toString(),file, 1).parse());
- });
- }
- done2 = Q.when(done2, function() {
- return work2;
- });
- });
- return done2;
- });
-
- return Q.join(promiseA, promiseB, function() {
- return allDocs;
- });
-}
-
-function processJsFile(content, file) {
- var docs = [];
- var lines = content.toString().split(NEW_LINE);
- var text;
- var startingLine ;
- var match;
- var inDoc = false;
-
- lines.forEach(function(line, lineNumber){
- lineNumber++;
- // is the comment starting?
- if (!inDoc && (match = line.match(/^\s*\/\*\*\s*(.*)$/))) {
- line = match[1];
- inDoc = true;
- text = [];
- startingLine = lineNumber;
- }
- // are we done?
- if (inDoc && line.match(/\*\//)) {
- text = text.join('\n');
- text = text.replace(/^\n/, '');
- if (text.match(/@ngdoc/)){
- //console.log(file, startingLine)
- docs.push(new ngdoc.Doc('@section api\n' + text, file, startingLine).parse());
- }
- doc = null;
- inDoc = false;
- }
- // is the comment add text
- if (inDoc){
- text.push(line.replace(/^\s*\*\s?/, ''));
- }
- });
- return docs;
-}
diff --git a/docs/src/templates/.htaccess b/docs/src/templates/.htaccess
deleted file mode 100644
index aa3ae543..00000000
--- a/docs/src/templates/.htaccess
+++ /dev/null
@@ -1,19 +0,0 @@
-## OFFLINE SUPPORT ##
-
-# These rules tell apache to check if there is a cookie called "offline", with value set to the
-# current angular version. If this rule matches the appcache-offline.manifest will be served for
-# requests to appcache.manifest
-#
-# This file must be processed by Grunt in order to replace %ANGULAR_VERSION% with the actual version.
-
-Options -Indexes
-RewriteEngine on
-RewriteCond %{HTTP_COOKIE} ng-offline="NG_VERSION_FULL"
-RewriteRule appcache.manifest appcache-offline.manifest
-
-## Redirect to the latest manifest
-RewriteCond %{HTTP_HOST} ^docs-next\.angularjs\.org$
-RewriteRule appcache.manifest http://code.angularjs.org/next/docs/appcache.manifest [R=301]
-
-## HTML5 URL Support ##
-RewriteRule ^(guide|api|misc|tutorial)(/.*)?$ index.html
diff --git a/docs/src/templates/css/animations.css b/docs/src/templates/css/animations.css
deleted file mode 100644
index 7bf1e2e8..00000000
--- a/docs/src/templates/css/animations.css
+++ /dev/null
@@ -1,62 +0,0 @@
-.reveal.ng-enter {
- -webkit-transition:1s linear all;
- -moz-transition:1s linear all;
- -o-transition:1s linear all;
- transition:1s linear all;
-
- opacity:0;
-}
-.reveal.ng-enter.ng-enter-active {
- opacity:1;
-}
-
-.nav-list {
- padding: 0;
-}
-
-.nav-list li {
- margin:0!important;
- padding:2px 15px;
- overflow:hidden;
- line-height:1.1em;
-}
-
-.slide-reveal.ng-enter {
- -webkit-transition:0.5s linear all;
- -moz-transition:0.5s linear all;
- -o-transition:0.5s linear all;
- transition:0.5s linear all;
-
- opacity:0.5;
- position:relative;
- opacity:0;
- top:10px;
-}
-.slide-reveal.ng-enter.ng-enter-active {
- top:0;
- opacity:1;
-}
-
-.foldout.ng-enter,
-.foldout.ng-move,
-.foldout.ng-hide-add,
-.foldout.ng-hide-remove {
- -webkit-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- -moz-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- -o-transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- transition:0.3s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-}
-
-.foldout.ng-hide-remove,
-.foldout.ng-hide-add.ng-hide-active,
-.foldout.ng-enter,
-.foldout.ng-move {
- opacity:0;
-}
-
-.foldout.ng-move.ng-move-active,
-.foldout.ng-hide-remove.ng-hide-remove-active,
-.foldout.ng-hide-add,
-.foldout.ng-enter.ng-enter-active {
- opacity:1;
-}
diff --git a/docs/src/templates/css/doc_widgets.css b/docs/src/templates/css/doc_widgets.css
deleted file mode 100644
index 587d5a7e..00000000
--- a/docs/src/templates/css/doc_widgets.css
+++ /dev/null
@@ -1,150 +0,0 @@
-ul.doc-example {
- list-style-type: none;
- position: relative;
- font-size: 14px;
-}
-
-ul.doc-example > li {
- border: 2px solid gray;
- border-radius: 5px;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
- background-color: white;
- margin-bottom: 20px;
-}
-
-ul.doc-example > li.doc-example-heading {
- border: none;
- border-radius: 0;
- margin-bottom: -10px;
-}
-
-span.nojsfiddle {
- float: right;
- font-size: 14px;
- margin-right:10px;
- margin-top: 10px;
-}
-
-form.jsfiddle {
- position: absolute;
- right: 0;
- z-index: 1;
- height: 14px;
-}
-
-form.jsfiddle button {
- cursor: pointer;
- padding: 4px 10px;
- margin: 10px;
- background-color: #FFF;
- font-weight: bold;
- color: #7989D6;
- border-color: #7989D6;
- -moz-border-radius: 8px;
- -webkit-border-radius:8px;
- border-radius: 8px;
-}
-
-form.jsfiddle textarea, form.jsfiddle input {
- display: none;
-}
-
-li.doc-example-live {
- padding: 10px;
- font-size: 1.2em;
-}
-
-div.syntaxhighlighter {
- padding-bottom: 1px !important; /* fix to remove unnecessary scrollbars http://is.gd/gSMgC */
-}
-
-/* TABS - tutorial environment navigation */
-
-div.tabs-nav {
- height: 25px;
- position: relative;
-}
-
-div.tabs-nav ul li {
- list-style: none;
- display: inline-block;
- padding: 5px 10px;
-}
-
-div.tabs-nav ul li.current a {
- color: white;
- text-decoration: none;
-}
-
-div.tabs-nav ul li.current {
- background: #7989D6;
- -moz-box-shadow: 4px 4px 6px #48577D;
- -moz-border-radius-topright: 8px;
- -moz-border-radius-topleft: 8px;
- box-shadow: 4px 4px 6px #48577D;
- border-radius-topright: 8px;
- border-radius-topleft: 8px;
- -webkit-box-shadow: 4px 4px 6px #48577D;
- -webkit-border-top-right-radius: 8px;
- -webkit-border-top-left-radius: 8px;
- border-top-right-radius: 8px;
- border-top-left-radius: 8px;
-}
-
-div.tabs-content {
- padding: 4px;
- position: relative;
- background: #7989D6;
- -moz-border-radius: 8px;
- border-radius: 8px;
- -webkit-border-radius: 8px;
-}
-
-div.tabs-content-inner {
- margin: 1px;
- padding: 10px;
- background: white;
- border-radius: 6px;
- -moz-border-radius: 6px;
- -webkit-border-radius: 6px;
-}
-
-
-/* Tutorial Nav Bar */
-
-#tutorial-nav {
- margin: 0.5em 0 1em 0;
- padding: 0;
- list-style-type: none;
- background: #7989D6;
-
- -moz-border-radius: 15px;
- -webkit-border-radius: 15px;
- border-radius: 15px;
-
- -moz-box-shadow: 4px 4px 6px #48577D;
- -webkit-box-shadow: 4px 4px 6px #48577D;
- box-shadow: 4px 4px 6px #48577D;
-}
-
-
-#tutorial-nav li {
- display: inline;
-}
-
-
-#tutorial-nav a:link, #tutorial-nav a:visited {
- font-size: 1.2em;
- color: #FFF;
- text-decoration: none;
- text-align: center;
- display: inline-block;
- width: 11em;
- padding: 0.2em 0;
-}
-
-
-#tutorial-nav a:hover {
- color: #000;
-}
diff --git a/docs/src/templates/css/docs.css b/docs/src/templates/css/docs.css
deleted file mode 100644
index 10b60b5b..00000000
--- a/docs/src/templates/css/docs.css
+++ /dev/null
@@ -1,575 +0,0 @@
-/* Logo */
-
-.header .brand {
- padding-top: 6px;
- padding-bottom: 0px;
-}
-
-.header .brand img {
- height: 25px;
- width: 92px;
-}
-
-/* end: Logo */
-
-
-/* this is here to avoid the display=block shuffling of ngShow */
-.breadcrumb li > * {
- float:left;
- margin:0 2px 0 0;
-}
-
-.breadcrumb {
- padding-bottom:2px;
-}
-
-.clear-navbar {
- margin-top: 60px;
-}
-
-.footer {
- padding-top: 2em;
- background-color: #333;
- color: white;
- padding-bottom: 2em;
-}
-
-.spacer {
- height: 1em;
-}
-
-
-.icon-cog {
- line-height: 13px;
-}
-
-/* =============================== */
-
-.side-navigation .dropdown-menu {
- margin-left: 10px;
-}
-
-.side-navigation .code {
- font-family: monospace;
- font-weight: bold;
- font-size: 13px;
- color: black;
-}
-
-.side-navigation > ul.nav > li.module {
- background-color: #d3d3d3;
-}
-
-.side-navigation > ul.nav > li.section {
- background-color: #ebebeb;
- min-height: 14px;
-}
-
-.side-navigation > ul.nav > li.last {
- padding-bottom: 1em;
-}
-
-.side-navigation > ul.nav > li.last + li.api-list-item {
- margin-top:-1em;
- padding-bottom: 1em;
-}
-
-.side-navigation .well {
- border-color: #d3d3d3;
- padding-top: 0;
- padding-bottom: 0;
- margin-bottom: 15px;
-}
-
-.side-navigation .well .nav-header {
- text-transform: none;
- margin-top: 0;
- margin-left: -15px;
- margin-right: -15px;
-}
-
-.side-navigation .well .nav-header a {
- text-transform: none;
- color: black;
-}
-.side-navigation .well .nav-header a:hover {
- background-color: inherit;
-}
-
-.side-navigation .well li {
- line-height: 14px;
-}
-
-.side-navigation .well .guide {
- float: right;
- padding-top: 0;
- color: gray;
-}
-
-/* =============================== */
-/* Content */
-/* =============================== */
-
-.improve-docs, .view-source {
- float: right;
- margin: 0 5px;
- position: relative;
-}
-
-.improve-docs {
- z-index:100;
-}
-
-.hint {
- font-size: .7em;
- color: #c0c0c0;
-}
-
-.content code {
- background-color: inherit;
- color: inherit;
- border: none;
- padding: 0;
- font-size: inherit;
- font-family: monospace;
- white-space: nowrap;
-}
-
-.content pre code {
- white-space: inherit;
-}
-
-.content h2,
-.content h3,
-.content h4,
-.content h5 {
- margin-top: 1em;
- letter-spacing: -0.06em;
-}
-
-.content h2 {
- font-size: 36px;
- margin-bottom: .5em;
-}
-
-.content h3 {
- font-size: 24px;
- border-top: 1px solid #eee;
- padding-top: .5em;
-}
-
-.content h4 {
- font-size: 16px;
- margin-top: 1.5em;
-}
-
-.content ul {
- margin-top: .5em;
-}
-
-.content h6 {
- text-transform:none;
- color:black;
-}
-
-ul.parameters > li > p,
-.returns > p {
- display: inline;
-}
-
-ul.methods > li,
-ul.properties > li,
-ul.events > li {
- list-style: none;
- min-height: 20px;
- padding: 19px;
- margin-bottom: 20px;
- background-color: #f5f5f5;
- border: 1px solid #eee;
- border: 1px solid rgba(0, 0, 0, 0.05);
- -webkit-border-radius: 4px;
- -moz-border-radius: 4px;
- border-radius: 4px;
- -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
- box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
-}
-
-.member.method > h2,
-.member.property > h2,
-.member.event > h2 {
- margin-bottom: .5em;
-}
-
-ul.methods > li > h3,
-ul.properties > li > h3,
-ul.events > li > h3 {
- margin: -19px -19px 1em -19px;
- padding: .25em 19px;
- background-color: #d3d3d3;
- font-family: monospace;
-}
-
-.center {
- display: block;
- margin: 2em auto;
-}
-
-.diagram {
- display: block;
- margin: 2em auto;
- padding: 1em;
- border: 1px solid black;
-
- -moz-box-shadow: 4px 4px 6px #48577D;
- -webkit-box-shadow: 4px 4px 6px #48577D;
- box-shadow: 4px 4px 6px #48577D;
-
- -moz-border-radius: 15px;
- -webkit-border-radius: 15px;
- border-radius: 15px;
-}
-
-.tutorial-nav {
- margin-left: 175px;
- color: black;
- margin-top: 2em;
- margin-bottom: 2em;
-}
-
-.tutorial-nav a {
- color: white;
-}
-
-.tutorial-nav a:hover {
- color: white;
- text-decoration: none;
-}
-
-.tutorial-nav li {
- margin-right: 5px;
-}
-
-.clear {
- clear: both;
-}
-
-.variables-matrix td {
- vertical-align:top;
- padding:5px;
-}
-
-.type-hint {
- display:inline-block;
-}
-
-.variables-matrix .type-hint {
- text-align:center;
- display:block;
- min-width:60px;
-}
-
-.type-hint + .type-hint {
- margin-top:5px;
-}
-
-.type-hint-string {
- background:#3a87ad;
-}
-
-.type-hint-object {
- background:#999;
-}
-
-.type-hint-array {
- background:#F90;;
-}
-
-.type-hint-boolean {
- background:rgb(18, 131, 39);
-}
-
-.type-hint-number {
- background:rgb(189, 63, 66);
-}
-
-.syntax-links {
- background:#eee;
- border:1px solid #ddd;
- text-align:right;
- padding:1em;
- border-bottom:0;
- border-top-left-radius:4px;
- border-top-right-radius:4px;
-}
-
-.syntax-links a {
- margin-left:10px;
-}
-
-.syntax-links + pre {
- border-top-left-radius:0;
- border-top-right-radius:0;
-}
-
-.search-results {
- clear:both;
- display:table;
- width:100%;
-}
-
-.search-results.ng-hide {
- display:none;
-}
-
-.search-results > .search-group {
- vertical-align:top;
- padding:10px 0;
- display:table-cell;
-}
-
-.search-group.cols-1 { width:100%; }
-.search-group.cols-2 { width:50%; }
-.search-group.cols-3 { width:33%; }
-.search-group.cols-4 { width:25%; }
-
-.search-close {
- z-index:1029;
- position:absolute;
- bottom:-25px;
- left:80%;
- text-align:center;
- line-height:50px;
- width:50px;
- font-size:2em;
- background:#222222;
- border-radius:15px;
-}
-
-.search-close span {
- text-decoration:none;
- position:relative;
- z-index:1031;
-}
-
-.tutorial-index-page,
-.tutorial-the-end-page {
- padding-top:50px;
-}
-
-.tutorial-page {
- position:relative;
-}
-
-.tutorial-page .improve-docs {
- position:absolute;
- top:0;
- right:0;
-}
-
-.nocode-content {
- cursor:pointer;
- display:inline-block;
- -webkit-border-radius: 3px;
- -moz-border-radius: 3px;
- border-radius: 3px;
-
- -webkit-transition:0.5s linear all;
- -moz-transition:0.5s linear all;
- -o-transition:0.5s linear all;
- transition:0.5s linear all;
- color: #223f7a;
- background:#ddd;
- border: 1px solid #ccc;
-}
-
-.nocode-content:hover {
- background-color: #99c2ff;
- border: 1px solid #e1e1e8;
-}
-
-.popover-incode .popover-inner {
- width:auto;
- min-width:200px;
- max-width:500px;
-}
-
-.popover-incode {
- -webkit-transition:0.2s linear opacity;
- -moz-transition:0.2s linear opacity;
- -o-transition:0.2s linear opacity;
- transition:0.2s linear opacity;
- opacity:0;
-}
-
-.popover-incode.visible {
- opacity:1;
-}
-
-.popover-incode code,
-.popover-incode pre {
- white-space:nowrap;
-}
-
-.popover-incode .arrow {
- left:50px!important;
-}
-
-.foldover-content {
- display:none;
-}
-
-.foldout:after {
- content:"";
- position:absolute;
- left:50%;
- top:-1px;
- margin-left:-10px;
- border-width:10px;
- border-style:solid;
- border-color:#f7f7f9 transparent transparent;
-}
-
-.foldout:before {
- content:"";
- position:absolute;
- left:50%;
- top:0;
- margin-left:-10px;
- border-width:10px;
- border-style:solid;
- border-color:#bbb transparent transparent;
-}
-
-.foldout {
- padding:8px 15px 5px;
- position:relative;
- background:#eee;
- white-space:normal;
- box-shadow:inset 0 0 20px #ccc;
- border-top:1px solid #bbb;
-}
-
-.prettyprint {
- padding-right:0!important;
- padding-bottom:0!important;
-}
-
-pre ol li {
- padding-bottom:2px;
- padding-right:5px;
-}
-
-#docs-fold {
- position:absolute;
- top:0;
- right:0;
- width:500px;
- min-height:100%;
- padding-top:50px;
- padding:50px 20px 20px 20px;
- background:white;
- border-left:1px solid #999;
- box-shadow:0 0 10px #555;
- z-index:1002;
-}
-
-#docs-fold.fold-show {
- -webkit-transition:0.4s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- -moz-transition:0.4s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- -o-transition:0.4s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
- transition:0.4s cubic-bezier(0.250, 0.460, 0.450, 0.940) all;
-}
-
-#docs-fold.fold-show {
- right:-200px;
- opacity:0;
-}
-
-#docs-fold.fold-show.fold-show-active {
- right:0;
- opacity:1;
-}
-
-#docs-fold-overlay {
- background:rgba(255,255,255,0.5);
- position:fixed;
- left:0;
- bottom:0;
- right:0;
- top:0;
- z-index:1001;
- cursor:pointer;
-}
-
-.fixed_body {
- position:fixed;
- top:0;
- z-index:1000;
- left:0;
- right:0;
-}
-
-#docs-fold-close {
- z-index: 1029;
- position: absolute;
- left: -30px;
- top: 60px;
- cursor:pointer;
- text-align: center;
- width:50px;
- line-height:50px;
- font-size: 2em;
- background: #fff;
- box-shadow:-6px 0 5px #555;
- display:block;
- border-radius:10px;
-}
-
-.docs-version-jump {
- width:180px;
- margin-bottom:20px;
-}
-
-.minerr-errmsg {
- clear: both;
- position: relative;
- top: 10px;
- font-size: 16px;
- word-break: normal;
-}
-
-.text-info {
- color:#3a87ad;
-}
-
-.definition-table tr > td:first-child {
- font-weight:bold;
- width:30%;
-}
-
-.definition-table.spaced {
- margin-bottom:30px;
-}
-
-.definition-table td {
- vertical-align: top;
-}
-
-.component-heading {
- text-transform:capitalize;
-}
-
-.component-breakdown {
- margin-bottom:30px;
- padding-bottom:30px;
- border-bottom:1px solid #aaa;
-}
-
-td.success {
- background-color: #dff0d8;
-}
-
-td.error {
- background-color: #f2dede;
-}
diff --git a/docs/src/templates/css/prettify.css b/docs/src/templates/css/prettify.css
deleted file mode 100644
index 16e0cafb..00000000
--- a/docs/src/templates/css/prettify.css
+++ /dev/null
@@ -1,51 +0,0 @@
-.pln { color: #000 } /* plain text */
-
-@media screen {
- .str { color: #080 } /* string content */
- .kwd { color: #008 } /* a keyword */
- .com { color: #800 } /* a comment */
- .typ { color: #606 } /* a type name */
- .lit { color: #066 } /* a literal value */
- /* punctuation, lisp open bracket, lisp close bracket */
- .pun, .opn, .clo { color: #660 }
- .tag { color: #008 } /* a markup tag name */
- .atn { color: #606 } /* a markup attribute name */
- .atv { color: #080 } /* a markup attribute value */
- .dec, .var { color: #606 } /* a declaration; a variable name */
- .fun { color: red } /* a function name */
-}
-
-/* Use higher contrast and text-weight for printable form. */
-@media print, projection {
- .str { color: #060 }
- .kwd { color: #006; font-weight: bold }
- .com { color: #600; font-style: italic }
- .typ { color: #404; font-weight: bold }
- .lit { color: #044 }
- .pun, .opn, .clo { color: #440 }
- .tag { color: #006; font-weight: bold }
- .atn { color: #404 }
- .atv { color: #060 }
-}
-
-pre.prettyprint {
- padding: 8px;
- background-color: #f7f7f9;
- border: 1px solid #e1e1e8;
-}
-pre.prettyprint.linenums {
- -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
- -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
- box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0;
-}
-ol.linenums {
- margin: 0 0 0 33px; /* IE indents via margin-left */
-}
-ol.linenums li {
- padding-left: 12px;
- font-size:12px;
- color: #bebec5;
- line-height: 18px;
- text-shadow: 0 1px 0 #fff;
- list-style-type:decimal!important;
-}
diff --git a/docs/src/templates/docs-scenario.html b/docs/src/templates/docs-scenario.html
deleted file mode 100644
index 2eca5f87..00000000
--- a/docs/src/templates/docs-scenario.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<!DOCTYPE HTML>
-<html xmlns:ng="http://angularjs.org">
-<head>
- <title>AngularJS Docs E2E Test Runner</title>
- <script>
- var production = location.hostname === 'docs.angularjs.org',
- headEl = document.head,
- angularVersion = {
- current: '"NG_VERSION_FULL"', // rewrite during build
- cdn: '"NG_VERSION_CDN"'
- };
-
- addTag('script', {src: path('angular-scenario.js')}, function() {
- addTag('script', {src: 'docs-scenario.js'}, function() {
- angular.scenario.setUpAndRun();
- });
- });
-
- function addTag(name, attributes, callback) {
- var el = document.createElement(name),
- attrName;
-
- for (attrName in attributes) {
- el.setAttribute(attrName, attributes[attrName]);
- }
-
- if (callback) {
- el.onload = callback;
- }
-
- headEl.appendChild(el);
- }
-
-
- function path(name) {
- return production
- ? 'http://code.angularjs.org/' + angularVersion.cdn + '/' + name
- : '../' + name;
- }
- </script>
-</head>
-<body>
-</body>
-</html>
diff --git a/docs/src/templates/favicon.ico b/docs/src/templates/favicon.ico
deleted file mode 100644
index fe24a63a..00000000
--- a/docs/src/templates/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/docs/src/templates/index.html b/docs/src/templates/index.html
deleted file mode 100644
index bc695119..00000000
--- a/docs/src/templates/index.html
+++ /dev/null
@@ -1,388 +0,0 @@
-<!doctype html>
-<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7 ng-app: docsApp;" lang="en" ng-controller="DocsController"> <![endif]-->
-<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8 ng-app: docsApp;" lang="en" ng-controller="DocsController"> <![endif]-->
-<!--[if IE 8]> <html class="no-js lt-ie9 ng-app: docsApp;" lang="en" ng-controller="DocsController"> <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js ng-app: docsApp;" lang="en" ng-controller="DocsController"> <!--<![endif]-->
-<head>
- <style>
- .ng-hide { display:none!important; }
- </style>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
- <meta name="Description"
- content="AngularJS is what HTML would have been, had it been designed for building web-apps.
- Declarative templates with data-binding, MVC, dependency injection and great
- testability story all implemented with pure client-side JavaScript!">
- <meta name="fragment" content="!">
- <title ng-bind-template="AngularJS: {{partialTitle}}">AngularJS</title>
- <script type="text/javascript">
- // dynamically add base tag as well as css and javascript files.
- // we can't add css/js the usual way, because some browsers (FF) eagerly prefetch resources
- // before the base attribute is added, causing 404 and terribly slow loading of the docs app.
- (function() {
- if (window.name.indexOf('NG_DEFER_BOOTSTRAP!') == 0) {
- //TODO(i): super ugly hack to temporarily speed up our e2e tests until we move to protractor + extracted examples
- window.RUNNING_IN_NG_TEST_RUNNER = true;
- }
-
- var indexFile = (location.pathname.match(/\/(index[^\.]*\.html)/) || ['', ''])[1],
- rUrl = /(#!\/|api|guide|misc|tutorial|error|index[^\.]*\.html).*$/,
- baseUrl = location.href.replace(rUrl, indexFile),
- jQuery = /index-jq[^\.]*\.html$/.test(baseUrl),
- debug = /index[^\.]*-debug\.html$/.test(baseUrl),
- production = location.hostname === 'docs.angularjs.org',
- headEl = document.getElementsByTagName('head')[0],
- sync = true,
- angularVersion = {
- current: '"NG_VERSION_FULL"', // rewrite during build
- cdn: '"NG_VERSION_CDN"'
- };
-
- addTag('base', {href: baseUrl});
- addTag('link', {rel: 'stylesheet', href: 'components/bootstrap/css/' + (debug ? 'bootstrap.css' : 'bootstrap.min.css'), type: 'text/css'});
- addTag('link', {rel: 'stylesheet', href: 'components/font-awesome/css/' + (debug ? 'font-awesome.css' : 'font-awesome.min.css'), type: 'text/css'});
- addTag('link', {rel: 'stylesheet', href: 'css/prettify.css', type: 'text/css'});
- addTag('link', {rel: 'stylesheet', href: 'css/docs.css', type: 'text/css'});
- addTag('link', {rel: 'stylesheet', href: 'css/animations.css', type: 'text/css'});
- if (jQuery) addTag('script', {src: (debug ? 'components/jquery.js' : 'components/jquery.min.js')});
- addTag('script', {src: path('angular.js')}, sync);
- addTag('script', {src: path('angular-resource.js') }, sync);
- addTag('script', {src: path('angular-route.js') }, sync);
- addTag('script', {src: path('angular-cookies.js') }, sync);
- addTag('script', {src: path('angular-sanitize.js') }, sync);
- addTag('script', {src: path('angular-touch.js') }, sync);
- addTag('script', {src: path('angular-animate.js') }, sync);
- addTag('script', {src: 'components/angular-bootstrap.js' }, sync);
- addTag('script', {src: 'components/angular-bootstrap-prettify.js' }, sync);
- if (!window.RUNNING_IN_NG_TEST_RUNNER) {
- addTag('script', {src: 'components/google-code-prettify.js' }, sync);
- addTag('script', {src: 'components/' + (debug ? 'lunr.js' : 'lunr.min.js') }, sync);
- }
- addTag('script', {src: 'components/marked.js' }, sync);
- addTag('script', {src: 'docs-data.js'}, sync);
- addTag('script', {src: 'js/docs.js'}, sync);
-
- function path(name) {
- if (production) {
- if (name.match(/^angular(-\w+)?\.js/) && !name.match(/bootstrap/)) {
- name = '//ajax.googleapis.com/ajax/libs/angularjs/' +
- angularVersion.cdn +
- '/' +
- name.replace(/\.js$/, '.min.js');
- } else {
- name = 'http://code.angularjs.org/' +
- angularVersion.cdn +
- '/' +
- name.replace(/\.js$/, '.min.js');
- }
- return name;
- }
- return '../' + name.replace(/\.js$/, debug ? '.js' : '.min.js');
- }
-
- function addTag(name, attributes, sync) {
- var el = document.createElement(name),
- attrName;
-
- for (attrName in attributes) {
- el.setAttribute(attrName, attributes[attrName]);
- }
-
- sync ? document.write(outerHTML(el)) : headEl.appendChild(el);
- }
-
- function outerHTML(node){
- // if IE, Chrome take the internal method otherwise build one
- return node.outerHTML || (
- function(n){
- var div = document.createElement('div'), h;
- div.appendChild(n);
- h = div.innerHTML;
- div = null;
- return h;
- })(node);
- }
- })();
-
-
- // force page reload when new update is available
- window.applicationCache && window.applicationCache.addEventListener('updateready', function(e) {
- if (window.applicationCache.status == window.applicationCache.UPDATEREADY) {
- window.applicationCache.swapCache();
- window.location.reload();
- }
- }, false);
-
-
- // GA asynchronous tracker
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-8594346-3']);
- _gaq.push(['_setDomainName', '.angularjs.org']);
-
- if (!window.RUNNING_IN_NG_TEST_RUNNER) {
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
- }
- </script>
-</head>
-
-<body>
- <header class="header" ng-controller="DocsNavigationCtrl">
- <div class="navbar navbar-inverse navbar-fixed-top">
- <div class="navbar-inner">
- <div class="container">
- <a class="brand" href="http://angularjs.org">
- <img class="logo" src="img/angularjs-for-header-only.svg">
- </a>
- <ul class="nav">
- <li class="divider-vertical"></li>
- <li><a href="http://angularjs.org"><i class="icon-home icon-white"></i> Home</a></li>
- <li class="divider-vertical"></li>
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">
- <i class="icon-eye-open icon-white"></i> Learn <b class="caret"></b>
- </a>
- <ul class="dropdown-menu">
- <li class="disabled"><a href="http://angularjs.org/">Why AngularJS?</a></li>
- <li><a href="http://www.youtube.com/user/angularjs">Watch</a></li>
- <li><a href="tutorial">Tutorial</a></li>
- <li><a href="http://builtwith.angularjs.org/">Case Studies</a></li>
- <li><a href="https://github.com/angular/angular-seed">Seed App project template</a></li>
- <li><a href="misc/faq">FAQ</a></li>
- </ul>
- </li>
- <li class="divider-vertical"></li>
- <li class="dropdown active">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">
- <i class="icon-book icon-white"></i> Develop <b class="caret"></b>
- </a>
- <ul class="dropdown-menu">
- <li><a href="./tutorial/">Tutorial</a></li>
- <li><a href="./guide/">Developer Guide</a></li>
- <li><a href="./api/">API Reference</a></li>
- <li><a href="./error/">Error Reference</a></li>
- <li><a href="http://docs.angularjs.org/misc/contribute">Contribute</a></li>
- <li><a href="http://code.angularjs.org/">Download</a></li>
- </ul>
- </li>
- <li class="divider-vertical"></li>
- <li class="dropdown">
- <a href="#" class="dropdown-toggle" data-toggle="dropdown">
- <i class="icon-comment icon-white"></i> Discuss <b class="caret"></b>
- </a>
- <ul class="dropdown-menu">
- <li><a href="http://blog.angularjs.org">Blog</a></li>
- <li><a href="http://groups.google.com/group/angular">Mailing List</a></li>
- <li><a href="http://webchat.freenode.net/?channels=angularjs&uio=d4">Chat Room</a></li>
- <li class="divider"></li>
- <li><a href="https://twitter.com/#!/angularjs">Twitter</a></li>
- <li><a href="https://plus.google.com/110323587230527980117">Google+</a></li>
- <li class="divider"></li>
- <li><a href="https://github.com/angular/angular.js">GitHub</a></li>
- <li><a href="https://github.com/angular/angular.js/issues">Issue Tracker</a></li>
- </ul>
- </li>
- <li class="divider-vertical"></li>
- </ul>
- <form class="navbar-search pull-right" ng-submit="submit()">
- <input type="text"
- name="as_q"
- class="search-query"
- placeholder="Click to focus or press '/' to search"
- ng-change="search(q)"
- ng-model="q"
- docs-search-input
- autocomplete="off" />
- </form>
- <div ng-show="hasResults" class="search-results">
- <div ng-repeat="(key, value) in results" class="search-group" ng-class="colClassName">
- <h4>{{ key }}</h4>
- <div ng-repeat="item in value" class="search-result">
- <a ng-click="hideResults()" href="{{ item.url }}">{{ item.shortName }}</a>
- </div>
- </div>
- <a href="" ng-click="hideResults()" class="search-close">
- <span class="icon-remove-sign"></span>
- </a>
- </div>
- </div>
- </div>
- </div>
- </header>
-
- <div class="ng-hide" id="docs-fold-overlay" ng-show="docs_fold" ng-click="fold(null)"></div>
- <div class="foldout ng-hide" id="docs-fold" ng-show="docs_fold">
- <div id="docs-fold-close" ng-click="fold(null)">
- <span class="icon-remove-sign"></span>
- </div>
- <div ng-include="docs_fold"></div>
- </div>
-
-<div ng-class="{fixed_body:docs_fold}">
- <div role="main" class="container">
- <div class="row clear-navbar"></div>
-
- <div class="row">
- <div class="span12">
- <!--[if lt IE 7]>
- <p class="alert alert-error">Your browser is <em>ancient!</em>
- <a href="http://browsehappy.com/">Upgrade to a different browser</a> or
- <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to
- experience this site.
- </p>
- <![endif]-->
-
- <!--[if lt IE 9]>
- <div class="alert">
- You are using an old version of Internet Explorer.
- For better and safer browsing experience please <a href="http://www.microsoft.com/IE9">upgrade IE</a>
- or install <a href="http://google.com/chrome">Google Chrome browser</a>.
- </div>
- <![endif]-->
- </div>
-
- </div>
-
- <div class="row">
- <div class="span3">
- <div class="well">
- <div ng-controller="DocsVersionsCtrl">
- <select ng-options="v as v.title group by v.group for v in docs_versions"
- ng-model="docs_version"
- ng-change="jumpToDocsVersion(docs_version)"
- class="docs-version-jump">
- </select>
- </div>
- <div class="side-navigation">
- <ul class="nav nav-list" ng-hide="page">
- <li ng-repeat="page in pages track by page.url" ng-class="navClass(page)" class="api-list-item">
- <a href="{{page.url}}" tabindex="2">{{page.shortName}}</a>
- </li>
- </ul>
-
- <ul class="nav nav-list well api-list-item" ng-repeat="namespace in namespaces track by namespace.url">
- <li class="nav-header module">
- <a class="code" href="{{namespace.url}}">{{namespace.name}}</a>
- </li>
-
- <li ng-repeat="page in namespace.errors track by page.url" ng-class="navClass(page)" class="api-list-item">
- <a href="{{page.url}}" tabindex="2">{{page.shortName}}</a>
- </li>
- </ul>
-
- <ul class="nav nav-list well api-list-item" ng-repeat="module in modules track by module.url">
- <li class="nav-header module">
- <a class="guide" href="{{URL.module}}">module</a>
- <a class="code" href="{{module.url}}">{{module.name}}</a>
- </li>
-
- <li class="nav-header section" ng-show="module.directives">
- <a href="{{URL.directive}}" class="guide">directive</a>
- </li>
- <li ng-repeat="page in module.directives track by page.url" ng-class="navClass(page)" class="api-list-item">
- <a href="{{page.url}}" tabindex="2">{{page.shortName}}</a>
- </li>
-
- <li class="nav-header section" ng-show="module.filters">
- <a href="{{URL.filter}}" class="guide">filter</a>
- </li>
- <li ng-repeat="page in module.filters track by page.url" ng-class="navClass(page)" class="api-list-item">
- <a href="{{page.url}}" tabindex="2">{{page.shortName}}</a>
- </li>
-
- <li class="nav-header section" ng-show="module.services">
- <a href="{{URL.service}}" class="guide">service</a>
- </li>
- <li ng-repeat="service in module.services track by service.instance.url" ng-class="navClass(service.instance, service.provider)" class="api-list-item">
- <a ng-show="service.provider" class="pull-right" href="{{service.provider.url}}" tabindex="2"><i class="icon-cog"></i></a>
- <a href="{{service.instance.url}}" tabindex="2">{{service.name}}</a>
- </li>
-
- <li class="nav-header section" ng-show="module.types">
- <a href="{{URL.type}}" class="guide">Types</a>
- </li>
- <li ng-repeat="page in module.types track by page.url" ng-class="navClass(page)" class="api-list-item">
- <a href="{{page.url}}" tabindex="2">{{page.shortName}}</a>
- </li>
-
- <li class="nav-header section" ng-show="module.globals">
- <a href="{{URL.api}}" class="global guide">global APIs</a>
- &nbsp;
- </li>
- <li ng-repeat="page in module.globals track by page.url" ng-class="navClass(page)" class="api-list-item">
- <a href="{{page.url}}" tabindex="2">{{page.id}}</a>
- </li>
-
- </ul>
-
- </div>
- </div>
- </div>
- <div class="span9">
-
- <ul class="breadcrumb">
- <li ng-repeat="crumb in breadcrumb">
- <span ng-hide="crumb.url">{{crumb.name}}</span>
- <a ng-show="crumb.url" href="{{crumb.url}}">{{crumb.name}}</a>
- <span ng-show="crumb.url" class="divider">/</span>
- </li>
- </ul>
-
- <div id="loading" ng-show="loading">Loading...</div>
-
- <div ng-hide="loading" ng-include src="currentPage.partialUrl" onload="afterPartialLoaded()" autoscroll class="content slide-reveal"></div>
- </div>
- </div>
- </div>
-
-
-
- <div id="fader" ng-show="subpage" style="display: none"></div>
- <div id="subpage" ng-show="subpage" style="display: none">
- <div>
- <h2>Would you like full offline support for this AngularJS Docs App?</h2>
- <a ng-click="subpage=false">&#10005;</a>
- <p>
- If you want to be able to access the entire AngularJS documentation offline, click the
- button below. This will reload the current page and trigger background downloads of all the
- necessary files (approximately 3.5MB). The next time you load the docs, the browser will
- use these cached files.
- <br><br>
- This feature is supported on all modern browsers, except for IE9 which lacks application
- cache support.
- </p>
- <button id="cacheButton" ng-click="enableOffline()">Let me have them all!</button>
- </div>
- </div>
-
- <footer class="footer">
- <div class="container">
- <p class="pull-right"><a back-to-top href="#">Back to top</a></p>
-
- <p>
- Super-powered by Google ©2010-2012
- ( <a id="version"
- ng-href="https://github.com/angular/angular.js/blob/master/CHANGELOG.md#{{versionNumber}}"
- ng-bind-template="v{{version}}">
- </a>
- <!-- TODO(i): enable
- <a ng-hide="offlineEnabled" ng-click ="subpage = true">(enable offline support)</a>
- <span ng-show="offlineEnabled">(offline support enabled)</span>
- -->
- )
- </p>
- <p>
- Code licensed under the
- <a href="https://github.com/angular/angular.js/blob/master/LICENSE" target="_blank">The
- MIT License</a>. Documentation licensed under <a
- href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.
- </p>
- </div>
- </footer>
-</div>
-
-</body>
-</html>
diff --git a/docs/src/templates/js/docs.js b/docs/src/templates/js/docs.js
deleted file mode 100644
index dad57aa5..00000000
--- a/docs/src/templates/js/docs.js
+++ /dev/null
@@ -1,933 +0,0 @@
-var docsApp = {
- controller: {},
- directive: {},
- serviceFactory: {},
- filter: {}
-};
-
-docsApp.controller.DocsVersionsCtrl = ['$scope', '$rootScope', '$window', 'NG_VERSIONS', 'NG_VERSION', function($scope, $rootScope, $window, NG_VERSIONS, NG_VERSION) {
- $scope.docs_versions = NG_VERSIONS;
- $scope.docs_version = NG_VERSIONS[0];
-
- $scope.jumpToDocsVersion = function(version) {
- var currentPagePath = '';
-
- // preserve URL path when switching between doc versions
- if (angular.isObject($rootScope.currentPage) && $rootScope.currentPage.section && $rootScope.currentPage.id) {
- currentPagePath = '/' + $rootScope.currentPage.section + '/' + $rootScope.currentPage.id;
- }
-
- $window.location = version.url + currentPagePath;
- };
-}];
-
-docsApp.controller.DocsNavigationCtrl = ['$scope', '$location', 'docsSearch', function($scope, $location, docsSearch) {
- function clearResults() {
- $scope.results = [];
- $scope.colClassName = null;
- $scope.hasResults = false;
- }
-
- $scope.search = function(q) {
- var MIN_SEARCH_LENGTH = 3;
- if(q.length >= MIN_SEARCH_LENGTH) {
- var results = docsSearch(q);
- var totalSections = 0;
- for(var i in results) {
- ++totalSections;
- }
- if(totalSections > 0) {
- $scope.colClassName = 'cols-' + totalSections;
- }
- $scope.hasResults = totalSections > 0;
- $scope.results = results;
- }
- else {
- clearResults();
- }
- if(!$scope.$$phase) $scope.$apply();
- };
- $scope.submit = function() {
- var result;
- for(var i in $scope.results) {
- result = $scope.results[i][0];
- if(result) {
- break;
- }
- }
- if(result) {
- $location.path(result.url);
- $scope.hideResults();
- }
- };
- $scope.hideResults = function() {
- clearResults();
- $scope.q = '';
- };
-}];
-
-docsApp.serviceFactory.lunrSearch = function() {
- return function(properties) {
- if (window.RUNNING_IN_NG_TEST_RUNNER) return null;
-
- var engine = lunr(properties);
- return {
- store : function(values) {
- engine.add(values);
- },
- search : function(q) {
- return engine.search(q);
- }
- };
- };
-};
-
-docsApp.serviceFactory.docsSearch = ['$rootScope','lunrSearch', 'NG_PAGES',
- function($rootScope, lunrSearch, NG_PAGES) {
- if (window.RUNNING_IN_NG_TEST_RUNNER) {
- return null;
- }
-
- var index = lunrSearch(function() {
- this.ref('id');
- this.field('title', {boost: 50});
- this.field('description', { boost : 20 });
- });
-
- angular.forEach(NG_PAGES, function(page, i) {
- var title = page.shortName;
- if(title.charAt(0) == 'n' && title.charAt(1) == 'g') {
- title = title + ' ' + title.charAt(2).toLowerCase() + title.substr(3);
- }
- index.store({
- id: i,
- title: title,
- description: page.keywords
- });
- });
-
- return function(q) {
- var results = {};
- angular.forEach(index.search(q), function(result) {
- var item = NG_PAGES[result.ref];
- var section = item.section;
- results[section] = results[section] || [];
- if(results[section].length < 15) {
- results[section].push(item);
- }
- });
- return results;
- };
-}];
-
-docsApp.directive.focused = function($timeout) {
- return function(scope, element, attrs) {
- element[0].focus();
- element.on('focus', function() {
- scope.$apply(attrs.focused + '=true');
- });
- element.on('blur', function() {
- // have to use $timeout, so that we close the drop-down after the user clicks,
- // otherwise when the user clicks we process the closing before we process the click.
- $timeout(function() {
- scope.$eval(attrs.focused + '=false');
- });
- });
- scope.$eval(attrs.focused + '=true');
- };
-};
-
-docsApp.directive.docsSearchInput = ['$document',function($document) {
- return function(scope, element, attrs) {
- var ESCAPE_KEY_KEYCODE = 27,
- FORWARD_SLASH_KEYCODE = 191;
- angular.element($document[0].body).bind('keydown', function(event) {
- if(event.keyCode == FORWARD_SLASH_KEYCODE && document.activeElement) {
- var activeElement = document.activeElement;
- var activeTagName = activeElement.nodeName.toLowerCase();
- var hasInputFocus = activeTagName == 'input' || activeTagName == 'select' ||
- activeTagName == 'option' || activeTagName == 'textarea' ||
- activeElement.hasAttribute('contenteditable');
- if(!hasInputFocus) {
- event.stopPropagation();
- event.preventDefault();
-
- var input = element[0];
- input.focus();
- }
- }
- });
-
- element.bind('keydown', function(event) {
- if(event.keyCode == ESCAPE_KEY_KEYCODE) {
- event.stopPropagation();
- event.preventDefault();
- scope.$apply(function() {
- scope.hideResults();
- });
- }
- });
- };
-}];
-
-
-docsApp.directive.code = function() {
- return { restrict:'E', terminal: true };
-};
-
-
-docsApp.directive.sourceEdit = function(getEmbeddedTemplate) {
- return {
- template: '<div class="btn-group pull-right">' +
- '<a class="btn dropdown-toggle btn-primary" data-toggle="dropdown" href>' +
- ' <i class="icon-pencil icon-white"></i> Edit<span class="caret"></span>' +
- '</a>' +
- '<ul class="dropdown-menu">' +
- ' <li><a ng-click="plunkr($event)" href="">In Plunkr</a></li>' +
- ' <li><a ng-click="fiddle($event)" href="">In JsFiddle</a></li>' +
- '</ul>' +
- '</div>',
- scope: true,
- controller: function($scope, $attrs, openJsFiddle, openPlunkr) {
- var sources = {
- module: $attrs.sourceEdit,
- deps: read($attrs.sourceEditDeps),
- html: read($attrs.sourceEditHtml),
- css: read($attrs.sourceEditCss),
- js: read($attrs.sourceEditJs),
- json: read($attrs.sourceEditJson),
- unit: read($attrs.sourceEditUnit),
- scenario: read($attrs.sourceEditScenario)
- };
- $scope.fiddle = function(e) {
- e.stopPropagation();
- openJsFiddle(sources);
- };
- $scope.plunkr = function(e) {
- e.stopPropagation();
- openPlunkr(sources);
- };
- }
- };
-
- function read(text) {
- var files = [];
- angular.forEach(text ? text.split(' ') : [], function(refId) {
- // refId is index.html-343, so we need to strip the unique ID when exporting the name
- files.push({name: refId.replace(/-\d+$/, ''), content: getEmbeddedTemplate(refId)});
- });
- return files;
- }
-};
-
-docsApp.directive.docModuleComponents = function() {
- return {
- template: ' <div class="component-breakdown">' +
- ' <h2>Module Components</h2>' +
- ' <div ng-repeat="(key, section) in components">' +
- ' <h3 class="component-heading" id="{{ section.type }}">{{ section.title }}</h3>' +
- ' <table class="definition-table">' +
- ' <tr>' +
- ' <th>Name</th>' +
- ' <th>Description</th>' +
- ' </tr>' +
- ' <tr ng-repeat="component in section.components">' +
- ' <td><a ng-href="{{ component.url }}">{{ component.shortName }}</a></td>' +
- ' <td>{{ component.shortDescription }}</td>' +
- ' </tr>' +
- ' </table>' +
- ' </div>' +
- ' </div>',
- scope : {
- module : '@docModuleComponents'
- },
- controller : ['$scope', '$anchorScroll', '$timeout', 'sections',
- function($scope, $anchorScroll, $timeout, sections) {
- var validTypes = ['property','function','directive','service','object','filter'];
- var components = {};
- angular.forEach(sections.api, function(item) {
- if(item.moduleName == $scope.module) {
- var type = item.type;
- if(type == 'object') type = 'service';
- if(validTypes.indexOf(type) >= 0) {
- components[type] = components[type] || {
- title : type,
- type : type,
- components : []
- };
- components[type].components.push(item);
- }
- }
- });
- $scope.components = components;
- $timeout($anchorScroll, 0, false);
- }]
- };
-};
-
-docsApp.directive.docTutorialNav = function(templateMerge) {
- var pages = [
- '',
- 'step_00', 'step_01', 'step_02', 'step_03', 'step_04',
- 'step_05', 'step_06', 'step_07', 'step_08', 'step_09',
- 'step_10', 'step_11', 'step_12', 'the_end'
- ];
- return {
- compile: function(element, attrs) {
- var seq = 1 * attrs.docTutorialNav,
- props = {
- seq: seq,
- prev: pages[seq],
- next: pages[2 + seq],
- diffLo: seq ? (seq - 1): '0~1',
- diffHi: seq
- };
-
- element.addClass('btn-group');
- element.addClass('tutorial-nav');
- element.append(templateMerge(
- '<a href="tutorial/{{prev}}"><li class="btn btn-primary"><i class="icon-step-backward"></i> Previous</li></a>\n' +
- '<a href="http://angular.github.com/angular-phonecat/step-{{seq}}/app"><li class="btn btn-primary"><i class="icon-play"></i> Live Demo</li></a>\n' +
- '<a href="https://github.com/angular/angular-phonecat/compare/step-{{diffLo}}...step-{{diffHi}}"><li class="btn btn-primary"><i class="icon-search"></i> Code Diff</li></a>\n' +
- '<a href="tutorial/{{next}}"><li class="btn btn-primary">Next <i class="icon-step-forward"></i></li></a>', props));
- }
- };
-};
-
-
-docsApp.directive.docTutorialReset = function() {
- function tab(name, command, id, step) {
- return '' +
- ' <div class=\'tab-pane well\' title="' + name + '" value="' + id + '">\n' +
- ' <ol>\n' +
- ' <li><p>Reset the workspace to step ' + step + '.</p>' +
- ' <pre>' + command + '</pre></li>\n' +
- ' <li><p>Refresh your browser or check the app out on <a href="http://angular.github.com/angular-phonecat/step-' + step + '/app">Angular\'s server</a>.</p></li>\n' +
- ' </ol>\n' +
- ' </div>\n';
- }
-
- return {
- compile: function(element, attrs) {
- var step = attrs.docTutorialReset;
- element.html(
- '<div ng-hide="show">' +
- '<p><a href="" ng-click="show=true;$event.stopPropagation()">Workspace Reset Instructions ➤</a></p>' +
- '</div>\n' +
- '<div class="tabbable" ng-show="show" ng-model="$cookies.platformPreference">\n' +
- tab('Git on Mac/Linux', 'git checkout -f step-' + step, 'gitUnix', step) +
- tab('Git on Windows', 'git checkout -f step-' + step, 'gitWin', step) +
- '</div>\n');
- }
- };
-};
-
-
-docsApp.filter.errorLink = ['$sanitize', function ($sanitize) {
- var LINKY_URL_REGEXP = /((ftp|https?):\/\/|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s\.\;\,\(\)\{\}\<\>]/g,
- MAILTO_REGEXP = /^mailto:/,
- STACK_TRACE_REGEXP = /:\d+:\d+$/;
-
- var truncate = function (text, nchars) {
- if (text.length > nchars) {
- return text.substr(0, nchars - 3) + '...';
- }
- return text;
- };
-
- return function (text, target) {
- var targetHtml = target ? ' target="' + target + '"' : '';
-
- if (!text) return text;
-
- return $sanitize(text.replace(LINKY_URL_REGEXP, function (url) {
- if (STACK_TRACE_REGEXP.test(url)) {
- return url;
- }
-
- // if we did not match ftp/http/mailto then assume mailto
- if (!/^((ftp|https?):\/\/|mailto:)/.test(url)) url = 'mailto:' + url;
-
- return '<a' + targetHtml + ' href="' + url +'">' +
- truncate(url.replace(MAILTO_REGEXP, ''), 60) +
- '</a>';
- }));
- };
-}];
-
-
-docsApp.directive.errorDisplay = ['$location', 'errorLinkFilter', function ($location, errorLinkFilter) {
- var interpolate = function (formatString) {
- var formatArgs = arguments;
- return formatString.replace(/\{\d+\}/g, function (match) {
- // Drop the braces and use the unary plus to convert to an integer.
- // The index will be off by one because of the formatString.
- var index = +match.slice(1, -1);
- if (index + 1 >= formatArgs.length) {
- return match;
- }
- return formatArgs[index+1];
- });
- };
-
- return {
- link: function (scope, element, attrs) {
- var search = $location.search(),
- formatArgs = [attrs.errorDisplay],
- i;
-
- for (i = 0; angular.isDefined(search['p'+i]); i++) {
- formatArgs.push(search['p'+i]);
- }
- element.html(errorLinkFilter(interpolate.apply(null, formatArgs), '_blank'));
- }
- };
-}];
-
-
-/**
- * backToTop Directive
- * @param {Function} $anchorScroll
- *
- * @description Ensure that the browser scrolls when the anchor is clicked
- */
-docsApp.directive.backToTop = ['$anchorScroll', function($anchorScroll) {
- return function link(scope, element) {
- element.on('click', function(event) {
- scope.$apply($anchorScroll);
- });
- };
-}];
-
-
-docsApp.serviceFactory.angularUrls = function($document) {
- var urls = {};
-
- angular.forEach($document.find('script'), function(script) {
- var match = script.src.match(/^.*\/(angular[^\/]*\.js)$/);
- if (match) {
- urls[match[1].replace(/(\-\d.*)?(\.min)?\.js$/, '.js')] = match[0];
- }
- });
-
- return urls;
-};
-
-
-docsApp.serviceFactory.formPostData = function($document) {
- return function(url, fields) {
- var form = angular.element('<form style="display: none;" method="post" action="' + url + '" target="_blank"></form>');
- angular.forEach(fields, function(value, name) {
- var input = angular.element('<input type="hidden" name="' + name + '">');
- input.attr('value', value);
- form.append(input);
- });
- $document.find('body').append(form);
- form[0].submit();
- form.remove();
- };
-};
-
-
-docsApp.serviceFactory.prepareDefaultAppModule = function() {
- return function(content) {
- var deps = [];
- angular.forEach(content.deps, function(file) {
- if(file.name == 'angular-animate.js') {
- deps.push('ngAnimate');
- }
- });
-
- var moduleName = 'App';
- return {
- module : moduleName,
- script : "angular.module('" + moduleName + "', [" +
- (deps.length ? "'" + deps.join("','") + "'" : "") + "]);\n\n"
- };
- };
-};
-
-docsApp.serviceFactory.prepareEditorAssetTags = function(angularUrls) {
- return function(content, options) {
- options = options || {};
- var includeLocalFiles = options.includeLocalFiles;
- var html = makeScriptTag(angularUrls['angular.js']);
-
- var allFiles = [].concat(content.js, content.css, content.html, content.json);
- angular.forEach(content.deps, function(file) {
- if (file.name !== 'angular.js') {
- var isLocal = false;
- for(var i=0;i<allFiles.length;i++) {
- if(allFiles[i].name == file.name) {
- isLocal = true;
- break;
- }
- }
- if(!(isLocal && !includeLocalFiles)) {
- var assetUrl = angularUrls[file.name] || file.name;
- html += makeScriptTag(assetUrl);
- }
- }
- });
-
- if(includeLocalFiles) {
- angular.forEach(content.css, function(file, index) {
- html += makeCssLinkTag(file.name);
- });
- }
-
- return html;
-
-
- function makeScriptTag(src) {
- return '<script type="text/javascript" src="' + src + '"></script>\n';
- };
-
- function makeCssLinkTag(src) {
- return '<link rel="stylesheet" type="text/css" href="' + src + '" />\n';
- };
- };
-};
-
-
-docsApp.serviceFactory.openPlunkr = function(templateMerge, formPostData, prepareEditorAssetTags, prepareDefaultAppModule) {
- return function(content) {
- var hasRouting = false;
- angular.forEach(content.deps, function(file) {
- hasRouting = hasRouting || file.name == 'angular-route.js';
- });
- var indexHtmlContent = '<!doctype html>\n' +
- '<html ng-app="{{module}}">\n' +
- ' <head>\n' +
- '{{scriptDeps}}';
-
- if(hasRouting) {
- indexHtmlContent += '<script type="text/javascript">\n' +
- '//this is here to make plunkr work with AngularJS routing\n' +
- 'angular.element(document.getElementsByTagName(\'head\')).append(' +
- 'angular.element(\'<base href="\' + window.location.pathname + \'" />\')' +
- ');\n' +
- '</script>\n';
- }
-
- indexHtmlContent += '</head>\n' +
- ' <body>\n\n' +
- '{{indexContents}}\n\n' +
- ' </body>\n' +
- '</html>\n';
-
- indexProp = {
- module: content.module,
- scriptDeps: prepareEditorAssetTags(content, { includeLocalFiles : true }),
- indexContents: content.html[0].content
- };
-
- var allFiles = [].concat(content.js, content.css, content.html, content.json);
-
- if(!content.module) {
- var moduleData = prepareDefaultAppModule(content);
- indexProp.module = moduleData.module;
-
- var found = false;
- angular.forEach(content.js, function(file) {
- if(file.name == 'script.js') {
- file.content = moduleData.script + file.content;
- found = true;
- }
- });
- if(!found) {
- indexProp.scriptDeps += '<script type="text/javascript" src="script.js"></script>\n';
- allFiles.push({
- name : 'script.js',
- content : moduleData.script
- });
- }
- };
-
- var postData = {};
-
- angular.forEach(allFiles, function(file, index) {
- if (file.content && file.name != 'index.html') {
- postData['files[' + file.name + ']'] = file.content;
- }
- });
-
- postData['files[index.html]'] = templateMerge(indexHtmlContent, indexProp);
- postData['tags[]'] = "angularjs";
-
- postData.private = true;
- postData.description = 'AngularJS Example Plunkr';
-
- formPostData('http://plnkr.co/edit/?p=preview', postData);
- };
-};
-
-docsApp.serviceFactory.openJsFiddle = function(templateMerge, formPostData, prepareEditorAssetTags, prepareDefaultAppModule) {
- var HTML = '<div ng-app=\"{{module}}\">\n{{html:2}}</div>',
- CSS = '</style> <!-- Ugly Hack to make remote files preload in jsFiddle --> \n' +
- '{{head:0}}<style>{{css}}',
- SCRIPT = '{{script}}',
- SCRIPT_CACHE = '\n\n<!-- {{name}} -->\n<script type="text/ng-template" id="{{name}}">\n{{content:2}}</script>',
- BASE_HREF_TAG = '<!-- Ugly Hack to make AngularJS routing work inside of jsFiddle -->\n' +
- '<base href="/" />\n\n';
-
- return function(content) {
- var prop = {
- module: content.module,
- html: '',
- css: '',
- script: ''
- };
- if(!prop.module) {
- var moduleData = prepareDefaultAppModule(content);
- prop.script = moduleData.script;
- prop.module = moduleData.module;
- };
-
- angular.forEach(content.html, function(file, index) {
- if (index) {
- prop.html += templateMerge(SCRIPT_CACHE, file);
- } else {
- prop.html += file.content;
- }
- });
-
- prop.head = prepareEditorAssetTags(content, { includeLocalFiles : false });
-
- angular.forEach(content.js, function(file, index) {
- prop.script += file.content;
- });
-
- angular.forEach(content.css, function(file, index) {
- prop.css += file.content;
- });
-
- var hasRouting = false;
- angular.forEach(content.deps, function(file) {
- hasRouting = hasRouting || file.name == 'angular-route.js';
- });
-
- var compiledHTML = templateMerge(HTML, prop);
- if(hasRouting) {
- compiledHTML = BASE_HREF_TAG + compiledHTML;
- }
- formPostData("http://jsfiddle.net/api/post/library/pure/", {
- title: 'AngularJS Example',
- html: compiledHTML,
- js: templateMerge(SCRIPT, prop),
- css: templateMerge(CSS, prop)
- });
- };
-};
-
-
-docsApp.serviceFactory.sections = ['NG_PAGES', function sections(NG_PAGES) {
- var sections = {
- guide: [],
- api: [],
- tutorial: [],
- misc: [],
- error: [],
- getPage: function(sectionId, partialId) {
- var pages = sections[sectionId];
-
- partialId = partialId || 'index';
-
- for (var i = 0, ii = pages.length; i < ii; i++) {
- if (pages[i].id == partialId) {
- return pages[i];
- }
- }
- return null;
- }
- };
-
- angular.forEach(NG_PAGES, function(page) {
- page.url = page.section + '/' + page.id;
- if (page.id == 'angular.Module') {
- page.partialUrl = 'partials/api/angular.IModule.html';
- } else {
- page.partialUrl = 'partials/' + page.url + '.html';
- }
-
- sections[page.section].push(page);
- });
-
- return sections;
-}];
-
-
-docsApp.controller.DocsController = function($scope, $rootScope, $location, $window, $cookies, sections) {
- $scope.fold = function(url) {
- if(url) {
- $scope.docs_fold = '/notes/' + url;
- if(/\/build/.test($window.location.href)) {
- $scope.docs_fold = '/build/docs' + $scope.docs_fold;
- }
- window.scrollTo(0,0);
- }
- else {
- $scope.docs_fold = null;
- }
- };
- var OFFLINE_COOKIE_NAME = 'ng-offline',
- DOCS_PATH = /^\/(api)|(guide)|(misc)|(tutorial)|(error)/,
- INDEX_PATH = /^(\/|\/index[^\.]*.html)$/,
- GLOBALS = /^angular\.([^\.]+)$/,
- ERROR = /^([a-zA-Z0-9_$]+:)?([a-zA-Z0-9_$]+)$/,
- MODULE = /^((?:(?!^angular\.)[^\.])+)$/,
- MODULE_MOCK = /^angular\.mock\.([^\.]+)$/,
- MODULE_DIRECTIVE = /^((?:(?!^angular\.)[^\.])+)\.directive:([^\.]+)$/,
- MODULE_DIRECTIVE_INPUT = /^((?:(?!^angular\.)[^\.])+)\.directive:input\.([^\.]+)$/,
- MODULE_FILTER = /^((?:(?!^angular\.)[^\.])+)\.filter:([^\.]+)$/,
- MODULE_SERVICE = /^((?:(?!^angular\.)[^\.])+)\.([^\.]+?)(Provider)?$/,
- MODULE_TYPE = /^((?:(?!^angular\.)[^\.])+)\..+\.([A-Z][^\.]+)$/,
- URL = {
- module: 'guide/module',
- directive: 'guide/directive',
- input: 'api/ng.directive:input',
- filter: 'guide/dev_guide.templates.filters',
- service: 'guide/dev_guide.services',
- type: 'guide/types'
- };
-
-
- /**********************************
- Publish methods
- ***********************************/
-
- $scope.navClass = function(page1, page2) {
- return {
- last: this.$last,
- active: page1 && this.currentPage == page1 || page2 && this.currentPage == page2
- };
- };
-
- $scope.afterPartialLoaded = function() {
- var currentPageId = $location.path();
- $scope.partialTitle = $scope.currentPage.shortName;
- $window._gaq.push(['_trackPageview', currentPageId]);
- };
-
- /** stores a cookie that is used by apache to decide which manifest ot send */
- $scope.enableOffline = function() {
- //The cookie will be good for one year!
- var date = new Date();
- date.setTime(date.getTime()+(365*24*60*60*1000));
- var expires = "; expires="+date.toGMTString();
- var value = angular.version.full;
- document.cookie = OFFLINE_COOKIE_NAME + "="+value+expires+"; path=" + $location.path;
-
- //force the page to reload so server can serve new manifest file
- window.location.reload(true);
- };
-
-
-
- /**********************************
- Watches
- ***********************************/
-
- var SECTION_NAME = {
- api: 'API Reference',
- guide: 'Developer Guide',
- misc: 'Miscellaneous',
- tutorial: 'Tutorial',
- error: 'Error Reference'
- };
-
- populateComponentsList();
-
- $scope.$watch(function docsPathWatch() {return $location.path(); }, function docsPathWatchAction(path) {
- // ignore non-doc links which are used in examples
- if (DOCS_PATH.test(path)) {
- var parts = path.split('/'),
- sectionId = parts[1],
- partialId = parts.slice(2).join('/'),
- sectionName = SECTION_NAME[sectionId] || sectionId,
- page = sections.getPage(sectionId, partialId);
-
- $rootScope.currentPage = sections.getPage(sectionId, partialId);
-
- if (!$rootScope.currentPage) {
- $scope.partialTitle = 'Error: Page Not Found!';
- }
-
- populateComponentsList();
-
- // Update breadcrumbs
- var breadcrumb = $scope.breadcrumb = [],
- match;
-
- if (partialId) {
- breadcrumb.push({ name: sectionName, url: sectionId });
- if (partialId == 'angular.Module') {
- breadcrumb.push({ name: 'angular.Module' });
- } else if (match = partialId.match(GLOBALS)) {
- breadcrumb.push({ name: partialId });
- } else if (match = partialId.match(MODULE)) {
- breadcrumb.push({ name: match[1] });
- } else if (match = partialId.match(MODULE_FILTER)) {
- breadcrumb.push({ name: match[1], url: sectionId + '/' + match[1] });
- breadcrumb.push({ name: match[2] });
- } else if (match = partialId.match(MODULE_DIRECTIVE)) {
- breadcrumb.push({ name: match[1], url: sectionId + '/' + match[1] });
- breadcrumb.push({ name: match[2] });
- } else if (match = partialId.match(MODULE_DIRECTIVE_INPUT)) {
- breadcrumb.push({ name: match[1], url: sectionId + '/' + match[1] });
- breadcrumb.push({ name: 'input', url: URL.input });
- breadcrumb.push({ name: match[2] });
- } else if (match = partialId.match(MODULE_TYPE)) {
- breadcrumb.push({ name: match[1], url: sectionId + '/' + match[1] });
- breadcrumb.push({ name: match[2] });
- } else if (match = partialId.match(MODULE_SERVICE)) {
- breadcrumb.push({ name: match[1], url: sectionId + '/' + match[1] });
- breadcrumb.push({ name: match[2] + (match[3] || '') });
- } else if (match = partialId.match(MODULE_MOCK)) {
- breadcrumb.push({ name: 'angular.mock.' + match[1] });
- } else {
- breadcrumb.push({ name: page.shortName });
- }
- } else {
- breadcrumb.push({ name: sectionName });
- }
- }
- });
-
- /**********************************
- Initialize
- ***********************************/
-
- $scope.versionNumber = angular.version.full;
- $scope.version = angular.version.full + " " + angular.version.codeName;
- $scope.subpage = false;
- $scope.offlineEnabled = ($cookies[OFFLINE_COOKIE_NAME] == angular.version.full);
- $scope.futurePartialTitle = null;
- $scope.loading = 0;
- $scope.URL = URL;
- $scope.$cookies = $cookies;
-
- $cookies.platformPreference = $cookies.platformPreference || 'gitUnix';
-
- if (!$location.path() || INDEX_PATH.test($location.path())) {
- $location.path('/api').replace();
- }
- // bind escape to hash reset callback
- angular.element(window).on('keydown', function(e) {
- if (e.keyCode === 27) {
- $scope.$apply(function() {
- $scope.subpage = false;
- });
- }
- });
-
- /**********************************
- Private methods
- ***********************************/
-
- function populateComponentsList() {
- var area = $location.path().split('/')[1];
- area = /^index-\w/.test(area) ? 'api' : area;
- var moduleCache = {},
- namespaceCache = {},
- pages = sections[area],
- modules = $scope.modules = [],
- namespaces = $scope.namespaces = [],
- globalErrors = $scope.globalErrors = [],
- otherPages = $scope.pages = [],
- search = $scope.search;
-
- angular.forEach(pages, function(page) {
- var match,
- id = page.id;
-
- if (page.id == 'index') {
- //skip
- } else if (page.section != 'api') {
- if (page.section === 'error') {
- match = id.match(ERROR);
- if (match[1] !== undefined) {
- namespace(match[1].replace(/:/g, '')).errors.push(page);
- } else {
- globalErrors.push(page);
- }
- } else {
- otherPages.push(page);
- }
- } else if (id == 'angular.Module') {
- module('ng').types.push(page);
- } else if (match = id.match(GLOBALS)) {
- module('ng').globals.push(page);
- } else if (match = id.match(MODULE)) {
- module(match[1]);
- } else if (match = id.match(MODULE_FILTER)) {
- module(match[1]).filters.push(page);
- } else if (match = id.match(MODULE_DIRECTIVE)) {
- module(match[1]).directives.push(page);
- } else if (match = id.match(MODULE_DIRECTIVE_INPUT)) {
- module(match[1]).directives.push(page);
- } else if (match = id.match(MODULE_SERVICE)) {
- module(match[1]).service(match[2])[match[3] ? 'provider' : 'instance'] = page;
- } else if (match = id.match(MODULE_TYPE)) {
- module(match[1]).types.push(page);
- } else if (match = id.match(MODULE_MOCK)) {
- module('ngMock').globals.push(page);
- }
-
- });
-
- function module(name) {
- var module = moduleCache[name];
-
- if (!module) {
- module = moduleCache[name] = {
- name: name,
- url: 'api/' + name,
- globals: [],
- directives: [],
- services: [],
- service: function(name) {
- var service = moduleCache[this.name + ':' + name];
- if (!service) {
- service = {name: name};
- moduleCache[this.name + ':' + name] = service;
- this.services.push(service);
- }
- return service;
- },
- types: [],
- filters: []
- };
- modules.push(module);
- }
- return module;
- }
-
- function namespace(name) {
- var namespace = namespaceCache[name];
-
- if (!namespace) {
- namespace = namespaceCache[name] = {
- name: name,
- url: 'error/' + name,
- errors: []
- };
- namespaces.push(namespace);
- }
- return namespace;
- }
- }
-};
-
-
-angular.module('docsApp', ['ngResource', 'ngRoute', 'ngCookies', 'ngSanitize', 'ngAnimate', 'bootstrap', 'bootstrapPrettify', 'docsData']).
- config(function($locationProvider) {
- $locationProvider.html5Mode(true).hashPrefix('!');
- }).
- factory(docsApp.serviceFactory).
- directive(docsApp.directive).
- controller(docsApp.controller);
-
-angular.forEach(docsApp.filter, function (docsAppFilter, filterName) {
- angular.module('docsApp').filter(filterName, docsAppFilter);
-});
diff --git a/docs/src/templates/offline.html b/docs/src/templates/offline.html
deleted file mode 100644
index f52ca6e5..00000000
--- a/docs/src/templates/offline.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<h2>OFFLINE</h2>
-
-<p>This page is currently unavailable because your are offline.</p>
-<p>Please connect to the Internet and reload the page.</p>
diff --git a/docs/src/writer.js b/docs/src/writer.js
deleted file mode 100644
index 498766b5..00000000
--- a/docs/src/writer.js
+++ /dev/null
@@ -1,166 +0,0 @@
-/**
- * All writing related code here. This is so that we can separate the async code from sync code
- * for testability
- */
-var pathUtils = require('path');
-var qfs = require('q-io/fs');
-var Q = require('qq');
-var OUTPUT_DIR = pathUtils.join('build','docs');
-var TEMPLATES_DIR = pathUtils.join('docs','src','templates');
-var fs = require('fs');
-
-exports.output = output;
-function output(file, content) {
- var fullPath = pathUtils.join(OUTPUT_DIR,file);
- var dir = pathUtils.dirname(fullPath);
- return Q.when(exports.makeDir(dir), function () {
- return qfs.write(fullPath, exports.toString(content));
- });
-}
-
-//recursively create directory
-exports.makeDir = function(p) {
- p = pathUtils.normalize(p);
- var parts = p.split(pathUtils.sep);
-
- var makePartialDir = function makePartialDir(path) {
- return qfs.makeDirectory(path).then(function() {
- if (parts.length) {
- return makePartialDir(pathUtils.join(path, parts.shift()));
- }
- }, function(error) {
- if (error.code !== 'EEXIST') {
- throw error;
- }
- if (parts.length) {
- return makePartialDir(pathUtils.join(path, parts.shift()));
- }
- });
- };
-
- return makePartialDir(pathUtils.join('.', parts.shift()));
-};
-
-exports.copyTemplate = function(filename) {
- // Don't need to normalize here as `exports.copy` will do it for us
- return exports.copy(pathUtils.join(TEMPLATES_DIR,filename), filename);
-};
-
-/* Copy files from one place to another.
- * @param from{string} path of the source file to be copied
- * @param to{string} path of where the copied file should be stored
- * @param transform{function=} transfromation function to be applied before return
- */
-exports.copy = function(from, to, transform) {
- var transformArgs = Array.prototype.slice.call(arguments, 3);
-
- from = pathUtils.normalize(from);
- to = pathUtils.normalize(to);
-
- // We have to use binary reading, Since some characters are unicode.
- return qfs.read(from, 'b').then(function(content) {
- if (transform) {
- // Pass any extra arguments, e.g.
- // `copy(from, to, transform, extra1, extra2, ...)`
- // to the transform function
- transformArgs.unshift(content.toString());
- content = transform.apply(null, transformArgs);
- }
- return output(to, content);
- });
-};
-
-
-exports.symlink = symlink;
-function symlink(from, to, type) {
- // qfs will normalize the path arguments for us here
- return qfs.exists(to).then(function(exists) {
- if (!exists) {
- return qfs.symbolicLink(to, from, type || 'file');
- }
- });
-}
-
-
-exports.symlinkTemplate = symlinkTemplate;
-function symlinkTemplate(filename, type) {
- // pathUtils.join will normalize the filename for us
- var dest = pathUtils.join(OUTPUT_DIR, filename),
- dirDepth = dest.split(pathUtils.sep).length,
- src = pathUtils.join(Array(dirDepth).join('..' + pathUtils.sep), TEMPLATES_DIR, filename);
- return symlink(src, dest, type);
-}
-
-
-/* Replace placeholders in content accordingly
- * @param content{string} content to be modified
- * @param replacements{obj} key and value pairs in which key will be replaced with value in content
- */
-exports.replace = function(content, replacements) {
- for(var key in replacements) {
- content = content.replace(key, replacements[key]);
- }
- return content;
-};
-
-exports.copyDir = function copyDir(from, to) {
- from = pathUtils.normalize(from);
- to = pathUtils.normalize(to);
- return qfs.listTree(from).then(function(files) {
- files.forEach(function(file) {
- var path = to ? file.replace(from, to) : from;
- // Not sure why this next line is here...
- path = path.replace('/docs/build', '');
- exports.copy(file, path);
- });
- });
-};
-
-exports.merge = function(srcs, to) {
- // pathUtils.join will normalize each of the srcs inside the mapping
- to = pathUtils.normalize(to);
- return merge(srcs.map(function(src) { return pathUtils.join(TEMPLATES_DIR, src); }), to);
-};
-
-function merge(srcs, to) {
- var contents = [];
- //Sequentially read file
- var done;
- srcs.forEach(function(src) {
- done = Q.when(done, function(content) {
- if(content) contents.push(content);
- return qfs.read(src, 'b');
- });
- });
-
- // write to file
- return Q.when(done, function(content) {
- contents.push(content);
- return output(to, contents.join('\n'));
- });
-}
-
-//----------------------- Synchronous Methods ----------------------------------
-
-exports.toString = function toString(obj) {
- switch (typeof obj) {
- case 'string':
- return obj;
- case 'object':
- if (obj instanceof Array) {
- obj.forEach(function(value, key) {
- obj[key] = toString(value);
- });
- return obj.join('');
- } else if (obj.constructor.name == 'Buffer'){
- // do nothing it is Buffer Object
- } else {
- return JSON.stringify(obj);
- }
- }
- return obj;
-};
-
-
-function noop() {}
-