mirror of
https://github.com/gwenhael-le-moine/ledgerrb.git
synced 2024-12-26 09:59:18 +01:00
Added angular skeleton, serve ti from sinatra
This commit is contained in:
parent
d550310cf2
commit
92e77b9141
40 changed files with 743 additions and 2 deletions
1
Gemfile
1
Gemfile
|
@ -2,5 +2,6 @@
|
|||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'rack-rewrite'
|
||||
gem 'sinatra'
|
||||
gem 'sinatra-param'
|
||||
|
|
|
@ -4,6 +4,7 @@ GEM
|
|||
rack (1.5.2)
|
||||
rack-protection (1.5.3)
|
||||
rack
|
||||
rack-rewrite (1.5.0)
|
||||
sinatra (1.4.5)
|
||||
rack (~> 1.4)
|
||||
rack-protection (~> 1.4)
|
||||
|
@ -16,5 +17,6 @@ PLATFORMS
|
|||
ruby
|
||||
|
||||
DEPENDENCIES
|
||||
rack-rewrite
|
||||
sinatra
|
||||
sinatra-param
|
||||
|
|
3
app.rb
3
app.rb
|
@ -11,7 +11,7 @@ class LedgerRbApp < Sinatra::Base
|
|||
helpers Sinatra::Param
|
||||
|
||||
get '/' do
|
||||
'OH HAI!'
|
||||
send_file 'public/app/index.html'
|
||||
end
|
||||
|
||||
get '/api/ledger/accounts/?' do
|
||||
|
@ -42,5 +42,4 @@ class LedgerRbApp < Sinatra::Base
|
|||
|
||||
Ledger.version
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -6,4 +6,9 @@ configure :development do
|
|||
Sinatra::Application.reset!
|
||||
use Rack::Reloader
|
||||
end
|
||||
|
||||
use Rack::Rewrite do
|
||||
rewrite %r{^(/.*(css|js|ttf|woff|html|png|jpg|jpeg|gif)$)}, '/app/$1'
|
||||
end
|
||||
|
||||
run LedgerRbApp
|
||||
|
|
3
public/.bowerrc
Normal file
3
public/.bowerrc
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"directory": "app/bower_components"
|
||||
}
|
7
public/.gitignore
vendored
Normal file
7
public/.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
logs/*
|
||||
!.gitkeep
|
||||
node_modules/
|
||||
bower_components/
|
||||
tmp
|
||||
.DS_Store
|
||||
.idea
|
6
public/.jshintrc
Normal file
6
public/.jshintrc
Normal file
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"globalstrict": true,
|
||||
"globals": {
|
||||
"angular": false
|
||||
}
|
||||
}
|
14
public/.travis.yml
Normal file
14
public/.travis.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
language: node_js
|
||||
node_js:
|
||||
- 0.10
|
||||
|
||||
before_script:
|
||||
- export DISPLAY=:99.0
|
||||
- sh -e /etc/init.d/xvfb start
|
||||
- npm start > /dev/null &
|
||||
- npm run update-webdriver
|
||||
- sleep 1 # give server time to start
|
||||
|
||||
script:
|
||||
- node_modules/.bin/karma start test/karma.conf.js --no-auto-watch --single-run --reporters=dots --browsers=Firefox
|
||||
- node_modules/.bin/protractor test/protractor-conf.js --browser=firefox
|
22
public/LICENSE
Normal file
22
public/LICENSE
Normal file
|
@ -0,0 +1,22 @@
|
|||
The MIT License
|
||||
|
||||
Copyright (c) 2010-2014 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.
|
||||
|
292
public/README.md
Normal file
292
public/README.md
Normal file
|
@ -0,0 +1,292 @@
|
|||
# angular-ui-seed — the seed for AngularJS apps
|
||||
|
||||
This project seed is an application skeleton for a typical [AngularJS](http://angularjs.org/) web app.
|
||||
You can use it to quickly bootstrap your angular webapp projects and dev environment for these
|
||||
projects. It uses angular [ui-router](https://github.com/angular-ui/ui-router) to create multiple named views as well as nested views.
|
||||
|
||||
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-ui-seed repository and install the dependencies:
|
||||
|
||||
### Prerequisites
|
||||
|
||||
You need git to clone the angular-ui-seed repository. You can get it from
|
||||
[http://git-scm.com/](http://git-scm.com/).
|
||||
|
||||
We also use a number of node.js tools to initialize and test angular-ui-seed. You must have node.js and
|
||||
its package manager (npm) installed. You can get them from [http://nodejs.org/](http://nodejs.org/).
|
||||
|
||||
### Clone angular-ui-seed
|
||||
|
||||
Clone the angular-ui-seed repository using [git][git]:
|
||||
|
||||
```
|
||||
git clone https://github.com/dokko1230/angular-ui-seed.git
|
||||
cd angular-ui-seed
|
||||
```
|
||||
|
||||
### 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].
|
||||
|
||||
We have preconfigured `npm` to automatically run `bower` so we can simply do:
|
||||
|
||||
```
|
||||
npm install
|
||||
```
|
||||
|
||||
Behind the scenes this will also call `bower install`. You should find 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-ui-seed changes this location through the `.bowerrc` file. Putting it in the app folder makes
|
||||
it easier to serve the files by a webserver.*
|
||||
|
||||
### 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 `http://localhost:8000/app/index.html`.
|
||||
|
||||
|
||||
|
||||
## Directory Layout
|
||||
|
||||
app/ --> all of the files to be used in production
|
||||
css/ --> css files
|
||||
app.css --> default stylesheet
|
||||
img/ --> image files
|
||||
index.html --> app layout file (the main html template file of the app)
|
||||
js/ --> javascript files
|
||||
core/ --> core files
|
||||
controllers/ --> core controllers
|
||||
AppCtrl.js
|
||||
NavbarCtrl.js
|
||||
directives/ --> core directives
|
||||
VersionDirective.js
|
||||
filters/ --> core filters
|
||||
VersionFilter.js
|
||||
services/ --> core services
|
||||
VersionService.js
|
||||
templates/ --> core templates
|
||||
404.tpl.html
|
||||
main.tpl.html
|
||||
navbar.tpl.html
|
||||
state.js --> core state
|
||||
main/ --> main files
|
||||
controllers/ --> main controllers
|
||||
AboutCtrl.js
|
||||
ContactCtrl.js
|
||||
HomeCtrl.js
|
||||
templates/ --> main templates
|
||||
home.tpl.html
|
||||
about.tpl.html
|
||||
contact.tpl.html
|
||||
state.js --> main state
|
||||
|
||||
app.js --> application
|
||||
|
||||
test/ --> test config and source files
|
||||
protractor-conf.js --> config file for running e2e tests with Protractor
|
||||
e2e/ --> end-to-end specs
|
||||
scenarios.js
|
||||
karma.conf.js --> config file for running unit tests with Karma
|
||||
unit/ --> unit level specs/tests
|
||||
controllersSpec.js --> specs for controllers
|
||||
directivessSpec.js --> specs for directives
|
||||
filtersSpec.js --> specs for filters
|
||||
servicesSpec.js --> specs for services
|
||||
|
||||
|
||||
## Testing
|
||||
|
||||
There are two kinds of tests in the angular-ui-seed application: Unit tests and End to End tests.
|
||||
|
||||
### Running Unit Tests
|
||||
|
||||
The angular-ui-seed app comes preconfigured with unit tests. These are written in
|
||||
[Jasmine][jasmine], which we run with the [Karma Test Runner][karma]. We provide a Karma
|
||||
configuration file to run them.
|
||||
|
||||
* the configuration is found at `test/karma.conf.js`
|
||||
* the unit tests are found in `test/unit/`.
|
||||
|
||||
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 sit and
|
||||
watch the source and test files for changes and then re-run the tests whenever any of them change.
|
||||
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
|
||||
```
|
||||
|
||||
|
||||
### End to end testing
|
||||
|
||||
The angular-ui-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 `test/protractor-conf.js`
|
||||
* the end-to-end tests are found in `test/e2e/`
|
||||
|
||||
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.
|
||||
|
||||
```
|
||||
npm start
|
||||
```
|
||||
|
||||
In addition, since Protractor is built upon WebDriver we need to install this. The angular-ui-seed
|
||||
project comes with a predefined script to do this:
|
||||
|
||||
```
|
||||
npm run update-webdriver
|
||||
```
|
||||
|
||||
This will download and install the latest version of the stand-alone WebDriver tool.
|
||||
|
||||
Once you have ensured that the development web server hosting our application is up and running
|
||||
and WebDriver is updated, 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.
|
||||
|
||||
|
||||
## Updating Angular
|
||||
|
||||
Previously we recommended that you merge in changes to angular-ui-seed into your own fork of the project.
|
||||
Now that the angular framework library code and tools are acquired through package managers (npm and
|
||||
bower) you can use these tools instead to update the dependencies.
|
||||
|
||||
You can update the tool dependencies by running:
|
||||
|
||||
```
|
||||
npm update
|
||||
```
|
||||
|
||||
This will find the latest versions that match the version ranges specified in the `package.json` file.
|
||||
|
||||
You can update the Angular dependencies by running:
|
||||
|
||||
```
|
||||
bower update
|
||||
```
|
||||
|
||||
This will find the latest versions that match the version ranges specified in the `bower.json` file.
|
||||
|
||||
|
||||
## Serving the Application Files
|
||||
|
||||
While angular is client-side-only technology and it's possible to create angular webapps that
|
||||
don't require a backend server at all, we recommend serving the project files using a local
|
||||
webserver 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 `file://` scheme instead of `http://`.
|
||||
|
||||
|
||||
### Running the App during Development
|
||||
|
||||
The angular-ui-seed project comes preconfigured with a local development webserver. It is a node.js
|
||||
tool called [http-server][http-server]. You can start this webserver 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
|
||||
```
|
||||
|
||||
Alternatively, you can choose to configure your own webserver, 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 is your app and the overall infrastructure of your system, but
|
||||
the general rule is that all you need in production are all the files under the `app/` directory.
|
||||
Everything else should be omitted.
|
||||
|
||||
Angular apps are really just a bunch of static html, css and js files that just 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 webserver(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-ui-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 for more
|
||||
instruction on how to do this.
|
||||
|
||||
### CloudBees
|
||||
|
||||
CloudBees have provided a CI/deployment setup:
|
||||
|
||||
<a href="https://grandcentral.cloudbees.com/?CB_clickstart=https://raw.github.com/CloudBees-community/angular-js-clickstart/master/clickstart.json">
|
||||
<img src="https://d3ko533tu1ozfq.cloudfront.net/clickstart/deployInstantly.png"/></a>
|
||||
|
||||
If you run this, you will get a cloned version of this repo to start working on in a private git repo,
|
||||
along with a CI service (in Jenkins) hosted that will run unit and end to end tests in both Firefox and Chrome.
|
||||
|
||||
|
||||
## Contact
|
||||
|
||||
For more information on AngularJS please check out http://angularjs.org/
|
||||
|
||||
[git]: http://git-scm.com/
|
||||
[bower]: http://bower.io
|
||||
[npm]: https://www.npmjs.org/
|
||||
[node]: http://nodejs.org
|
||||
[protractor]: https://github.com/angular/protractor
|
||||
[jasmine]: http://pivotal.github.com/jasmine/
|
||||
[karma]: http://karma-runner.github.io
|
||||
[travis]: https://travis-ci.org/
|
||||
[http-server]: https://github.com/nodeapps/http-server
|
0
public/app/css/.gitkeep
Normal file
0
public/app/css/.gitkeep
Normal file
29
public/app/css/app.css
Normal file
29
public/app/css/app.css
Normal file
|
@ -0,0 +1,29 @@
|
|||
/* app css stylesheet */
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: 960px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.main {
|
||||
clear:both;
|
||||
}
|
||||
|
||||
.nav {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.nav li {
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.nav:after {
|
||||
clear:both;
|
||||
}
|
0
public/app/img/.gitkeep
Normal file
0
public/app/img/.gitkeep
Normal file
52
public/app/index.html
Normal file
52
public/app/index.html
Normal file
|
@ -0,0 +1,52 @@
|
|||
<!DOCTYPE html>
|
||||
<!--[if lt IE 7]> <html lang="en" ng-app="app" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
|
||||
<!--[if IE 7]> <html lang="en" ng-app="app" class="no-js lt-ie9 lt-ie8"> <![endif]-->
|
||||
<!--[if IE 8]> <html lang="en" ng-app="app" class="no-js lt-ie9"> <![endif]-->
|
||||
<!--[if gt IE 8]><!--> <html lang="en" ng-app="app" 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 type="text/css" rel="stylesheet" href="bower_components/html5-boilerplate/css/normalize.css">
|
||||
<link type="text/css" rel="stylesheet" href="bower_components/html5-boilerplate/css/main.css">
|
||||
<link type="text/css" rel="stylesheet" href="css/app.css"/>
|
||||
<script src="bower_components/html5-boilerplate/js/vendor/modernizr-2.6.2.min.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!--[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 ui-view="navbar"></div>
|
||||
|
||||
<div class="main" ui-view="main"></div>
|
||||
|
||||
<!-- In production use:
|
||||
<script src="//ajax.googleapis.com/ajax/libs/angularjs/x.x.x/angular.min.js"></script>
|
||||
-->
|
||||
<script src="bower_components/angular/angular.js"></script>
|
||||
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
|
||||
|
||||
<!-- APP -->
|
||||
<script src="js/app.js"></script>
|
||||
<script src="js/core/services/VersionService.js"></script>
|
||||
<script src="js/core/filters/VersionFilter.js"></script>
|
||||
<script src="js/core/directives/VersionDirective.js"></script>
|
||||
|
||||
|
||||
<!-- CORE -->
|
||||
<script src="js/core/state.js"></script>
|
||||
<script src="js/core/controllers/AppCtrl.js"></script>
|
||||
<script src="js/core/controllers/NavbarCtrl.js"></script>
|
||||
|
||||
<!-- MAIN -->
|
||||
<script src="js/main/state.js"></script>
|
||||
<script src="js/main/controllers/HomeCtrl.js"></script>
|
||||
<script src="js/main/controllers/AboutCtrl.js"></script>
|
||||
<script src="js/main/controllers/ContactCtrl.js"></script>
|
||||
|
||||
</body>
|
||||
</html>
|
1
public/app/js/app.js
Normal file
1
public/app/js/app.js
Normal file
|
@ -0,0 +1 @@
|
|||
var app = angular.module('app', ['ui.router']);
|
3
public/app/js/core/controllers/AppCtrl.js
Normal file
3
public/app/js/core/controllers/AppCtrl.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
app.controller('AppCtrl', function($scope) {
|
||||
|
||||
});
|
3
public/app/js/core/controllers/NavbarCtrl.js
Normal file
3
public/app/js/core/controllers/NavbarCtrl.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
app.controller('NavbarCtrl', function($scope) {
|
||||
$scope.items = ['Home', 'About', 'Contact'];
|
||||
});
|
5
public/app/js/core/directives/VersionDirective.js
Normal file
5
public/app/js/core/directives/VersionDirective.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
app.directive('appVersion', ['version', function(version) {
|
||||
return function(scope, elm, attrs) {
|
||||
elm.text(version);
|
||||
};
|
||||
}]);
|
5
public/app/js/core/filters/VersionFilter.js
Normal file
5
public/app/js/core/filters/VersionFilter.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
app.filter('interpolate', ['version', function(version) {
|
||||
return function(text) {
|
||||
return String(text).replace(/\%VERSION\%/mg, version);
|
||||
};
|
||||
}]);
|
1
public/app/js/core/services/VersionService.js
Normal file
1
public/app/js/core/services/VersionService.js
Normal file
|
@ -0,0 +1 @@
|
|||
app.value('version', '0.1');
|
27
public/app/js/core/state.js
Normal file
27
public/app/js/core/state.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
// Application Level State
|
||||
app.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
|
||||
|
||||
$urlRouterProvider.when('', '/home');
|
||||
|
||||
|
||||
$stateProvider
|
||||
.state('app', {
|
||||
url: '',
|
||||
controller: 'AppCtrl',
|
||||
views: {
|
||||
'navbar': {
|
||||
templateUrl: 'js/core/templates/navbar.tpl.html',
|
||||
controller: 'NavbarCtrl'
|
||||
},
|
||||
'main': {
|
||||
templateUrl: 'js/core/templates/main.tpl.html'
|
||||
}
|
||||
}
|
||||
})
|
||||
.state('404', {
|
||||
url: '/404',
|
||||
templateUrl: 'js/core/templates/404.tpl.html',
|
||||
controller: 'AppCtrl'
|
||||
});
|
||||
|
||||
}]);
|
1
public/app/js/core/templates/404.tpl.html
Normal file
1
public/app/js/core/templates/404.tpl.html
Normal file
|
@ -0,0 +1 @@
|
|||
<div>404 Error</div>
|
6
public/app/js/core/templates/main.tpl.html
Normal file
6
public/app/js/core/templates/main.tpl.html
Normal file
|
@ -0,0 +1,6 @@
|
|||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div ui-view></div>
|
||||
</div>
|
||||
</div>
|
11
public/app/js/core/templates/navbar.tpl.html
Normal file
11
public/app/js/core/templates/navbar.tpl.html
Normal file
|
@ -0,0 +1,11 @@
|
|||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<ul class="nav">
|
||||
<li ng-repeat="item in items" class="navbar-item" ui-sref-active="navbar-active">
|
||||
<a ui-sref="app.{{ item | lowercase }}">{{ item }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
</div>
|
3
public/app/js/main/controllers/AboutCtrl.js
Normal file
3
public/app/js/main/controllers/AboutCtrl.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
app.controller('AboutCtrl', ['$scope', function($scope) {
|
||||
|
||||
}]);
|
3
public/app/js/main/controllers/ContactCtrl.js
Normal file
3
public/app/js/main/controllers/ContactCtrl.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
app.controller('ContactCtrl', ['$scope', function($scope) {
|
||||
|
||||
}]);
|
3
public/app/js/main/controllers/HomeCtrl.js
Normal file
3
public/app/js/main/controllers/HomeCtrl.js
Normal file
|
@ -0,0 +1,3 @@
|
|||
app.controller('HomeCtrl', ['$scope', function($scope) {
|
||||
|
||||
}]);
|
21
public/app/js/main/state.js
Normal file
21
public/app/js/main/state.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
// Sub-application/main Level State
|
||||
app.config(['$stateProvider', function($stateProvider) {
|
||||
|
||||
$stateProvider
|
||||
.state('app.home', {
|
||||
url: '/home',
|
||||
templateUrl: 'js/main/templates/home.tpl.html',
|
||||
controller: 'HomeCtrl'
|
||||
})
|
||||
.state('app.about', {
|
||||
url: '/about',
|
||||
templateUrl: 'js/main/templates/about.tpl.html',
|
||||
controller: 'AboutCtrl'
|
||||
})
|
||||
.state('app.contact', {
|
||||
url: '/contact',
|
||||
templateUrl: 'js/main/templates/contact.tpl.html',
|
||||
controller: 'ContactCtrl'
|
||||
});
|
||||
|
||||
}]);
|
1
public/app/js/main/templates/about.tpl.html
Normal file
1
public/app/js/main/templates/about.tpl.html
Normal file
|
@ -0,0 +1 @@
|
|||
<p>This is about</p>
|
1
public/app/js/main/templates/contact.tpl.html
Normal file
1
public/app/js/main/templates/contact.tpl.html
Normal file
|
@ -0,0 +1 @@
|
|||
<p>This is contact</p>
|
1
public/app/js/main/templates/home.tpl.html
Normal file
1
public/app/js/main/templates/home.tpl.html
Normal file
|
@ -0,0 +1 @@
|
|||
<p>This is home</p>
|
14
public/bower.json
Normal file
14
public/bower.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"name": "angular-ui-seed",
|
||||
"description": "A starter project for AngularJS",
|
||||
"version": "0.0.2",
|
||||
"homepage": "https://github.com/dokko1230/angular-ui-seed",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"angular": "latest",
|
||||
"angular-ui-router": "~0.2.10",
|
||||
"angular-loader": "1.2.x",
|
||||
"angular-mocks": "~1.2.x",
|
||||
"html5-boilerplate": "~4.3.0"
|
||||
}
|
||||
}
|
34
public/package.json
Normal file
34
public/package.json
Normal file
|
@ -0,0 +1,34 @@
|
|||
{
|
||||
"name": "angular-ui-seed",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"description": "A starter project for AngularJS",
|
||||
"repository": "https://github.com/dokko1230/angular-ui-seed",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"karma": "~0.10",
|
||||
"protractor": "~0.20.1",
|
||||
"http-server": "^0.6.1",
|
||||
"bower": "^1.3.1",
|
||||
"shelljs": "^0.2.6",
|
||||
"karma-junit-reporter": "^0.2.2"
|
||||
},
|
||||
"scripts": {
|
||||
"postinstall": "bower install",
|
||||
|
||||
"prestart": "npm install",
|
||||
"start": "http-server -a localhost -p 8000",
|
||||
|
||||
"pretest": "npm install",
|
||||
"test": "karma start test/karma.conf.js",
|
||||
"test-single-run": "karma start test/karma.conf.js --single-run",
|
||||
|
||||
"preupdate-webdriver": "npm install",
|
||||
"update-webdriver": "webdriver-manager update",
|
||||
|
||||
"preprotractor": "npm run update-webdriver",
|
||||
"protractor": "protractor test/protractor-conf.js",
|
||||
|
||||
"update-index-async": "node -e \"require('shelljs/global'); sed('-i', /\\/\\/@@NG_LOADER_START@@[\\s\\S]*\\/\\/@@NG_LOADER_END@@/, '//@@NG_LOADER_START@@\\n' + cat('app/bower_components/angular-loader/angular-loader.min.js') + '\\n//@@NG_LOADER_END@@', 'app/index-async.html');\""
|
||||
}
|
||||
}
|
42
public/test/e2e/scenarios.js
Normal file
42
public/test/e2e/scenarios.js
Normal file
|
@ -0,0 +1,42 @@
|
|||
'use strict';
|
||||
|
||||
/* https://github.com/angular/protractor/blob/master/docs/getting-started.md */
|
||||
|
||||
describe('my app', function() {
|
||||
|
||||
browser.get('index.html');
|
||||
|
||||
it('should automatically redirect to /home when location hash/fragment is empty', function() {
|
||||
expect(browser.getLocationAbsUrl()).toMatch("/home");
|
||||
});
|
||||
|
||||
|
||||
describe('home', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
browser.get('index.html#/home');
|
||||
});
|
||||
|
||||
|
||||
it('should render home when user navigates to /home', function() {
|
||||
expect(element.all(by.css('[ui-view] p')).first().getText()).
|
||||
toMatch(/This is home/);
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
describe('about', function() {
|
||||
|
||||
beforeEach(function() {
|
||||
browser.get('index.html#/about');
|
||||
});
|
||||
|
||||
|
||||
it('should render about when user navigates to /about', function() {
|
||||
expect(element.all(by.css('[ui-view] p')).first().getText()).
|
||||
toMatch(/This is about/);
|
||||
});
|
||||
|
||||
});
|
||||
});
|
33
public/test/karma.conf.js
Normal file
33
public/test/karma.conf.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
module.exports = function(config){
|
||||
config.set({
|
||||
|
||||
basePath : '../',
|
||||
|
||||
files : [
|
||||
'app/bower_components/angular/angular.js',
|
||||
'app/bower_components/angular-ui-router/release/angular-ui-router.js',
|
||||
'app/bower_components/angular-mocks/angular-mocks.js',
|
||||
'app/js/**/*.js',
|
||||
'test/unit/**/*.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'
|
||||
}
|
||||
|
||||
});
|
||||
};
|
19
public/test/protractor-conf.js
Normal file
19
public/test/protractor-conf.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
exports.config = {
|
||||
allScriptsTimeout: 11000,
|
||||
|
||||
specs: [
|
||||
'e2e/*.js'
|
||||
],
|
||||
|
||||
capabilities: {
|
||||
'browserName': 'chrome'
|
||||
},
|
||||
|
||||
baseUrl: 'http://localhost:8000/app/',
|
||||
|
||||
framework: 'jasmine',
|
||||
|
||||
jasmineNodeOpts: {
|
||||
defaultTimeoutInterval: 30000
|
||||
}
|
||||
};
|
20
public/test/unit/controllersSpec.js
Normal file
20
public/test/unit/controllersSpec.js
Normal file
|
@ -0,0 +1,20 @@
|
|||
'use strict';
|
||||
|
||||
/* jasmine specs for controllers go here */
|
||||
|
||||
describe('controllers', function(){
|
||||
beforeEach(module('app'));
|
||||
|
||||
|
||||
it('should ....', inject(function($controller) {
|
||||
//spec body
|
||||
var AppCtrl = $controller('AppCtrl', { $scope: {} });
|
||||
expect(AppCtrl).toBeDefined();
|
||||
}));
|
||||
|
||||
it('should ....', inject(function($controller) {
|
||||
//spec body
|
||||
var HomeCtrl = $controller('HomeCtrl', { $scope: {} });
|
||||
expect(HomeCtrl).toBeDefined();
|
||||
}));
|
||||
});
|
19
public/test/unit/directivesSpec.js
Normal file
19
public/test/unit/directivesSpec.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
'use strict';
|
||||
|
||||
/* jasmine specs for directives go here */
|
||||
|
||||
describe('directives', function() {
|
||||
beforeEach(module('app'));
|
||||
|
||||
describe('app-version', 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');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
19
public/test/unit/filtersSpec.js
Normal file
19
public/test/unit/filtersSpec.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
'use strict';
|
||||
|
||||
/* jasmine specs for filters go here */
|
||||
|
||||
describe('filter', function() {
|
||||
beforeEach(module('app'));
|
||||
|
||||
|
||||
describe('interpolate', 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');
|
||||
}));
|
||||
});
|
||||
});
|
13
public/test/unit/servicesSpec.js
Normal file
13
public/test/unit/servicesSpec.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
'use strict';
|
||||
|
||||
/* jasmine specs for services go here */
|
||||
|
||||
describe('service', function() {
|
||||
beforeEach(module('app'));
|
||||
|
||||
describe('version', function() {
|
||||
it('should return current version', inject(function(version) {
|
||||
expect(version).toEqual('0.1');
|
||||
}));
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue