aboutsummaryrefslogtreecommitdiffstats
path: root/docs/src/templates/docs.js
diff options
context:
space:
mode:
authorMisko Hevery2012-02-24 16:20:35 -0800
committerMisko Hevery2012-06-02 16:02:05 -0700
commit581f93ae56ebb0086d0c0989df69a28656395006 (patch)
tree01f6833ae6d3cbc74c47e8761911cac0811b9756 /docs/src/templates/docs.js
parent6933fb7924cd1ef01e9259c53bf76023a87d61aa (diff)
downloadangular.js-581f93ae56ebb0086d0c0989df69a28656395006.tar.bz2
docs(ngdocs): cleaned up directive titles
Diffstat (limited to 'docs/src/templates/docs.js')
-rw-r--r--docs/src/templates/docs.js164
1 files changed, 164 insertions, 0 deletions
diff --git a/docs/src/templates/docs.js b/docs/src/templates/docs.js
new file mode 100644
index 00000000..b385952f
--- /dev/null
+++ b/docs/src/templates/docs.js
@@ -0,0 +1,164 @@
+DocsController.$inject = ['$scope', '$location', '$window', '$cookies', '$filter'];
+function DocsController(scope, $location, $window, $cookies, $filter) {
+ window.$root = scope.$root;
+
+ var OFFLINE_COOKIE_NAME = 'ng-offline',
+ DOCS_PATH = /^\/(api)|(guide)|(cookbook)|(misc)|(tutorial)/,
+ INDEX_PATH = /^(\/|\/index[^\.]*.html)$/,
+ filter = $filter('filter');
+
+ scope.$location = $location;
+ 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;
+
+ if (!$location.path() || INDEX_PATH.test($location.path())) {
+ $location.path('/api').replace();
+ }
+
+ scope.$watch('$location.path()', function(path) {
+ // ignore non-doc links which are used in examples
+ if (DOCS_PATH.test(path)) {
+ var parts = path.split('/');
+ scope.sectionId = parts[1];
+ scope.partialId = parts[2] || 'index';
+ scope.pages = filter(NG_PAGES, {section: scope.sectionId});
+
+ var i = scope.pages.length;
+ while (i--) {
+ if (scope.pages[i].id == scope.partialId) break;
+ }
+ if (i<0) {
+ scope.partialTitle = 'Error: Page Not Found!';
+ delete scope.partialId;
+ } else {
+ // TODO(i): this is not ideal but better than updating the title before a partial arrives,
+ // which results in the old partial being displayed with the new title
+ scope.futurePartialTitle = scope.pages[i].name;
+ scope.loading++;
+ }
+ }
+ });
+
+ scope.getUrl = function(page) {
+ return page.section + (page.id == 'index' ? '' : '/' + page.id);
+ };
+
+ scope.getCurrentPartial = function() {
+ return this.partialId
+ ? ('./partials/' + this.sectionId + '/' + this.partialId.replace('angular.Module', 'angular.IModule') + '.html')
+ : '';
+ };
+
+ scope.getClass = function(page) {
+ var depth = page.depth,
+ cssClass = 'level-' + depth + (page.name == this.partialId ? ' selected' : '');
+
+ if (page.section == 'api')
+ cssClass += ' monospace';
+
+ return cssClass;
+ };
+
+ scope.selectedSection = function(section) {
+ return section == scope.sectionId ? 'current' : '';
+ };
+
+ scope.selectedPartial = function(partial) {
+ return partial.id == scope.partialId ? 'current' : '';
+ };
+
+ scope.afterPartialLoaded = function() {
+ var currentPageId = $location.path();
+ scope.loading--;
+ scope.partialTitle = scope.futurePartialTitle;
+ SyntaxHighlighter.highlight();
+ $window._gaq.push(['_trackPageview', currentPageId]);
+ loadDisqus(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);
+ };
+
+ // bind escape to hash reset callback
+ angular.element(window).bind('keydown', function(e) {
+ if (e.keyCode === 27) {
+ scope.$apply(function() {
+ scope.subpage = false;
+ });
+ }
+ });
+
+ function loadDisqus(currentPageId) {
+ // http://docs.disqus.com/help/2/
+ window.disqus_shortname = 'angularjs';
+ window.disqus_identifier = currentPageId;
+ window.disqus_url = 'http://docs-next.angularjs.org' + currentPageId;
+
+ if ($location.host() == 'localhost') {
+ return; // don't display disqus on localhost, comment this out if needed
+ //window.disqus_developer = 1;
+ }
+
+ // http://docs.disqus.com/developers/universal/
+ (function() {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://angularjs.disqus.com/embed.js';
+ (document.getElementsByTagName('head')[0] ||
+ document.getElementsByTagName('body')[0]).appendChild(dsq);
+ })();
+
+ angular.element(document.getElementById('disqus_thread')).html('');
+ }
+}
+
+SyntaxHighlighter['defaults'].toolbar = false;
+SyntaxHighlighter['defaults'].gutter = true;
+
+/**
+ * Controller for tutorial instructions
+ * @param $cookieStore
+ * @constructor
+ */
+function TutorialInstructionsCtrl($cookieStore) {
+ this.selected = $cookieStore.get('selEnv') || 'git-mac';
+
+ this.currentCls = function(id, cls) {
+ return this.selected == id ? cls || 'current' : '';
+ };
+
+ this.select = function(id) {
+ this.selected = id;
+ $cookieStore.put('selEnv', id);
+ };
+}
+
+angular.module('ngdocs', ['ngdocs.directives'], function($locationProvider, $filterProvider, $compileProvider) {
+ $locationProvider.html5Mode(true).hashPrefix('!');
+
+ $filterProvider.register('title', function(){
+ return function(text) {
+ return text && text.replace(/^angular\.module\.([^\.]+)(\.(.*))?$/, function(_, module, _0, name){
+ name = name.replace('$compileProvider.directive.', 'directive - ')
+ return 'Module ' + module + (name ? ' - ' + name : '');
+ });
+ };
+ });
+
+ $compileProvider.directive('code', function() {
+ return { terminal: true };
+ });
+});