vadimzgonnik 6 éve
commit
933ef5a88e

+ 3 - 0
.bowerrc

@@ -0,0 +1,3 @@
+{
+  "directory": "app/bower_components"
+}

+ 7 - 0
.gitignore

@@ -0,0 +1,7 @@
+logs/*
+!.gitkeep
+node_modules/
+bower_components/
+tmp
+.DS_Store
+.idea

+ 24 - 0
.jshintrc

@@ -0,0 +1,24 @@
+{
+  "strict": "global",
+  "globals": {
+    // Angular
+    "angular": false,
+
+    // Angular mocks
+    "module": false,
+    "inject": false,
+
+    // Jasmine
+    "jasmine": false,
+    "describe": false,
+    "beforeEach": false,
+    "afterEach": false,
+    "it": false,
+    "expect": false,
+
+    // Protractor
+    "browser": false,
+    "element": false,
+    "by": false
+  }
+}

+ 21 - 0
.travis.yml

@@ -0,0 +1,21 @@
+sudo: required
+dist: trusty
+
+language: node_js
+node_js:
+  - '4.5'
+
+install:
+  - export DISPLAY=:99.0
+  - sh -e /etc/init.d/xvfb start
+  - wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
+  - sudo sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
+  - sudo apt-get update -q
+  - sudo apt-get install -q google-chrome-stable
+
+before_script:
+  - npm install
+
+script:
+  - npm run test-single-run
+  - (npm start > /dev/null &) && (npm run protractor)

+ 22 - 0
LICENSE

@@ -0,0 +1,22 @@
+The MIT License
+
+Copyright (c) 2010-2016 Google, Inc. http://angularjs.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+

+ 295 - 0
README.md

@@ -0,0 +1,295 @@
+# `angular-seed` — the seed for AngularJS apps
+
+This project is an application skeleton for a typical [AngularJS][angularjs] web app. You can use it
+to quickly bootstrap your angular webapp projects and dev environment for these projects.
+
+The seed contains a sample AngularJS application and is preconfigured to install the Angular
+framework and a bunch of development and testing tools for instant web development gratification.
+
+The seed app doesn't do much, just shows how to wire two controllers and views together.
+
+
+## Getting Started
+
+To get you started you can simply clone the `angular-seed` repository and install the dependencies:
+
+### Prerequisites
+
+You need git to clone the `angular-seed` repository. You can get git from [here][git].
+
+We also use a number of Node.js tools to initialize and test `angular-seed`. You must have Node.js
+and its package manager (npm) installed. You can get them from [here][node].
+
+### Clone `angular-seed`
+
+Clone the `angular-seed` repository using git:
+
+```
+git clone https://github.com/angular/angular-seed.git
+cd angular-seed
+```
+
+If you just want to start a new project without the `angular-seed` commit history then you can do:
+
+```
+git clone --depth=1 https://github.com/angular/angular-seed.git <your-project-name>
+```
+
+The `depth=1` tells git to only pull down one commit worth of historical data.
+
+### Install Dependencies
+
+We have two kinds of dependencies in this project: tools and Angular framework code. The tools help
+us manage and test the application.
+
+* We get the tools we depend upon via `npm`, the [Node package manager][npm].
+* We get the Angular code via `bower`, a [client-side code package manager][bower].
+* In order to run the end-to-end tests, you will also need to have the
+  [Java Development Kit (JDK)][jdk] installed on your machine. Check out the section on
+  [end-to-end testing](#e2e-testing) for more info.
+
+We have preconfigured `npm` to automatically run `bower` so we can simply do:
+
+```
+npm install
+```
+
+Behind the scenes this will also call `bower install`. After that, you should find out that you have
+two new folders in your project.
+
+* `node_modules` - contains the npm packages for the tools we need
+* `app/bower_components` - contains the Angular framework files
+
+*Note that the `bower_components` folder would normally be installed in the root folder but
+`angular-seed` changes this location through the `.bowerrc` file. Putting it in the `app` folder
+makes it easier to serve the files by a web server.*
+
+### Run the Application
+
+We have preconfigured the project with a simple development web server. The simplest way to start
+this server is:
+
+```
+npm start
+```
+
+Now browse to the app at [`localhost:8000/index.html`][local-app-url].
+
+
+## Directory Layout
+
+```
+app/                    --> all of the source files for the application
+  app.css               --> default stylesheet
+  components/           --> all app specific modules
+    version/              --> version related components
+      version.js                 --> version module declaration and basic "version" value service
+      version_test.js            --> "version" value service tests
+      version-directive.js       --> custom directive that returns the current app version
+      version-directive_test.js  --> version directive tests
+      interpolate-filter.js      --> custom interpolation filter
+      interpolate-filter_test.js --> interpolate filter tests
+  view1/                --> the view1 view template and logic
+    view1.html            --> the partial template
+    view1.js              --> the controller logic
+    view1_test.js         --> tests of the controller
+  view2/                --> the view2 view template and logic
+    view2.html            --> the partial template
+    view2.js              --> the controller logic
+    view2_test.js         --> tests of the controller
+  app.js                --> main application module
+  index.html            --> app layout file (the main html template file of the app)
+  index-async.html      --> just like index.html, but loads js files asynchronously
+karma.conf.js         --> config file for running unit tests with Karma
+e2e-tests/            --> end-to-end tests
+  protractor-conf.js    --> Protractor config file
+  scenarios.js          --> end-to-end scenarios to be run by Protractor
+```
+
+
+## Testing
+
+There are two kinds of tests in the `angular-seed` application: Unit tests and end-to-end tests.
+
+### Running Unit Tests
+
+The `angular-seed` app comes preconfigured with unit tests. These are written in [Jasmine][jasmine],
+which we run with the [Karma][karma] test runner. We provide a Karma configuration file to run them.
+
+* The configuration is found at `karma.conf.js`.
+* The unit tests are found next to the code they are testing and have an `_test.js` suffix (e.g.
+  `view1_test.js`).
+
+The easiest way to run the unit tests is to use the supplied npm script:
+
+```
+npm test
+```
+
+This script will start the Karma test runner to execute the unit tests. Moreover, Karma will start
+watching the source and test files for changes and then re-run the tests whenever any of them
+changes.
+This is the recommended strategy; if your unit tests are being run every time you save a file then
+you receive instant feedback on any changes that break the expected code functionality.
+
+You can also ask Karma to do a single run of the tests and then exit. This is useful if you want to
+check that a particular version of the code is operating as expected. The project contains a
+predefined script to do this:
+
+```
+npm run test-single-run
+```
+
+
+<a name="e2e-testing"></a>
+### Running End-to-End Tests
+
+The `angular-seed` app comes with end-to-end tests, again written in [Jasmine][jasmine]. These tests
+are run with the [Protractor][protractor] End-to-End test runner. It uses native events and has
+special features for Angular applications.
+
+* The configuration is found at `e2e-tests/protractor-conf.js`.
+* The end-to-end tests are found in `e2e-tests/scenarios.js`.
+
+Protractor simulates interaction with our web app and verifies that the application responds
+correctly. Therefore, our web server needs to be serving up the application, so that Protractor can
+interact with it.
+
+**Before starting Protractor, open a separate terminal window and run:**
+
+```
+npm start
+```
+
+In addition, since Protractor is built upon WebDriver, we need to ensure that it is installed and
+up-to-date. The `angular-seed` project is configured to do this automatically before running the
+end-to-end tests, so you don't need to worry about it. If you want to manually update the WebDriver,
+you can run:
+
+```
+npm run update-webdriver
+```
+
+Once you have ensured that the development web server hosting our application is up and running, you
+can run the end-to-end tests using the supplied npm script:
+
+```
+npm run protractor
+```
+
+This script will execute the end-to-end tests against the application being hosted on the
+development server.
+
+**Note:**
+Under the hood, Protractor uses the [Selenium Standalone Server][selenium], which in turn requires
+the [Java Development Kit (JDK)][jdk] to be installed on your local machine. Check this by running
+`java -version` from the command line.
+
+If JDK is not already installed, you can download it [here][jdk-download].
+
+
+## Updating Angular
+
+Since the Angular framework library code and tools are acquired through package managers (npm and
+bower) you can use these tools to easily update the dependencies. Simply run the preconfigured
+script:
+
+```
+npm run update-deps
+```
+
+This will call `npm update` and `bower update`, which in turn will find and install the latest
+versions that match the version ranges specified in the `package.json` and `bower.json` files
+respectively.
+
+
+## Loading Angular Asynchronously
+
+The `angular-seed` project supports loading the framework and application scripts asynchronously.
+The special `index-async.html` is designed to support this style of loading. For it to work you must
+inject a piece of Angular JavaScript into the HTML page. The project has a predefined script to help
+do this:
+
+```
+npm run update-index-async
+```
+
+This will copy the contents of the `angular-loader.js` library file into the `index-async.html`
+page. You can run this every time you update the version of Angular that you are using.
+
+
+## Serving the Application Files
+
+While Angular is client-side-only technology and it is possible to create Angular web apps that
+do not require a backend server at all, we recommend serving the project files using a local
+web server during development to avoid issues with security restrictions (sandbox) in browsers. The
+sandbox implementation varies between browsers, but quite often prevents things like cookies, XHR,
+etc to function properly when an HTML page is opened via the `file://` scheme instead of `http://`.
+
+### Running the App during Development
+
+The `angular-seed` project comes preconfigured with a local development web server. It is a Node.js
+tool called [http-server][http-server]. You can start this web server with `npm start`, but you may
+choose to install the tool globally:
+
+```
+sudo npm install -g http-server
+```
+
+Then you can start your own development web server to serve static files from a folder by running:
+
+```
+http-server -a localhost -p 8000
+```
+
+Alternatively, you can choose to configure your own web server, such as Apache or Nginx. Just
+configure your server to serve the files under the `app/` directory.
+
+### Running the App in Production
+
+This really depends on how complex your app is and the overall infrastructure of your system, but
+the general rule is that all you need in production are the files under the `app/` directory.
+Everything else should be omitted.
+
+Angular apps are really just a bunch of static HTML, CSS and JavaScript files that need to be hosted
+somewhere they can be accessed by browsers.
+
+If your Angular app is talking to the backend server via XHR or other means, you need to figure out
+what is the best way to host the static files to comply with the same origin policy if applicable.
+Usually this is done by hosting the files by the backend server or through reverse-proxying the
+backend server(s) and web server(s).
+
+
+## Continuous Integration
+
+### Travis CI
+
+[Travis CI][travis] is a continuous integration service, which can monitor GitHub for new commits to
+your repository and execute scripts such as building the app or running tests. The `angular-seed`
+project contains a Travis configuration file, `.travis.yml`, which will cause Travis to run your
+tests when you push to GitHub.
+
+You will need to enable the integration between Travis and GitHub. See the
+[Travis website][travis-docs] for instructions on how to do this.
+
+
+## Contact
+
+For more information on AngularJS please check out [angularjs.org][angularjs].
+
+
+[angularjs]: https://angularjs.org/
+[bower]: http://bower.io/
+[git]: https://git-scm.com/
+[http-server]: https://github.com/indexzero/http-server
+[jasmine]: https://jasmine.github.io/
+[jdk]: https://wikipedia.org/wiki/Java_Development_Kit
+[jdk-download]: http://www.oracle.com/technetwork/java/javase/downloads
+[karma]: https://karma-runner.github.io/
+[local-app-url]: http://localhost:8000/index.html
+[node]: https://nodejs.org/
+[npm]: https://www.npmjs.org/
+[protractor]: http://www.protractortest.org/
+[selenium]: http://docs.seleniumhq.org/
+[travis]: https://travis-ci.org/
+[travis-docs]: https://docs.travis-ci.com/user/getting-started

+ 25 - 0
app/app.css

@@ -0,0 +1,25 @@
+/* app css stylesheet */
+
+.menu {
+  list-style: none;
+  border-bottom: 0.1em solid black;
+  margin-bottom: 2em;
+  padding: 0 0 0.5em;
+}
+
+.menu:before {
+  content: "[";
+}
+
+.menu:after {
+  content: "]";
+}
+
+.menu > li {
+  display: inline;
+}
+
+.menu > li + li:before {
+  content: "|";
+  padding-right: 0.3em;
+}

