[
  {
    "path": ".gitignore",
    "content": "logs/*\n!.gitkeep\nnode_modules/\napp/lib/\ntmp\n.DS_Store\n.idea"
  },
  {
    "path": ".jshintrc",
    "content": "{\n  \"strict\": \"global\",\n  \"globals\": {\n    // AngularJS\n    \"angular\": false,\n\n    // AngularJS mocks\n    \"module\": false,\n    \"inject\": false,\n\n    // Jasmine\n    \"jasmine\": false,\n    \"describe\": false,\n    \"beforeEach\": false,\n    \"afterEach\": false,\n    \"it\": false,\n    \"expect\": false,\n\n    // Protractor\n    \"browser\": false,\n    \"element\": false,\n    \"by\": false\n  }\n}\n"
  },
  {
    "path": ".travis.yml",
    "content": "dist: trusty\n\nlanguage: node_js\nnode_js:\n  - 10\n\naddons:\n  chrome: stable\n\ncache:\n  directories:\n    - \"$HOME/.npm\"\n\ninstall:\n  - npm install\n\nscript:\n  - npm run test-single-run -- --browsers ChromeHeadless\n  - (npm start > /dev/null &) && npm run protractor -- --capabilities.chromeOptions.args headless\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License\n\nCopyright (c) 2010-2016 Google, Inc. http://angularjs.org\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n"
  },
  {
    "path": "README.md",
    "content": "# `angular-seed` — the seed for AngularJS apps\n\nThis project is an application skeleton for a typical [AngularJS][angularjs] web app. You can use it\nto quickly bootstrap your angular webapp projects and dev environment for these projects.\n\nThe seed contains a sample AngularJS application and is preconfigured to install the AngularJS\nframework and a bunch of development and testing tools for instant web development gratification.\n\nThe seed app doesn't do much, just shows how to wire two controllers and views together.\n\n\n## Getting Started\n\nTo get you started you can simply clone the `angular-seed` repository and install the dependencies:\n\n### Prerequisites\n\nYou need git to clone the `angular-seed` repository. You can get git from [here][git].\n\nWe also use a number of Node.js tools to initialize and test `angular-seed`. You must have Node.js\nand its package manager (npm) installed. You can get them from [here][node].\n\n### Clone `angular-seed`\n\nClone the `angular-seed` repository using git:\n\n```\ngit clone https://github.com/angular/angular-seed.git\ncd angular-seed\n```\n\nIf you just want to start a new project without the `angular-seed` commit history then you can do:\n\n```\ngit clone --depth=1 https://github.com/angular/angular-seed.git <your-project-name>\n```\n\nThe `depth=1` tells git to only pull down one commit worth of historical data.\n\n### Install Dependencies\n\nWe have two kinds of dependencies in this project: tools and AngularJS framework code. The tools\nhelp us manage and test the application.\n\n* We get the tools we depend upon and the AngularJS code via `npm`, the [Node package manager][npm].\n* In order to run the end-to-end tests, you will also need to have the\n  [Java Development Kit (JDK)][jdk] installed on your machine. Check out the section on\n  [end-to-end testing](#e2e-testing) for more info.\n\nWe have preconfigured `npm` to automatically copy the downloaded AngularJS files to `app/lib` so we\ncan simply do:\n\n```\nnpm install\n```\n\nBehind the scenes this will also call `npm run copy-libs`, which copies the AngularJS files and\nother front end dependencies. After that, you should find out that you have two new directories in\nyour project.\n\n* `node_modules` - contains the npm packages for the tools we need\n* `app/lib` - contains the AngularJS framework files and other front end dependencies\n\n*Note copying the AngularJS files from `node_modules` to `app/lib` makes it easier to serve the\nfiles by a web server.*\n\n### Run the Application\n\nWe have preconfigured the project with a simple development web server. The simplest way to start\nthis server is:\n\n```\nnpm start\n```\n\nNow browse to the app at [`localhost:8000/index.html`][local-app-url].\n\n\n## Directory Layout\n\n```\napp/                  --> all of the source files for the application\n  app.css               --> default stylesheet\n  core/                 --> all app specific modules\n    version/              --> version related components\n      version.js                 --> version module declaration and basic \"version\" value service\n      version_test.js            --> \"version\" value service tests\n      version-directive.js       --> custom directive that returns the current app version\n      version-directive_test.js  --> version directive tests\n      interpolate-filter.js      --> custom interpolation filter\n      interpolate-filter_test.js --> interpolate filter tests\n  view1/                --> the view1 view template and logic\n    view1.html            --> the partial template\n    view1.js              --> the controller logic\n    view1_test.js         --> tests of the controller\n  view2/                --> the view2 view template and logic\n    view2.html            --> the partial template\n    view2.js              --> the controller logic\n    view2_test.js         --> tests of the controller\n  app.js                --> main application module\n  index.html            --> app layout file (the main html template file of the app)\n  index-async.html      --> just like index.html, but loads js files asynchronously\ne2e-tests/            --> end-to-end tests\n  protractor-conf.js    --> Protractor config file\n  scenarios.js          --> end-to-end scenarios to be run by Protractor\nkarma.conf.js         --> config file for running unit tests with Karma\npackage.json          --> Node.js specific metadata, including development tools dependencies\npackage-lock.json     --> Npm specific metadata, including versions of installed development tools dependencies\n```\n\n\n## Testing\n\nThere are two kinds of tests in the `angular-seed` application: Unit tests and end-to-end tests.\n\n### Running Unit Tests\n\nThe `angular-seed` app comes preconfigured with unit tests. These are written in [Jasmine][jasmine],\nwhich we run with the [Karma][karma] test runner. We provide a Karma configuration file to run them.\n\n* The configuration is found at `karma.conf.js`.\n* The unit tests are found next to the code they are testing and have a `.spec.js` suffix (e.g.\n  `view1.spec.js`).\n\nThe easiest way to run the unit tests is to use the supplied npm script:\n\n```\nnpm test\n```\n\nThis script will start the Karma test runner to execute the unit tests. Moreover, Karma will start\nwatching the source and test files for changes and then re-run the tests whenever any of them\nchanges.\nThis is the recommended strategy; if your unit tests are being run every time you save a file then\nyou receive instant feedback on any changes that break the expected code functionality.\n\nYou can also ask Karma to do a single run of the tests and then exit. This is useful if you want to\ncheck that a particular version of the code is operating as expected. The project contains a\npredefined script to do this:\n\n```\nnpm run test-single-run\n```\n\n\n<a name=\"e2e-testing\"></a>\n### Running End-to-End Tests\n\nThe `angular-seed` app comes with end-to-end tests, again written in [Jasmine][jasmine]. These tests\nare run with the [Protractor][protractor] End-to-End test runner. It uses native events and has\nspecial features for AngularJS applications.\n\n* The configuration is found at `e2e-tests/protractor-conf.js`.\n* The end-to-end tests are found in `e2e-tests/scenarios.js`.\n\nProtractor simulates interaction with our web app and verifies that the application responds\ncorrectly. Therefore, our web server needs to be serving up the application, so that Protractor can\ninteract with it.\n\n**Before starting Protractor, open a separate terminal window and run:**\n\n```\nnpm start\n```\n\nIn addition, since Protractor is built upon WebDriver, we need to ensure that it is installed and\nup-to-date. The `angular-seed` project is configured to do this automatically before running the\nend-to-end tests, so you don't need to worry about it. If you want to manually update the WebDriver,\nyou can run:\n\n```\nnpm run update-webdriver\n```\n\nOnce you have ensured that the development web server hosting our application is up and running, you\ncan run the end-to-end tests using the supplied npm script:\n\n```\nnpm run protractor\n```\n\nThis script will execute the end-to-end tests against the application being hosted on the\ndevelopment server.\n\n**Note:**\nUnder the hood, Protractor uses the [Selenium Standalone Server][selenium], which in turn requires\nthe [Java Development Kit (JDK)][jdk] to be installed on your local machine. Check this by running\n`java -version` from the command line.\n\nIf JDK is not already installed, you can download it [here][jdk-download].\n\n\n## Updating AngularJS and other dependencies\n\nSince the AngularJS framework library code and tools are acquired through package managers (e.g.\nnpm) you can use these tools to easily update the dependencies. Simply run the preconfigured script:\n\n```\nnpm run update-deps\n```\n\nThis will call `npm update` and `npm run copy-libs`, which in turn will find and install the latest\nversions that match the version ranges specified in the `package.json` file.\n\nIf you want to update a dependency to a version newer than what the specificed range would permit,\nyou can change the version range in `package.json` and then run `npm run update-deps` as usual.\n\n\n## Loading AngularJS Asynchronously\n\nThe `angular-seed` project supports loading the framework and application scripts asynchronously.\nThe special `index-async.html` is designed to support this style of loading. For it to work you must\ninject a piece of AngularJS JavaScript into the HTML page. The project has a predefined script to help\ndo this:\n\n```\nnpm run update-index-async\n```\n\nThis will copy the contents of the `angular-loader.js` library file into the `index-async.html`\npage. You can run this every time you update the version of AngularJS that you are using.\n\n\n## Serving the Application Files\n\nWhile AngularJS is client-side-only technology and it is possible to create AngularJS web apps that\ndo not require a backend server at all, we recommend serving the project files using a local\nweb server during development to avoid issues with security restrictions (sandbox) in browsers. The\nsandbox implementation varies between browsers, but quite often prevents things like cookies, XHR,\netc to function properly when an HTML page is opened via the `file://` scheme instead of `http://`.\n\n### Running the App during Development\n\nThe `angular-seed` project comes preconfigured with a local development web server. It is a Node.js\ntool called [http-server][http-server]. You can start this web server with `npm start`, but you may\nchoose to install the tool globally:\n\n```\nsudo npm install -g http-server\n```\n\nThen you can start your own development web server to serve static files from any folder by running:\n\n```\nhttp-server -a localhost -p 8000\n```\n\nAlternatively, you can choose to configure your own web server, such as Apache or Nginx. Just\nconfigure your server to serve the files under the `app/` directory.\n\n### Running the App in Production\n\nThis really depends on how complex your app is and the overall infrastructure of your system, but\nthe general rule is that all you need in production are the files under the `app/` directory.\nEverything else should be omitted.\n\nAngularJS apps are really just a bunch of static HTML, CSS and JavaScript files that need to be\nhosted somewhere they can be accessed by browsers.\n\nIf your AngularJS app is talking to the backend server via XHR or other means, you need to figure\nout what is the best way to host the static files to comply with the same origin policy if\napplicable. Usually this is done by hosting the files by the backend server or through\nreverse-proxying the backend server(s) and web server(s).\n\n\n## Continuous Integration\n\n### Travis CI\n\n[Travis CI][travis] is a continuous integration service, which can monitor GitHub for new commits to\nyour repository and execute scripts such as building the app or running tests. The `angular-seed`\nproject contains a Travis configuration file, `.travis.yml`, which will cause Travis to run your\ntests when you push to GitHub.\n\nYou will need to enable the integration between Travis and GitHub. See the\n[Travis website][travis-docs] for instructions on how to do this.\n\n\n## Contact\n\nFor more information on AngularJS please check out [angularjs.org][angularjs].\n\n\n[angularjs]: https://angularjs.org/\n[git]: https://git-scm.com/\n[http-server]: https://github.com/indexzero/http-server\n[jasmine]: https://jasmine.github.io/\n[jdk]: https://wikipedia.org/wiki/Java_Development_Kit\n[jdk-download]: http://www.oracle.com/technetwork/java/javase/downloads\n[karma]: https://karma-runner.github.io/\n[local-app-url]: http://localhost:8000/index.html\n[node]: https://nodejs.org/\n[npm]: https://www.npmjs.org/\n[protractor]: http://www.protractortest.org/\n[selenium]: http://docs.seleniumhq.org/\n[travis]: https://travis-ci.org/\n[travis-docs]: https://docs.travis-ci.com/user/getting-started\n"
  },
  {
    "path": "app/app.css",
    "content": "/* app css stylesheet */\n\n.menu {\n  list-style: none;\n  border-bottom: 0.1em solid black;\n  margin-bottom: 2em;\n  padding: 0 0 0.5em;\n}\n\n.menu:before {\n  content: \"[\";\n}\n\n.menu:after {\n  content: \"]\";\n}\n\n.menu > li {\n  display: inline;\n}\n\n.menu > li + li:before {\n  content: \"|\";\n  padding-right: 0.3em;\n}\n"
  },
  {
    "path": "app/app.js",
    "content": "'use strict';\n\n// Declare app level module which depends on views, and core components\nangular.module('myApp', [\n  'ngRoute',\n  'myApp.view1',\n  'myApp.view2',\n  'myApp.version'\n]).\nconfig(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {\n  $locationProvider.hashPrefix('!');\n\n  $routeProvider.otherwise({redirectTo: '/view1'});\n}]);\n"
  },
  {
    "path": "app/core/version/interpolate-filter.js",
    "content": "'use strict';\n\nangular.module('myApp.version.interpolate-filter', [])\n\n.filter('interpolate', ['version', function(version) {\n  return function(text) {\n    return String(text).replace(/\\%VERSION\\%/mg, version);\n  };\n}]);\n"
  },
  {
    "path": "app/core/version/interpolate-filter.spec.js",
    "content": "'use strict';\n\ndescribe('myApp.version module', function() {\n  beforeEach(module('myApp.version'));\n\n  describe('interpolate filter', function() {\n    beforeEach(module(function($provide) {\n      $provide.value('version', 'TEST_VER');\n    }));\n\n    it('should replace VERSION', inject(function(interpolateFilter) {\n      expect(interpolateFilter('before %VERSION% after')).toEqual('before TEST_VER after');\n    }));\n  });\n});\n"
  },
  {
    "path": "app/core/version/version-directive.js",
    "content": "'use strict';\n\nangular.module('myApp.version.version-directive', [])\n\n.directive('appVersion', ['version', function(version) {\n  return function(scope, elm, attrs) {\n    elm.text(version);\n  };\n}]);\n"
  },
  {
    "path": "app/core/version/version-directive.spec.js",
    "content": "'use strict';\n\ndescribe('myApp.version module', function() {\n  beforeEach(module('myApp.version'));\n\n  describe('app-version directive', function() {\n    it('should print current version', function() {\n      module(function($provide) {\n        $provide.value('version', 'TEST_VER');\n      });\n      inject(function($compile, $rootScope) {\n        var element = $compile('<span app-version></span>')($rootScope);\n        expect(element.text()).toEqual('TEST_VER');\n      });\n    });\n  });\n});\n"
  },
  {
    "path": "app/core/version/version.js",
    "content": "'use strict';\n\nangular.module('myApp.version', [\n  'myApp.version.interpolate-filter',\n  'myApp.version.version-directive'\n])\n\n.value('version', '0.1');\n"
  },
  {
    "path": "app/core/version/version.spec.js",
    "content": "'use strict';\n\ndescribe('myApp.version module', function() {\n  beforeEach(module('myApp.version'));\n\n  describe('version service', function() {\n    it('should return current version', inject(function(version) {\n      expect(version).toEqual('0.1');\n    }));\n  });\n});\n"
  },
  {
    "path": "app/index-async.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <link rel=\"stylesheet\" href=\"lib/html5-boilerplate/dist/css/normalize.css\">\n  <link rel=\"stylesheet\" href=\"lib/html5-boilerplate/dist/css/main.css\">\n  <style>\n    [ng-cloak] {\n      display: none;\n    }\n  </style>\n  <script src=\"lib/html5-boilerplate/dist/js/vendor/modernizr-2.8.3.min.js\"></script>\n  <script>\n    // include AngularJS loader, which allows the files to load in any order\n    //@@NG_LOADER_START@@\n    // You need to run `npm run update-index-async` to inject the AngularJS async code here\n    //@@NG_LOADER_END@@\n\n    // include a third-party async loader library\n    /*!\n     * $script.js v1.3\n     * https://github.com/ded/script.js\n     * Copyright: @ded & @fat - Dustin Diaz, Jacob Thornton 2011\n     * Follow our software http://twitter.com/dedfat\n     * License: MIT\n     */\n    !function(a,b,c){function t(a,c){var e=b.createElement(\"script\"),f=j;e.onload=e.onerror=e[o]=function(){e[m]&&!/^c|loade/.test(e[m])||f||(e.onload=e[o]=null,f=1,c())},e.async=1,e.src=a,d.insertBefore(e,d.firstChild)}function q(a,b){p(a,function(a){return!b(a)})}var d=b.getElementsByTagName(\"head\")[0],e={},f={},g={},h={},i=\"string\",j=!1,k=\"push\",l=\"DOMContentLoaded\",m=\"readyState\",n=\"addEventListener\",o=\"onreadystatechange\",p=function(a,b){for(var c=0,d=a.length;c<d;++c)if(!b(a[c]))return j;return 1};!b[m]&&b[n]&&(b[n](l,function r(){b.removeEventListener(l,r,j),b[m]=\"complete\"},j),b[m]=\"loading\");var s=function(a,b,d){function o(){if(!--m){e[l]=1,j&&j();for(var a in g)p(a.split(\"|\"),n)&&!q(g[a],n)&&(g[a]=[])}}function n(a){return a.call?a():e[a]}a=a[k]?a:[a];var i=b&&b.call,j=i?b:d,l=i?a.join(\"\"):b,m=a.length;c(function(){q(a,function(a){h[a]?(l&&(f[l]=1),o()):(h[a]=1,l&&(f[l]=1),t(s.path?s.path+a+\".js\":a,o))})},0);return s};s.get=t,s.ready=function(a,b,c){a=a[k]?a:[a];var d=[];!q(a,function(a){e[a]||d[k](a)})&&p(a,function(a){return e[a]})?b():!function(a){g[a]=g[a]||[],g[a][k](b),c&&c(d)}(a.join(\"|\"));return s};var u=a.$script;s.noConflict=function(){a.$script=u;return this},typeof module!=\"undefined\"&&module.exports?module.exports=s:a.$script=s}(this,document,setTimeout)\n\n    // load all of the dependencies asynchronously.\n    $script([\n      'lib/angular/angular.js',\n      'lib/angular-route/angular-route.js',\n      'app.js',\n      'view1/view1.js',\n      'view2/view2.js',\n      'core/version/version.js',\n      'core/version/version-directive.js',\n      'core/version/interpolate-filter.js'\n    ], function() {\n      // when all is done, execute bootstrap AngularJS application\n      angular.bootstrap(document, ['myApp']);\n    });\n  </script>\n  <title>My AngularJS App</title>\n  <link rel=\"stylesheet\" href=\"app.css\">\n</head>\n<body ng-cloak>\n  <ul class=\"menu\">\n    <li><a href=\"#!/view1\">view1</a></li>\n    <li><a href=\"#!/view2\">view2</a></li>\n  </ul>\n\n  <div ng-view></div>\n\n  <div>AngularJS seed app: v<span app-version></span></div>\n\n</body>\n</html>\n"
  },
  {
    "path": "app/index.html",
    "content": "<!DOCTYPE html>\n<!--[if lt IE 7]>      <html lang=\"en\" ng-app=\"myApp\" class=\"no-js lt-ie9 lt-ie8 lt-ie7\"> <![endif]-->\n<!--[if IE 7]>         <html lang=\"en\" ng-app=\"myApp\" class=\"no-js lt-ie9 lt-ie8\"> <![endif]-->\n<!--[if IE 8]>         <html lang=\"en\" ng-app=\"myApp\" class=\"no-js lt-ie9\"> <![endif]-->\n<!--[if gt IE 8]><!--> <html lang=\"en\" ng-app=\"myApp\" class=\"no-js\"> <!--<![endif]-->\n<head>\n  <meta charset=\"utf-8\">\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  <title>My AngularJS App</title>\n  <meta name=\"description\" content=\"\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n  <link rel=\"stylesheet\" href=\"lib/html5-boilerplate/dist/css/normalize.css\">\n  <link rel=\"stylesheet\" href=\"lib/html5-boilerplate/dist/css/main.css\">\n  <link rel=\"stylesheet\" href=\"app.css\">\n  <script src=\"lib/html5-boilerplate/dist/js/vendor/modernizr-2.8.3.min.js\"></script>\n</head>\n<body>\n  <ul class=\"menu\">\n    <li><a href=\"#!/view1\">view1</a></li>\n    <li><a href=\"#!/view2\">view2</a></li>\n  </ul>\n\n  <!--[if lt IE 7]>\n      <p class=\"browsehappy\">You are using an <strong>outdated</strong> browser. Please <a href=\"http://browsehappy.com/\">upgrade your browser</a> to improve your experience.</p>\n  <![endif]-->\n\n  <div ng-view></div>\n\n  <div>AngularJS seed app: v<span app-version></span></div>\n\n  <!-- In production use:\n  <script src=\"//ajax.googleapis.com/ajax/libs/angularjs/x.x.x/angular.min.js\"></script>\n  -->\n  <script src=\"lib/angular/angular.js\"></script>\n  <script src=\"lib/angular-route/angular-route.js\"></script>\n  <script src=\"app.js\"></script>\n  <script src=\"view1/view1.js\"></script>\n  <script src=\"view2/view2.js\"></script>\n  <script src=\"core/version/version.js\"></script>\n  <script src=\"core/version/version-directive.js\"></script>\n  <script src=\"core/version/interpolate-filter.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "app/view1/view1.html",
    "content": "<p>This is the partial for view 1.</p>\n"
  },
  {
    "path": "app/view1/view1.js",
    "content": "'use strict';\n\nangular.module('myApp.view1', ['ngRoute'])\n\n.config(['$routeProvider', function($routeProvider) {\n  $routeProvider.when('/view1', {\n    templateUrl: 'view1/view1.html',\n    controller: 'View1Ctrl'\n  });\n}])\n\n.controller('View1Ctrl', [function() {\n\n}]);"
  },
  {
    "path": "app/view1/view1.spec.js",
    "content": "'use strict';\n\ndescribe('myApp.view1 module', function() {\n\n  beforeEach(module('myApp.view1'));\n\n  describe('view1 controller', function(){\n\n    it('should ....', inject(function($controller) {\n      //spec body\n      var view1Ctrl = $controller('View1Ctrl');\n      expect(view1Ctrl).toBeDefined();\n    }));\n\n  });\n});"
  },
  {
    "path": "app/view2/view2.html",
    "content": "<p>This is the partial for view 2.</p>\n<p>\n  Showing of 'interpolate' filter:\n  {{ 'Current version is v%VERSION%.' | interpolate }}\n</p>\n"
  },
  {
    "path": "app/view2/view2.js",
    "content": "'use strict';\n\nangular.module('myApp.view2', ['ngRoute'])\n\n.config(['$routeProvider', function($routeProvider) {\n  $routeProvider.when('/view2', {\n    templateUrl: 'view2/view2.html',\n    controller: 'View2Ctrl'\n  });\n}])\n\n.controller('View2Ctrl', [function() {\n\n}]);"
  },
  {
    "path": "app/view2/view2.spec.js",
    "content": "'use strict';\n\ndescribe('myApp.view2 module', function() {\n\n  beforeEach(module('myApp.view2'));\n\n  describe('view2 controller', function(){\n\n    it('should ....', inject(function($controller) {\n      //spec body\n      var view2Ctrl = $controller('View2Ctrl');\n      expect(view2Ctrl).toBeDefined();\n    }));\n\n  });\n});"
  },
  {
    "path": "e2e-tests/protractor.conf.js",
    "content": "//jshint strict: false\nexports.config = {\n\n  allScriptsTimeout: 11000,\n\n  specs: [\n    '*.js'\n  ],\n\n  capabilities: {\n    browserName: 'chrome'\n  },\n\n  baseUrl: 'http://localhost:8000/',\n\n  framework: 'jasmine',\n\n  jasmineNodeOpts: {\n    defaultTimeoutInterval: 30000\n  }\n\n};\n"
  },
  {
    "path": "e2e-tests/scenarios.js",
    "content": "'use strict';\n\n/* https://github.com/angular/protractor/blob/master/docs/toc.md */\n\ndescribe('my app', function() {\n\n\n  it('should automatically redirect to /view1 when location hash/fragment is empty', function() {\n    browser.get('index.html');\n    expect(browser.getLocationAbsUrl()).toMatch(\"/view1\");\n  });\n\n\n  describe('view1', function() {\n\n    beforeEach(function() {\n      browser.get('index.html#!/view1');\n    });\n\n\n    it('should render view1 when user navigates to /view1', function() {\n      expect(element.all(by.css('[ng-view] p')).first().getText()).\n        toMatch(/partial for view 1/);\n    });\n\n  });\n\n\n  describe('view2', function() {\n\n    beforeEach(function() {\n      browser.get('index.html#!/view2');\n    });\n\n\n    it('should render view2 when user navigates to /view2', function() {\n      expect(element.all(by.css('[ng-view] p')).first().getText()).\n        toMatch(/partial for view 2/);\n    });\n\n  });\n});\n"
  },
  {
    "path": "karma.conf.js",
    "content": "//jshint strict: false\nmodule.exports = function(config) {\n  config.set({\n\n    basePath: './app',\n\n    files: [\n      'lib/angular/angular.js',\n      'lib/angular-route/angular-route.js',\n      '../node_modules/angular-mocks/angular-mocks.js',\n      'core/**/*.js',\n      'view*/**/*.js'\n    ],\n\n    autoWatch: true,\n\n    frameworks: ['jasmine'],\n\n    browsers: ['Chrome'],\n\n    plugins: [\n      'karma-chrome-launcher',\n      'karma-firefox-launcher',\n      'karma-jasmine'\n    ]\n\n  });\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"angular-seed\",\n  \"private\": true,\n  \"version\": \"0.0.0\",\n  \"description\": \"A starter project for AngularJS\",\n  \"repository\": \"https://github.com/angular/angular-seed\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"angular\": \"^1.7.5\",\n    \"angular-loader\": \"^1.7.5\",\n    \"angular-route\": \"^1.7.5\",\n    \"html5-boilerplate\": \"0.0.1\"\n  },\n  \"devDependencies\": {\n    \"angular-mocks\": \"^1.7.5\",\n    \"cpx\": \"^1.5.0\",\n    \"http-server\": \"^0.11.1\",\n    \"jasmine-core\": \"^3.3.0\",\n    \"karma\": \"^3.1.1\",\n    \"karma-chrome-launcher\": \"^2.2.0\",\n    \"karma-firefox-launcher\": \"^1.1.0\",\n    \"karma-jasmine\": \"^1.1.2\",\n    \"protractor\": \"^5.4.1\"\n  },\n  \"scripts\": {\n    \"postinstall\": \"npm run copy-libs\",\n    \"update-deps\": \"npm update\",\n    \"postupdate-deps\": \"npm run copy-libs\",\n    \"copy-libs\": \"cpx \\\"node_modules/{angular,angular-*,html5-boilerplate/dist}/**/*\\\" app/lib -C\",\n    \"prestart\": \"npm install\",\n    \"start\": \"http-server -a localhost -p 8000 -c-1 ./app\",\n    \"pretest\": \"npm install\",\n    \"test\": \"karma start karma.conf.js\",\n    \"test-single-run\": \"npm test -- --single-run\",\n    \"preupdate-webdriver\": \"npm install\",\n    \"//\": \"Do not install the Firefox driver to work around https://github.com/angular/webdriver-manager/issues/303.\",\n    \"update-webdriver\": \"webdriver-manager update --gecko false\",\n    \"preprotractor\": \"npm run update-webdriver\",\n    \"protractor\": \"protractor e2e-tests/protractor.conf.js\",\n    \"update-index-async\": \"node --eval \\\"var fs=require('fs'),indexFile='app/index-async.html',loaderFile='app/lib/angular-loader/angular-loader.min.js',loaderText=fs.readFileSync(loaderFile,'utf-8').split(/sourceMappingURL=angular-loader.min.js.map/).join('sourceMappingURL=lib/angular-loader/angular-loader.min.js.map'),indexText=fs.readFileSync(indexFile,'utf-8').split(/\\\\/\\\\/@@NG_LOADER_START@@[\\\\s\\\\S]*\\\\/\\\\/@@NG_LOADER_END@@/).join('//@@NG_LOADER_START@@\\\\n'+loaderText+'    //@@NG_LOADER_END@@');fs.writeFileSync(indexFile,indexText);\\\"\"\n  }\n}\n"
  }
]