"Fossies" - the Fresh Open Source Software Archive

Member "angular-1.8.2/docs/js/docs.min.js.map" (21 Oct 2020, 42138 Bytes) of package /linux/www/angular-1.8.2.zip:


The requested HTML page contains a <FORM> tag that is unusable on "Fossies" in "automatic" (rendered) mode so that page is shown as HTML source code (style: standard) with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file.

    1 {"version":3,"sources":["app.js","directives.js","docs.js","errors.js","examples.js","search.js","tutorials.js","versions.js"],"names":["registerHDirective","i","directivesModule","directive","restrict","require","tocCollector","link","scope","element","attrs","ctrls","toc","id","register","level","fragment","title","text","children","angular","module","config","$locationProvider","html5Mode","hashPrefix","$anchorScroll","$location","on","event","hash","$apply","terminal","compile","linenums","hasClass","match","exec","className","lang","html","window","prettyPrintOne","yOffset","addClass","$rootScope","controller","$element","ctrl","this","$on","hs","root","h","previousLevel","length","push","component","template","bindings","items","path","replace","tocContainer","showToc","controllerAs","$compile","header","containerElement","after","$scope","$window","$cookies","NG_PAGES","NG_NAVIGATION","CURRENT_NG_VERSION","errorPartialPath","navClass","navItem","active","href","currentPage","current","nav-index-section","type","pagePath","_gaq","loading","loadingError","$watch","partialPath","currentArea","area","pathParts","split","breadcrumb","breadcrumbPath","forEach","part","name","url","hasError","versionNumber","full","version","codeName","INDEX_PATH","test","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","STACK_TRACE_REGEXP","truncate","nchars","substr","target","targetHtml","errorLinkFilter","encodeAngleBrackets","interpolate","formatString","formatArgs","arguments","index","slice","formattedText","search","errorDisplay","isDefined","apply","exampleClassNameSelector","tpl","setTab","tab","tabs","activeTabIndex","$broadcast","node","examples","querySelectorAll","child","getAttribute","e","style","display","selected","factory","$document","newWindow","fields","form","value","input","attr","append","find","submit","remove","COPYRIGHT","Date","getFullYear","COPYRIGHT_JS_CSS","COPYRIGHT_HTML","filename","lastIndexOf","$q","getExampleData","formPostData","createCopyrightNotice","bindToController","examplePath","example","manifest","undefined","files","prepareExampleData","resolve","then","data","exampleNameParts","unshift","charAt","toUpperCase","join","open","clickEvent","ctrlKey","metaKey","postData","tags[0]","tags[1]","private","file","content","description","$onInit","$http","exampleFolder","get","response","filePromises","transformResponse","all","docsSearch","clearResults","results","colClassName","hasResults","q","MIN_SEARCH_LENGTH","hits","api","guide","tutorial","error","misc","hit","limit","totalAreas","Object","keys","$$phase","result","hideResults","handleResultClicked","$event","which","pop","provider","localSearchFactory","$timeout","console","log","lunr","ref","field","boost","indexReadyPromise","searchData","page","add","webWorkerSearchFactory","searchIndex","defer","worker","Worker","onmessage","oEvent","pages","d","map","promise","postMessage","$inject","$get","focus","focused","$eval","ESCAPE_KEY_KEYCODE","FORWARD_SLASH_KEYCODE","body","keyCode","activeElement","stopPropagation","preventDefault","seq","docTutorialNav","prev","next","diffLo","diffHi","step","collection","matcherFn","ii","ALL_NG_VERSIONS","versionStr","isSnapshot","distTag","versions","selectedVersion","jumpToDocsVersion","currentPagePath","location","docsUrl"],"mappings":"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","file":"docs.min.js","sourcesContent":["'use strict';\n\nangular.module('docsApp', [\n  'ngRoute',\n  'ngCookies',\n  'ngSanitize',\n  'ngAnimate',\n  'DocsController',\n  'pagesData',\n  'navData',\n  'directives',\n  'errors',\n  'examples',\n  'search',\n  'tutorials',\n  'versions',\n  'ui.bootstrap.dropdown'\n])\n\n.config(['$locationProvider', function($locationProvider) {\n  $locationProvider.html5Mode(true).hashPrefix('!');\n}]);\n","'use strict';\n\nvar directivesModule = angular.module('directives', []);\n\ndirectivesModule\n/**\n * backToTop Directive\n * @param  {Function} $anchorScroll\n *\n * @description Ensure that the browser scrolls when the anchor is clicked\n */\n.directive('backToTop', ['$anchorScroll', '$location', function($anchorScroll, $location) {\n  return function link(scope, element) {\n    element.on('click', function(event) {\n      $location.hash('');\n      scope.$apply($anchorScroll);\n    });\n  };\n}])\n\n\n.directive('code', function() {\n  return {\n    restrict: 'E',\n    terminal: true,\n    compile: function(element) {\n      var linenums = element.hasClass('linenum');// || element.parent()[0].nodeName === 'PRE';\n      var match = /lang-(\\S+)/.exec(element[0].className);\n      var lang = match && match[1];\n      var html = element.html();\n      element.html(window.prettyPrintOne(html, lang, linenums));\n    }\n  };\n})\n\n.directive('scrollYOffsetElement', ['$anchorScroll', function($anchorScroll) {\n  return function(scope, element) {\n    $anchorScroll.yOffset = element;\n  };\n}])\n\n.directive('table', function() {\n  return {\n    restrict: 'E',\n    link: function(scope, element, attrs) {\n      if (!attrs['class']) {\n        element.addClass('table table-bordered table-striped code-table');\n      }\n    }\n  };\n})\n\n.directive('tocCollector', ['$rootScope', function($rootScope) {\n  return {\n    controller: ['$element', function($element) {\n      /* eslint-disable no-invalid-this */\n      var ctrl = this;\n\n      $rootScope.$on('$includeContentRequested', function() {\n        ctrl.hs = [];\n        ctrl.root = [];\n      });\n\n      this.hs = [];\n      this.root = [];\n      this.element = $element;\n\n      this.register = function(h) {\n        var previousLevel;\n\n        for (var i = ctrl.hs.length - 1; i >= 0; i--) {\n          if (ctrl.hs[i].level === (h.level - 1)) {\n            previousLevel = ctrl.hs[i];\n            break;\n          }\n        }\n\n        if (previousLevel) {\n          previousLevel.children.push(h);\n        } else {\n          this.root.push(h);\n        }\n\n        ctrl.hs.push(h);\n        /* eslint-enable no-invalid-this */\n      };\n    }]\n  };\n}])\n\n.component('tocTree', {\n  template: '<ul>' +\n      '<li ng-repeat=\"item in $ctrl.items\">' +\n        '<a ng-href=\"{{ $ctrl.path }}#{{item.fragment}}\">{{item.title}}</a>' +\n        '<toc-tree ng-if=\"::item.children.length > 0\" items=\"item.children\"></toc-tree>' +\n      '</li>' +\n    '</ul>',\n  bindings: {\n    items: '<'\n  },\n  controller: ['$location', /** @this */ function($location) {\n    this.path = $location.path().replace(/^\\/?(.+?)(\\/index)?\\/?$/, '$1');\n  }]\n})\n.directive('tocContainer', function() {\n  return {\n    scope: true,\n    restrict: 'E',\n    require: {\n      tocContainer: '',\n      tocCollector: '^^'\n    },\n    controller: function() {\n      this.showToc = true;\n      this.items = [];\n    },\n    controllerAs: '$ctrl',\n    link: function(scope, element, attrs, ctrls) {\n      ctrls.tocContainer.items = ctrls.tocCollector.root;\n    },\n    template: '<div ng-if=\"::$ctrl.items.length > 1\">' +\n      '<b>Contents</b>' +\n      '<button class=\"btn\" ng-click=\"$ctrl.showToc = !$ctrl.showToc\">{{$ctrl.showToc ? \\'Hide\\' : \\'Show\\'}}</button><br>' +\n      '<toc-tree items=\"$ctrl.items\" ng-show=\"$ctrl.showToc\"></toc-tree>' +\n      '</div>'\n  };\n})\n.directive('header', function() {\n  return {\n    restrict: 'E',\n    controller: ['$element', function($element) {\n      // eslint-disable-next-line no-invalid-this\n      this.element = $element;\n    }]\n  };\n})\n.directive('h1', ['$compile', function($compile) {\n  return {\n    restrict: 'E',\n    require: {\n      tocCollector: '^^?',\n      header: '^^?'\n    },\n    link: function(scope, element, attrs, ctrls) {\n      if (!ctrls.tocCollector) return;\n\n      var tocContainer = angular.element('<toc-container></toc-container>');\n      var containerElement = ctrls.header ? ctrls.header.element : element;\n\n      containerElement.after(tocContainer);\n      $compile(tocContainer)(scope);\n    }\n  };\n}]);\n\nfor (var i = 2; i <= 5; i++) {\n  registerHDirective(i);\n}\n\nfunction registerHDirective(i) {\n  directivesModule.directive('h' + i, function() {\n    return {\n      restrict: 'E',\n      require: {\n        'tocCollector': '^^?'\n      },\n      link: function(scope, element, attrs, ctrls) {\n        var toc = ctrls.tocCollector;\n\n        if (!toc || !attrs.id) return;\n\n        toc.register({\n          level: i,\n          fragment: attrs.id,\n          title: element.text(),\n          children: []\n        });\n\n      }\n    };\n  });\n}\n\n","'use strict';\n\nangular.module('DocsController', ['currentVersionData'])\n\n.controller('DocsController', [\n          '$scope', '$rootScope', '$location', '$window', '$cookies',\n              'NG_PAGES', 'NG_NAVIGATION', 'CURRENT_NG_VERSION',\n  function($scope, $rootScope, $location, $window, $cookies,\n              NG_PAGES, NG_NAVIGATION, CURRENT_NG_VERSION) {\n\n  var errorPartialPath = 'Error404.html';\n\n  $scope.navClass = function(navItem) {\n    return {\n      active: navItem.href && this.currentPage && this.currentPage.path,\n      current: this.currentPage && this.currentPage.path === navItem.href,\n      'nav-index-section': navItem.type === 'section'\n    };\n  };\n\n  $scope.$on('$includeContentLoaded', function() {\n    var pagePath = $scope.currentPage ? $scope.currentPage.path : $location.path();\n    $window._gaq.push(['_trackPageview', pagePath]);\n    $scope.loading = false;\n  });\n\n  $scope.$on('$includeContentError', function() {\n    $scope.loading = false;\n    $scope.loadingError = true;\n  });\n\n  $scope.$watch(function docsPathWatch() {return $location.path(); }, function docsPathWatchAction(path) {\n\n    path = path.replace(/^\\/?(.+?)(\\/index)?\\/?$/, '$1');\n\n    var currentPage = $scope.currentPage = NG_PAGES[path];\n\n    $scope.loading = true;\n    $scope.loadingError = false;\n\n    if (currentPage) {\n      $scope.partialPath = 'partials/' + path + '.html';\n      $scope.currentArea = NG_NAVIGATION[currentPage.area];\n      var pathParts = currentPage.path.split('/');\n      var breadcrumb = $scope.breadcrumb = [];\n      var breadcrumbPath = '';\n      angular.forEach(pathParts, function(part) {\n        breadcrumbPath += part;\n        breadcrumb.push({ name: (NG_PAGES[breadcrumbPath] && NG_PAGES[breadcrumbPath].name) || part, url: breadcrumbPath });\n        breadcrumbPath += '/';\n      });\n    } else {\n      $scope.currentArea = NG_NAVIGATION['api'];\n      $scope.breadcrumb = [];\n      $scope.partialPath = errorPartialPath;\n    }\n  });\n\n  $scope.hasError = function() {\n    return $scope.partialPath === errorPartialPath || $scope.loadingError;\n  };\n\n  /**********************************\n   Initialize\n   ***********************************/\n\n  $scope.versionNumber = CURRENT_NG_VERSION.full;\n  $scope.version = CURRENT_NG_VERSION.full + ' ' + CURRENT_NG_VERSION.codeName;\n  $scope.loading = false;\n  $scope.loadingError = false;\n\n  var INDEX_PATH = /^(\\/|\\/index[^.]*.html)$/;\n  if (!$location.path() || INDEX_PATH.test($location.path())) {\n    $location.path('/api').replace();\n  }\n\n}]);\n","'use strict';\n\nangular.module('errors', ['ngSanitize'])\n\n.filter('errorLink', ['$sanitize', function($sanitize) {\n  var LINKY_URL_REGEXP = /((ftp|https?):\\/\\/|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>]/g,\n      MAILTO_REGEXP = /^mailto:/,\n      STACK_TRACE_REGEXP = /:\\d+:\\d+$/;\n\n  var truncate = function(text, nchars) {\n    if (text.length > nchars) {\n      return text.substr(0, nchars - 3) + '...';\n    }\n    return text;\n  };\n\n  return function(text, target) {\n    if (!text) return text;\n\n    var targetHtml = target ? ' target=\"' + target + '\"' : '';\n\n    return $sanitize(text.replace(LINKY_URL_REGEXP, function(url) {\n      if (STACK_TRACE_REGEXP.test(url)) {\n        return url;\n      }\n\n      // if we did not match ftp/http/mailto then assume mailto\n      if (!/^((ftp|https?):\\/\\/|mailto:)/.test(url)) url = 'mailto:' + url;\n\n      return '<a' + targetHtml + ' href=\"' + url + '\">' +\n                truncate(url.replace(MAILTO_REGEXP, ''), 60) +\n              '</a>';\n    }));\n  };\n}])\n\n\n.directive('errorDisplay', ['$location', 'errorLinkFilter', function($location, errorLinkFilter) {\n  var encodeAngleBrackets = function(text) {\n    return text.replace(/</g, '&lt;').replace(/>/g, '&gt;');\n  };\n\n  var interpolate = function(formatString) {\n    var formatArgs = arguments;\n    return formatString.replace(/\\{\\d+\\}/g, function(match) {\n      // Drop the braces and use the unary plus to convert to an integer.\n      // The index will be off by one because of the formatString.\n      var index = +match.slice(1, -1);\n      if (index + 1 >= formatArgs.length) {\n        return match;\n      }\n      return formatArgs[index + 1];\n    });\n  };\n\n  return {\n    link: function(scope, element, attrs) {\n      var search = $location.search(),\n        formatArgs = [attrs.errorDisplay],\n        formattedText,\n        i;\n\n      for (i = 0; angular.isDefined(search['p' + i]); i++) {\n        formatArgs.push(search['p' + i]);\n      }\n\n      formattedText = encodeAngleBrackets(interpolate.apply(null, formatArgs));\n      element.html(errorLinkFilter(formattedText, '_blank'));\n    }\n  };\n}]);\n","'use strict';\n\nangular.module('examples', [])\n\n.directive('runnableExample', [function() {\n  var exampleClassNameSelector = '.runnable-example-file';\n  var tpl =\n    '<nav class=\"runnable-example-tabs\" ng-if=\"tabs\">' +\n    '  <a ng-class=\"{active:$index==activeTabIndex}\"' +\n         'ng-repeat=\"tab in tabs track by $index\" ' +\n         'href=\"\" ' +\n         'class=\"btn\"' +\n         'ng-click=\"setTab($index)\">' +\n    '    {{ tab }}' +\n    '  </a>' +\n    '</nav>';\n\n  return {\n    restrict: 'C',\n    scope : true,\n    controller : ['$scope', function($scope) {\n      $scope.setTab = function(index) {\n        var tab = $scope.tabs[index];\n        $scope.activeTabIndex = index;\n        $scope.$broadcast('tabChange', index, tab);\n      };\n    }],\n    compile : function(element) {\n      element.html(tpl + element.html());\n      return function(scope, element) {\n        var node = element[0];\n        var examples = node.querySelectorAll(exampleClassNameSelector);\n        var tabs = [];\n        angular.forEach(examples, function(child, index) {\n          tabs.push(child.getAttribute('name'));\n        });\n\n        if (tabs.length > 0) {\n          scope.tabs = tabs;\n          scope.$on('tabChange', function(e, index, title) {\n            angular.forEach(examples, function(child) {\n              child.style.display = 'none';\n            });\n            var selected = examples[index];\n            selected.style.display = 'block';\n          });\n          scope.setTab(0);\n        }\n      };\n    }\n  };\n}])\n\n.factory('formPostData', ['$document', function($document) {\n  return function(url, newWindow, fields) {\n    /**\n     * If the form posts to target=\"_blank\", pop-up blockers can cause it not to work.\n     * If a user chooses to bypass pop-up blocker one time and click the link, they will arrive at\n     * a new default plnkr, not a plnkr with the desired template.  Given this undesired behavior,\n     * some may still want to open the plnk in a new window by opting-in via ctrl+click.  The\n     * newWindow param allows for this possibility.\n     */\n    var target = newWindow ? '_blank' : '_self';\n    var form = angular.element('<form style=\"display: none;\" method=\"post\" action=\"' + url + '\" target=\"' + target + '\"></form>');\n    angular.forEach(fields, function(value, name) {\n      var input = angular.element('<input type=\"hidden\" name=\"' +  name + '\">');\n      input.attr('value', value);\n      form.append(input);\n    });\n    $document.find('body').append(form);\n    form[0].submit();\n    form.remove();\n  };\n}])\n\n.factory('createCopyrightNotice', function() {\n    var COPYRIGHT = 'Copyright ' + (new Date()).getFullYear() + ' Google LLC. All Rights Reserved.\\n'\n     + 'Use of this source code is governed by an MIT-style license that\\n'\n     + 'can be found in the LICENSE file at http://angular.io/license';\n    var COPYRIGHT_JS_CSS = '\\n\\n/*\\n' + COPYRIGHT + '\\n*/';\n    var COPYRIGHT_HTML = '\\n\\n<!-- \\n' + COPYRIGHT + '\\n-->';\n\n    return function getCopyright(filename) {\n      switch (filename.substr(filename.lastIndexOf('.'))) {\n        case '.html':\n          return COPYRIGHT_HTML;\n        case '.js':\n        case '.css':\n          return COPYRIGHT_JS_CSS;\n        case '.md':\n          return COPYRIGHT;\n      }\n      return '';\n    };\n})\n\n.directive('plnkrOpener', ['$q', 'getExampleData', 'formPostData', 'createCopyrightNotice', function($q, getExampleData, formPostData, createCopyrightNotice) {\n  return {\n    scope: {},\n    bindToController: {\n      'examplePath': '@'\n    },\n    controllerAs: 'plnkr',\n    template: '<button ng-click=\"plnkr.open($event)\" class=\"btn pull-right\"> <i class=\"glyphicon glyphicon-edit\">&nbsp;</i> Edit in Plunker</button> ',\n    controller: [function PlnkrOpenerCtrl() {\n      var ctrl = this;\n\n      ctrl.example = {\n        path: ctrl.examplePath,\n        manifest: undefined,\n        files: undefined,\n        name: 'AngularJS Example'\n      };\n\n      ctrl.prepareExampleData = function() {\n        if (ctrl.example.manifest) {\n          return $q.resolve(ctrl.example);\n        }\n\n        return getExampleData(ctrl.examplePath).then(function(data) {\n          ctrl.example.files = data.files;\n          ctrl.example.manifest = data.manifest;\n\n          // Build a pretty title for the Plunkr\n          var exampleNameParts = data.manifest.name.split('-');\n          exampleNameParts.unshift('AngularJS');\n          angular.forEach(exampleNameParts, function(part, index) {\n            exampleNameParts[index] = part.charAt(0).toUpperCase() + part.substr(1);\n          });\n          ctrl.example.name = exampleNameParts.join(' - ');\n\n          return ctrl.example;\n        });\n      };\n\n      ctrl.open = function(clickEvent) {\n\n        var newWindow = clickEvent.ctrlKey || clickEvent.metaKey;\n\n        var postData = {\n          'tags[0]': 'angularjs',\n          'tags[1]': 'example',\n          'private': true\n        };\n\n        // Make sure the example data is available.\n        // If an XHR must be made, this might break some pop-up blockers when\n        // new window is requested\n        ctrl.prepareExampleData()\n          .then(function() {\n            angular.forEach(ctrl.example.files, function(file) {\n              postData['files[' + file.name + ']'] = file.content + createCopyrightNotice(file.name);\n            });\n\n            postData.description = ctrl.example.name;\n\n            formPostData('https://plnkr.co/edit/?p=preview', newWindow, postData);\n          });\n\n      };\n\n      ctrl.$onInit = function() {\n        // Initialize the example data, so it's ready when clicking the open button.\n        // Otherwise pop-up blockers will prevent a new window from opening\n        ctrl.prepareExampleData(ctrl.example.path);\n      };\n    }]\n  };\n}])\n\n.factory('getExampleData', ['$http', '$q', function($http, $q) {\n  return function(exampleFolder) {\n    // Load the manifest for the example\n    return $http.get(exampleFolder + '/manifest.json')\n      .then(function(response) {\n        return response.data;\n      })\n      .then(function(manifest) {\n        var filePromises = [];\n\n        angular.forEach(manifest.files, function(filename) {\n          filePromises.push($http.get(exampleFolder + '/' + filename, { transformResponse: [] })\n            .then(function(response) {\n\n              // The manifests provide the production index file but Plunkr wants\n              // a straight index.html\n              if (filename === 'index-production.html') {\n                filename = 'index.html';\n              }\n\n              return {\n                name: filename,\n                content: response.data\n              };\n            }));\n        });\n\n        return $q.all({\n          manifest: manifest,\n          files: $q.all(filePromises)\n        });\n      });\n  };\n}]);\n","'use strict';\n\nangular.module('search', [])\n\n.controller('DocsSearchCtrl', ['$scope', '$location', 'docsSearch', function($scope, $location, docsSearch) {\n  function clearResults() {\n    $scope.results = [];\n    $scope.colClassName = null;\n    $scope.hasResults = false;\n  }\n\n  $scope.search = function(q) {\n    var MIN_SEARCH_LENGTH = 2;\n    if (q.length >= MIN_SEARCH_LENGTH) {\n      docsSearch(q).then(function(hits) {\n        // Make sure the areas are always in the same order\n        var results = {\n          api: [],\n          guide: [],\n          tutorial: [],\n          error: [],\n          misc: []\n        };\n\n        angular.forEach(hits, function(hit) {\n          var area = hit.area;\n\n          var limit = (area === 'api') ? 40 : 14;\n          results[area] = results[area] || [];\n          if (results[area].length < limit) {\n            results[area].push(hit);\n          }\n        });\n\n        var totalAreas = Object.keys(results).length;\n        if (totalAreas > 0) {\n          $scope.colClassName = 'cols-' + totalAreas;\n        }\n        $scope.hasResults = totalAreas > 0;\n        $scope.results = results;\n      });\n    } else {\n      clearResults();\n    }\n    if (!$scope.$$phase) $scope.$apply();\n  };\n\n  $scope.submit = function() {\n    var result;\n    if ($scope.results.api) {\n      result = $scope.results.api[0];\n    } else {\n      for (var i in $scope.results) {\n        result = $scope.results[i][0];\n        if (result) {\n          break;\n        }\n      }\n    }\n    if (result) {\n      $location.path(result.path);\n      $scope.hideResults();\n    }\n  };\n\n  $scope.hideResults = function() {\n    clearResults();\n    $scope.q = '';\n  };\n\n  $scope.handleResultClicked = function($event) {\n    if ($event.which === 1 && !$event.ctrlKey && !$event.metaKey) {\n      $scope.hideResults();\n    }\n  };\n}])\n\n\n.controller('Error404SearchCtrl', ['$scope', '$location', 'docsSearch',\n        function($scope, $location, docsSearch) {\n  docsSearch($location.path().split(/[/.:]/).pop()).then(function(results) {\n    $scope.results = {};\n    angular.forEach(results, function(result) {\n      var area = $scope.results[result.area] || [];\n      area.push(result);\n      $scope.results[result.area] = area;\n    });\n  });\n}])\n\n\n.provider('docsSearch', function() {\n\n  // This version of the service builds the index in the current thread,\n  // which blocks rendering and other browser activities.\n  // It should only be used where the browser does not support WebWorkers\n  function localSearchFactory($http, $timeout, NG_PAGES) {\n\n    if (window.console && window.console.log) {\n      window.console.log('Using Local Search Index');\n    }\n\n    // Create the lunr index\n    var index = lunr(/** @this */ function() {\n      this.ref('path');\n      this.field('titleWords', {boost: 50});\n      this.field('members', { boost: 40});\n      this.field('keywords', { boost : 20 });\n    });\n\n    // Delay building the index by loading the data asynchronously\n    var indexReadyPromise = $http.get('js/search-data.json').then(function(response) {\n      var searchData = response.data;\n      // Delay building the index for 500ms to allow the page to render\n      return $timeout(function() {\n        // load the page data into the index\n        angular.forEach(searchData, function(page) {\n          index.add(page);\n        });\n      }, 500);\n    });\n\n    // The actual service is a function that takes a query string and\n    // returns a promise to the search results\n    // (In this case we just resolve the promise immediately as it is not\n    // inherently an async process)\n    return function(q) {\n      return indexReadyPromise.then(function() {\n        var hits = index.search(q);\n        var results = [];\n        angular.forEach(hits, function(hit) {\n          results.push(NG_PAGES[hit.ref]);\n        });\n        return results;\n      });\n    };\n  }\n  localSearchFactory.$inject = ['$http', '$timeout', 'NG_PAGES'];\n\n  // This version of the service builds the index in a WebWorker,\n  // which does not block rendering and other browser activities.\n  // It should only be used where the browser does support WebWorkers\n  function webWorkerSearchFactory($q, $rootScope, NG_PAGES) {\n\n    if (window.console && window.console.log) {\n      window.console.log('Using WebWorker Search Index');\n    }\n\n    var searchIndex = $q.defer();\n    var results;\n\n    var worker = new window.Worker('js/search-worker.js');\n\n    // The worker will send us a message in two situations:\n    // - when the index has been built, ready to run a query\n    // - when it has completed a search query and the results are available\n    worker.onmessage = function(oEvent) {\n      $rootScope.$apply(function() {\n\n        switch (oEvent.data.e) {\n          case 'index-ready':\n            searchIndex.resolve();\n            break;\n          case 'query-ready':\n            var pages = oEvent.data.d.map(function(path) {\n              return NG_PAGES[path];\n            });\n            results.resolve(pages);\n            break;\n        }\n      });\n    };\n\n    // The actual service is a function that takes a query string and\n    // returns a promise to the search results\n    return function(q) {\n\n      // We only run the query once the index is ready\n      return searchIndex.promise.then(function() {\n\n        results = $q.defer();\n        worker.postMessage({ q: q });\n        return results.promise;\n      });\n    };\n  }\n  webWorkerSearchFactory.$inject = ['$q', '$rootScope', 'NG_PAGES'];\n\n  return {\n    $get: window.Worker ? webWorkerSearchFactory : localSearchFactory\n  };\n})\n\n.directive('focused', function($timeout) {\n  return function(scope, element, attrs) {\n    element[0].focus();\n    element.on('focus', function() {\n      scope.$apply(attrs.focused + '=true');\n    });\n    element.on('blur', function() {\n      // have to use $timeout, so that we close the drop-down after the user clicks,\n      // otherwise when the user clicks we process the closing before we process the click.\n      $timeout(function() {\n        scope.$eval(attrs.focused + '=false');\n      });\n    });\n    scope.$eval(attrs.focused + '=true');\n  };\n})\n\n.directive('docsSearchInput', ['$document', function($document) {\n  return function(scope, element, attrs) {\n    var ESCAPE_KEY_KEYCODE = 27,\n        FORWARD_SLASH_KEYCODE = 191;\n    angular.element($document[0].body).on('keydown', function(event) {\n      var input = element[0];\n      if (event.keyCode === FORWARD_SLASH_KEYCODE && $document[0].activeElement !== input) {\n        event.stopPropagation();\n        event.preventDefault();\n        input.focus();\n      }\n    });\n\n    element.on('keydown', function(event) {\n      if (event.keyCode === ESCAPE_KEY_KEYCODE) {\n        event.stopPropagation();\n        event.preventDefault();\n        scope.$apply(function() {\n          scope.hideResults();\n        });\n      }\n    });\n  };\n}]);\n","'use strict';\n\nangular.module('tutorials', [])\n\n.directive('docTutorialNav', function() {\n  var pages = [\n    '',\n    'step_00', 'step_01', 'step_02', 'step_03', 'step_04',\n    'step_05', 'step_06', 'step_07', 'step_08', 'step_09',\n    'step_10', 'step_11', 'step_12', 'step_13', 'step_14',\n    'the_end'\n  ];\n  return {\n    scope: {},\n    template:\n      '<a ng-href=\"tutorial/{{prev}}\"><li class=\"btn btn-primary\"><i class=\"glyphicon glyphicon-step-backward\"></i> Previous</li></a>\\n' +\n      '<a ng-href=\"http://angular.github.io/angular-phonecat/step-{{seq}}/app\"><li class=\"btn btn-primary\"><i class=\"glyphicon glyphicon-play\"></i> Live Demo</li></a>\\n' +\n      '<a ng-href=\"https://github.com/angular/angular-phonecat/compare/step-{{diffLo}}...step-{{diffHi}}\"><li class=\"btn btn-primary\"><i class=\"glyphicon glyphicon-search\"></i> Code Diff</li></a>\\n' +\n      '<a ng-href=\"tutorial/{{next}}\"><li class=\"btn btn-primary\">Next <i class=\"glyphicon glyphicon-step-forward\"></i></li></a>',\n    link: function(scope, element, attrs) {\n      var seq = 1 * attrs.docTutorialNav;\n      scope.seq = seq;\n      scope.prev = pages[seq];\n      scope.next = pages[2 + seq];\n      scope.diffLo = seq ? (seq - 1) : '0~1';\n      scope.diffHi = seq;\n\n      element.addClass('btn-group');\n      element.addClass('tutorial-nav');\n    }\n  };\n})\n\n\n.directive('docTutorialReset', function() {\n  return {\n    scope: {\n      'step': '@docTutorialReset'\n    },\n    template:\n      '<p><button class=\"btn\" ng-click=\"show=!show\">Workspace Reset Instructions  ➤</button></p>\\n' +\n      '<div class=\"alert alert-info\" ng-show=\"show\">\\n' +\n      '  <p>Reset the workspace to step {{step}}.</p>' +\n      '  <p><pre>git checkout -f step-{{step}}</pre></p>\\n' +\n      '  <p>Refresh your browser or check out this step online: ' +\n          '<a href=\"http://angular.github.io/angular-phonecat/step-{{step}}/app\">Step {{step}} Live Demo</a>.</p>\\n' +\n      '</div>\\n' +\n      '<p>The most important changes are listed below. You can see the full diff on ' +\n        '<a ng-href=\"https://github.com/angular/angular-phonecat/compare/step-{{step ? (step - 1): \\'0~1\\'}}...step-{{step}}\" title=\"See diff on Github\">GitHub</a>.\\n' +\n      '</p>'\n  };\n});\n","'use strict';\n/* global console */\n\nangular.module('versions', ['currentVersionData', 'allVersionsData'])\n\n.directive('versionPicker', function() {\n  return {\n    restrict: 'E',\n    scope: true,\n    controllerAs: '$ctrl',\n    controller: ['$location', '$window', 'CURRENT_NG_VERSION', 'ALL_NG_VERSIONS',\n            /** @this VersionPickerController */\n            function VersionPickerController($location, $window, CURRENT_NG_VERSION, ALL_NG_VERSIONS) {\n\n      var versionStr = CURRENT_NG_VERSION.version;\n\n      if (CURRENT_NG_VERSION.isSnapshot) {\n        versionStr = CURRENT_NG_VERSION.distTag === 'latest' ? 'snapshot-stable' : 'snapshot';\n      }\n\n      this.versions  = ALL_NG_VERSIONS;\n      this.selectedVersion = find(ALL_NG_VERSIONS, function(value) {\n        return value.version.version === versionStr;\n      });\n\n      this.jumpToDocsVersion = function(value) {\n        var currentPagePath = $location.path().replace(/\\/$/, '');\n        $window.location = value.docsUrl + currentPagePath;\n      };\n    }],\n    template:\n      '<div class=\"picker version-picker\">' +\n      '  <select ng-options=\"v as v.label group by v.group for v in $ctrl.versions\"' +\n      '          ng-model=\"$ctrl.selectedVersion\"' +\n      '          ng-change=\"$ctrl.jumpToDocsVersion($ctrl.selectedVersion)\"' +\n      '          class=\"docs-version-jump\">' +\n      '  </select>' +\n      '</div>'\n  };\n\n  function find(collection, matcherFn) {\n    for (var i = 0, ii = collection.length; i < ii; ++i) {\n      if (matcherFn(collection[i])) {\n        return collection[i];\n      }\n    }\n  }\n});\n"]}