+ 14 - 0
app/app.js

@@ -0,0 +1,14 @@
+'use strict';
+
+// Declare app level module which depends on views, and components
+angular.module('myApp', [
+  'ngRoute',
+  'myApp.view1',
+  'myApp.view2',
+  'myApp.version'
+]).
+config(['$locationProvider', '$routeProvider', function($locationProvider, $routeProvider) {
+  $locationProvider.hashPrefix('!');
+
+  $routeProvider.otherwise({redirectTo: '/view1'});
+}]);

+ 9 - 0
app/components/version/interpolate-filter.js

@@ -0,0 +1,9 @@
+'use strict';
+
+angular.module('myApp.version.interpolate-filter', [])
+
+.filter('interpolate', ['version', function(version) {
+  return function(text) {
+    return String(text).replace(/\%VERSION\%/mg, version);
+  };
+}]);

+ 15 - 0
app/components/version/interpolate-filter_test.js

@@ -0,0 +1,15 @@
+'use strict';
+
+describe('myApp.version module', function() {
+  beforeEach(module('myApp.version'));
+
+  describe('interpolate filter', function() {
+    beforeEach(module(function($provide) {
+      $provide.value('version', 'TEST_VER');
+    }));
+
+    it('should replace VERSION', inject(function(interpolateFilter) {
+      expect(interpolateFilter('before %VERSION% after')).toEqual('before TEST_VER after');
+    }));
+  });
+});

+ 9 - 0
app/components/version/version-directive.js

@@ -0,0 +1,9 @@
+'use strict';
+
+angular.module('myApp.version.version-directive', [])
+
+.directive('appVersion', ['version', function(version) {
+  return function(scope, elm, attrs) {
+    elm.text(version);
+  };
+}]);

+ 17 - 0
app/components/version/version-directive_test.js

@@ -0,0 +1,17 @@
+'use strict';
+
+describe('myApp.version module', function() {
+  beforeEach(module('myApp.version'));
+
+  describe('app-version directive', function() {
+    it('should print current version', function() {
+      module(function($provide) {
+        $provide.value('version', 'TEST_VER');
+      });
+      inject(function($compile, $rootScope) {
+        var element = $compile('<span app-version></span>')($rootScope);
+        expect(element.text()).toEqual('TEST_VER');
+      });
+    });
+  });
+});

+ 8 - 0
app/components/version/version.js

@@ -0,0 +1,8 @@
+'use strict';
+
+angular.module('myApp.version', [
+  'myApp.version.interpolate-filter',
+  'myApp.version.version-directive'
+])
+
+.value('version', '0.1');

+ 11 - 0
app/components/version/version_test.js

@@ -0,0 +1,11 @@
+'use strict';
+
+describe('myApp.version module', function() {
+  beforeEach(module('myApp.version'));
+
+  describe('version service', function() {
+    it('should return current version', inject(function(version) {
+      expect(version).toEqual('0.1');
+    }));
+  });
+});

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 58 - 0
app/index-async.html


+ 46 - 0
app/index.html

@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<!--[if lt IE 7]>      <html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
+<!--[if IE 7]>         <html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8"> <![endif]-->
+<!--[if IE 8]>         <html lang="en" ng-app="myApp" class="no-js lt-ie9"> <![endif]-->
+<!--[if gt IE 8]><!--> <html lang="en" ng-app="myApp" class="no-js"> <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  <meta http-equiv="X-UA-Compatible" content="IE=edge">
+  <title>My AngularJS App</title>
+  <meta name="description" content="">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
+  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">
+
+  <link rel="stylesheet" href="app.css">
+  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
+  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous">\
+</head>
+<body>
+  <ul class="menu">
+    <li><a href="#!/view1">view1</a></li>
+    <li><a href="#!/view2">view2</a></li>
+  </ul>
+
+  <!--[if lt IE 7]>
+      <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>
+  <![endif]-->
+
+  <div ng-view></div>
+  <div>
+    <h1>hello git</h1>
+  </div>
+  <div>Angular seed app: v<span app-version></span></div>
+
+  <!-- In production use:
+  <script src="//ajax.googleapis.com/ajax/libs/angularjs/x.x.x/angular.min.js"></script>
+  -->
+  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
+  <script src="app.js"></script>
+  <script src="view1/view1.js"></script>
+  <script src="view2/view2.js"></script>
+  <script src="components/version/version.js"></script>
+  <script src="components/version/version-directive.js"></script>
+  <script src="components/version/interpolate-filter.js"></script>
+</body>
+</html>

+ 15 - 0
bower.json

@@ -0,0 +1,15 @@
+{
+  "name": "angular-seed",
+  "description": "A starter project for AngularJS",
+  "version": "0.0.0",
+  "homepage": "https://github.com/angular/angular-seed",
+  "license": "MIT",
+  "private": true,
+  "dependencies": {
+    "angular": "~1.5.0",
+    "angular-route": "~1.5.0",
+    "angular-loader": "~1.5.0",
+    "angular-mocks": "~1.5.0",
+    "html5-boilerplate": "^5.3.0"
+  }
+}

+ 22 - 0
e2e-tests/protractor.conf.js

@@ -0,0 +1,22 @@
+//jshint strict: false
+exports.config = {
+
+  allScriptsTimeout: 11000,
+
+  specs: [
+    '*.js'
+  ],
+
+  capabilities: {
+    'browserName': 'chrome'
+  },
+
+  baseUrl: 'http://localhost:8000/',
+
+  framework: 'jasmine',
+
+  jasmineNodeOpts: {
+    defaultTimeoutInterval: 30000
+  }
+
+};

+ 42 - 0
e2e-tests/scenarios.js

@@ -0,0 +1,42 @@
+'use strict';
+
+/* https://github.com/angular/protractor/blob/master/docs/toc.md */
+
+describe('my app', function() {
+
+
+  it('should automatically redirect to /view1 when location hash/fragment is empty', function() {
+    browser.get('index.html');
+    expect(browser.getLocationAbsUrl()).toMatch("/view1");
+  });
+
+
+  describe('view1', function() {
+
+    beforeEach(function() {
+      browser.get('index.html#!/view1');
+    });
+
+
+    it('should render view1 when user navigates to /view1', function() {
+      expect(element.all(by.css('[ng-view] p')).first().getText()).
+        toMatch(/partial for view 1/);
+    });
+
+  });
+
+
+  describe('view2', function() {
+
+    beforeEach(function() {
+      browser.get('index.html#!/view2');
+    });
+
+
+    it('should render view2 when user navigates to /view2', function() {
+      expect(element.all(by.css('[ng-view] p')).first().getText()).
+        toMatch(/partial for view 2/);
+    });
+
+  });
+});

+ 34 - 0
karma.conf.js

@@ -0,0 +1,34 @@
+//jshint strict: false
+module.exports = function(config) {
+  config.set({
+
+    basePath: './app',
+
+    files: [
+      'bower_components/angular/angular.js',
+      'bower_components/angular-route/angular-route.js',
+      'bower_components/angular-mocks/angular-mocks.js',
+      'components/**/*.js',
+      'view*/**/*.js'
+    ],
+
+    autoWatch: true,
+
+    frameworks: ['jasmine'],
+
+    browsers: ['Chrome'],
+
+    plugins: [
+      'karma-chrome-launcher',
+      'karma-firefox-launcher',
+      'karma-jasmine',
+      'karma-junit-reporter'
+    ],
+
+    junitReporter: {
+      outputFile: 'test_out/unit.xml',
+      suite: 'unit'
+    }
+
+  });
+};

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 8222 - 0
package-lock.json


A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 38 - 0
package.json