master 25842ac7efd6 cached
584 files
36.5 MB
9.6M tokens
10408 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (38,437K chars total). Download the full file to get everything.
Repository: fdietz/recipes-with-angular-js-examples
Branch: master
Commit: 25842ac7efd6
Files: 584
Total size: 36.5 MB

Directory structure:
gitextract_1lrcw1wg/

├── README.md
├── chapter1/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       └── angular.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   ├── jquery_example.html
│   │   └── js/
│   │       └── angular.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       └── angular.js
│   └── recipe5/
│       ├── css/
│       │   └── bootstrap.css
│       ├── index.html
│       └── js/
│           ├── angular.js
│           └── app.js
├── chapter10/
│   └── recipe1/
│       └── contacts/
│           ├── README.md
│           ├── app.js
│           ├── package.json
│           ├── public/
│           │   ├── css/
│           │   │   ├── app.css
│           │   │   └── bootstrap.css
│           │   └── js/
│           │       ├── app.js
│           │       ├── controllers/
│           │       │   ├── ContactsEditCtrl.js
│           │       │   ├── ContactsIndexCtrl.js
│           │       │   ├── ContactsShowCtrl.js
│           │       │   └── MainCtrl.js
│           │       ├── controllers.js
│           │       ├── directives.js
│           │       ├── filters.js
│           │       ├── lib/
│           │       │   └── angular/
│           │       │       ├── angular-cookies.js
│           │       │       ├── angular-loader.js
│           │       │       ├── angular-resource.js
│           │       │       ├── angular-sanitize.js
│           │       │       ├── angular.js
│           │       │       └── version.txt
│           │       └── services.js
│           ├── routes/
│           │   ├── api.js
│           │   └── index.js
│           └── views/
│               ├── layout.jade
│               └── partials/
│                   ├── .gitignore
│                   ├── edit.jade
│                   ├── index.jade
│                   └── show.jade
├── chapter2/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe6/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe7/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── app.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── controllers.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── partial1.html
│       │       └── partial2.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   └── angular/
│           │       ├── angular-mocks.js
│           │       ├── angular-scenario.js
│           │       └── version.txt
│           └── unit/
│               └── controllersSpec.js
├── chapter3/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       └── angular.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index-async.html
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── app.js
│   │   │   ├── lib/
│   │   │   │   └── angular/
│   │   │   │       ├── angular-cookies.js
│   │   │   │       ├── angular-loader.js
│   │   │   │       ├── angular-resource.js
│   │   │   │       ├── angular-sanitize.js
│   │   │   │       ├── angular.js
│   │   │   │       └── version.txt
│   │   │   ├── partials/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── partial1.html
│   │   │   │   └── partial2.html
│   │   │   └── widget.html
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       └── lib/
│   │           └── angular/
│   │               ├── angular-mocks.js
│   │               ├── angular-scenario.js
│   │               └── version.txt
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe6/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe7/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe8/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── bootstrap.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── app.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── partial1.html
│       │       └── partial2.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   ├── angular/
│           │   │   ├── angular-mocks.js
│           │   │   ├── angular-scenario.js
│           │   │   └── version.txt
│           │   └── jasmine-jquery.js
│           └── unit/
│               └── directivesSpec.js
├── chapter4/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular-locale_de.js
│   │       └── angular.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe4/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── bootstrap.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── app.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── partial1.html
│       │       └── partial2.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   ├── angular/
│           │   │   ├── angular-mocks.js
│           │   │   ├── angular-scenario.js
│           │   │   └── version.txt
│           │   └── jasmine-jquery.js
│           └── unit/
│               └── filtersSpec.js
├── chapter5/
│   ├── recipe1/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── data/
│   │   │   │   └── posts.json
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index-async.html
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── controllers.js
│   │   │   └── lib/
│   │   │       └── angular/
│   │   │           ├── angular-cookies.js
│   │   │           ├── angular-loader.js
│   │   │           ├── angular-resource.js
│   │   │           ├── angular-sanitize.js
│   │   │           ├── angular.js
│   │   │           └── version.txt
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       ├── lib/
│   │       │   └── angular/
│   │       │       ├── angular-mocks.js
│   │       │       ├── angular-scenario.js
│   │       │       └── version.txt
│   │       └── unit/
│   │           └── controllersSpec.js
│   ├── recipe2/
│   │   ├── README.md
│   │   ├── app.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── css/
│   │   │   │   ├── app.css
│   │   │   │   └── bootstrap.css
│   │   │   └── js/
│   │   │       ├── app.js
│   │   │       ├── controllers.js
│   │   │       ├── directives.js
│   │   │       ├── filters.js
│   │   │       ├── lib/
│   │   │       │   └── angular/
│   │   │       │       ├── angular-cookies.js
│   │   │       │       ├── angular-loader.js
│   │   │       │       ├── angular-resource.js
│   │   │       │       ├── angular-sanitize.js
│   │   │       │       ├── angular.js
│   │   │       │       └── version.txt
│   │   │       └── services.js
│   │   └── views/
│   │       ├── index.jade
│   │       └── layout.jade
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular-resource.js
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── data/
│   │   │   │   ├── first.json
│   │   │   │   ├── second.json
│   │   │   │   └── third.json
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── controllers.js
│   │   │   └── lib/
│   │   │       └── angular/
│   │   │           ├── angular-cookies.js
│   │   │           ├── angular-loader.js
│   │   │           ├── angular-resource.js
│   │   │           ├── angular-sanitize.js
│   │   │           ├── angular.js
│   │   │           └── version.txt
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       ├── lib/
│   │       │   └── angular/
│   │       │       ├── angular-mocks.js
│   │       │       ├── angular-scenario.js
│   │       │       └── version.txt
│   │       └── unit/
│   │           └── controllersSpec.js
│   └── recipe5/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── app.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── controllers.js
│       │   └── lib/
│       │       └── angular/
│       │           ├── angular-cookies.js
│       │           ├── angular-loader.js
│       │           ├── angular-resource.js
│       │           ├── angular-sanitize.js
│       │           ├── angular.js
│       │           └── version.txt
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   └── angular/
│           │       ├── angular-mocks.js
│           │       ├── angular-scenario.js
│           │       └── version.txt
│           └── unit/
│               └── controllersSpec.js
├── chapter6/
│   ├── recipe1/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index-async.html
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── app.js
│   │   │   ├── lib/
│   │   │   │   └── angular/
│   │   │   │       ├── angular-cookies.js
│   │   │   │       ├── angular-loader.js
│   │   │   │       ├── angular-resource.js
│   │   │   │       ├── angular-sanitize.js
│   │   │   │       ├── angular.js
│   │   │   │       └── version.txt
│   │   │   └── partials/
│   │   │       ├── .gitignore
│   │   │       ├── person_details.html
│   │   │       └── person_list.html
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       └── lib/
│   │           └── angular/
│   │               ├── angular-mocks.js
│   │               ├── angular-scenario.js
│   │               └── version.txt
│   ├── recipe2/
│   │   ├── README.md
│   │   ├── app.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── css/
│   │   │   │   ├── app.css
│   │   │   │   └── bootstrap.css
│   │   │   └── js/
│   │   │       ├── app.js
│   │   │       ├── controllers.js
│   │   │       ├── directives.js
│   │   │       ├── filters.js
│   │   │       ├── lib/
│   │   │       │   └── angular/
│   │   │       │       ├── angular-cookies.js
│   │   │       │       ├── angular-loader.js
│   │   │       │       ├── angular-resource.js
│   │   │       │       ├── angular-sanitize.js
│   │   │       │       ├── angular.js
│   │   │       │       └── version.txt
│   │   │       └── services.js
│   │   └── views/
│   │       ├── index.jade
│   │       ├── layout.jade
│   │       └── partials/
│   │           ├── index.jade
│   │           └── show.jade
│   ├── recipe3/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── app.js
│   │   │   ├── lib/
│   │   │   │   └── angular/
│   │   │   │       ├── angular-cookies.js
│   │   │   │       ├── angular-loader.js
│   │   │   │       ├── angular-resource.js
│   │   │   │       ├── angular-sanitize.js
│   │   │   │       ├── angular.js
│   │   │   │       └── version.txt
│   │   │   └── partials/
│   │   │       ├── .gitignore
│   │   │       ├── help.html
│   │   │       ├── index.html
│   │   │       └── show.html
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       └── lib/
│   │           └── angular/
│   │               ├── angular-mocks.js
│   │               ├── angular-scenario.js
│   │               └── version.txt
│   └── recipe4/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── app.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── app.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── help.html
│       │       ├── index.html
│       │       ├── login.html
│       │       └── show.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           └── lib/
│               └── angular/
│                   ├── angular-mocks.js
│                   ├── angular-scenario.js
│                   └── version.txt
├── chapter7/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe6/
│       ├── css/
│       │   └── bootstrap.css
│       ├── index.html
│       └── js/
│           ├── angular-ui.js
│           ├── angular.js
│           └── app.js
├── chapter8/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe6/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe7/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular-ui-bootstrap-modal.js
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe8/
│       ├── css/
│       │   └── bootstrap.css
│       ├── index.html
│       └── js/
│           ├── angular-resource.js
│           ├── angular.js
│           └── app.js
└── chapter9/
    └── recipe1/
        └── contacts/
            ├── .gitignore
            ├── Gemfile
            ├── README.rdoc
            ├── Rakefile
            ├── app/
            │   ├── assets/
            │   │   ├── javascripts/
            │   │   │   ├── angular/
            │   │   │   │   ├── app.js.erb
            │   │   │   │   ├── controllers/
            │   │   │   │   │   ├── .gitkeep
            │   │   │   │   │   ├── ContactsEditCtrl.js
            │   │   │   │   │   ├── ContactsIndexCtrl.js
            │   │   │   │   │   ├── ContactsShowCtrl.js
            │   │   │   │   │   └── MainCtrl.js
            │   │   │   │   ├── filters/
            │   │   │   │   │   └── .gitkeep
            │   │   │   │   └── services/
            │   │   │   │       ├── .gitkeep
            │   │   │   │       └── Contact.js
            │   │   │   └── application.js
            │   │   ├── stylesheets/
            │   │   │   ├── application.css
            │   │   │   └── bootstrap_and_overrides.css
            │   │   └── templates/
            │   │       ├── .gitkeep
            │   │       └── contacts/
            │   │           ├── edit.html
            │   │           ├── index.html
            │   │           └── show.html
            │   ├── controllers/
            │   │   ├── application_controller.rb
            │   │   ├── contacts_controller.rb
            │   │   └── layouts_controller.rb
            │   ├── helpers/
            │   │   ├── application_helper.rb
            │   │   └── contacts_helper.rb
            │   ├── mailers/
            │   │   └── .gitkeep
            │   ├── models/
            │   │   ├── .gitkeep
            │   │   └── contact.rb
            │   └── views/
            │       └── layouts/
            │           └── application.html.erb
            ├── config/
            │   ├── application.rb
            │   ├── boot.rb
            │   ├── database.yml
            │   ├── environment.rb
            │   ├── environments/
            │   │   ├── development.rb
            │   │   ├── production.rb
            │   │   └── test.rb
            │   ├── initializers/
            │   │   ├── backtrace_silencers.rb
            │   │   ├── inflections.rb
            │   │   ├── mime_types.rb
            │   │   ├── secret_token.rb
            │   │   ├── session_store.rb
            │   │   └── wrap_parameters.rb
            │   ├── locales/
            │   │   └── en.yml
            │   └── routes.rb
            ├── config.ru
            ├── db/
            │   ├── migrate/
            │   │   └── 20130221092802_create_contacts.rb
            │   ├── schema.rb
            │   └── seeds.rb
            ├── doc/
            │   └── README_FOR_APP
            ├── lib/
            │   ├── assets/
            │   │   └── .gitkeep
            │   └── tasks/
            │       └── .gitkeep
            ├── public/
            │   ├── 404.html
            │   ├── 422.html
            │   ├── 500.html
            │   └── robots.txt
            ├── script/
            │   └── rails
            ├── spec/
            │   └── javascripts/
            │       └── angular/
            │           └── .gitkeep
            ├── test/
            │   ├── fixtures/
            │   │   ├── .gitkeep
            │   │   └── contacts.yml
            │   ├── functional/
            │   │   ├── .gitkeep
            │   │   └── contacts_controller_test.rb
            │   ├── integration/
            │   │   └── .gitkeep
            │   ├── performance/
            │   │   └── browsing_test.rb
            │   ├── test_helper.rb
            │   └── unit/
            │       ├── .gitkeep
            │       ├── contact_test.rb
            │       └── helpers/
            │           └── contacts_helper_test.rb
            └── vendor/
                ├── assets/
                │   ├── javascripts/
                │   │   ├── .gitkeep
                │   │   ├── angular-resource.js
                │   │   ├── angular.js
                │   │   └── underscore.js
                │   └── stylesheets/
                │       └── .gitkeep
                └── plugins/
                    └── .gitkeep

================================================
FILE CONTENTS
================================================

================================================
FILE: README.md
================================================
# Recipes with Angular.js Example

Examples to accompany the book
[Recipes with Angular.js](http://leanpub.com/recipes-with-angular-js).

If you have questions or comments, open an issue or [email me](fdietz@gmail.com).

Most examples are using [angular-seed](https://github.com/angular/angular-seed) or [angular-express-seed](https://github.com/btford/angular-express-seed) as a bootstrap.


================================================
FILE: chapter1/recipe1/css/bootstrap.css
================================================
/*!
 * Bootstrap v2.2.2
 *
 * Copyright 2012 Twitter, Inc
 * Licensed under the Apache License v2.0
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Designed and built with all the love in the world @twitter by @mdo and @fat.
 */

article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
nav,
section {
  display: block;
}

audio,
canvas,
video {
  display: inline-block;
  *display: inline;
  *zoom: 1;
}

audio:not([controls]) {
  display: none;
}

html {
  font-size: 100%;
  -webkit-text-size-adjust: 100%;
      -ms-text-size-adjust: 100%;
}

a:focus {
  outline: thin dotted #333;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}

a:hover,
a:active {
  outline: 0;
}

sub,
sup {
  position: relative;
  font-size: 75%;
  line-height: 0;
  vertical-align: baseline;
}

sup {
  top: -0.5em;
}

sub {
  bottom: -0.25em;
}

img {
  width: auto\9;
  height: auto;
  max-width: 100%;
  vertical-align: middle;
  border: 0;
  -ms-interpolation-mode: bicubic;
}

#map_canvas img,
.google-maps img {
  max-width: none;
}

button,
input,
select,
textarea {
  margin: 0;
  font-size: 100%;
  vertical-align: middle;
}

button,
input {
  *overflow: visible;
  line-height: normal;
}

button::-moz-focus-inner,
input::-moz-focus-inner {
  padding: 0;
  border: 0;
}

button,
html input[type="button"],
input[type="reset"],
input[type="submit"] {
  cursor: pointer;
  -webkit-appearance: button;
}

label,
select,
button,
input[type="button"],
input[type="reset"],
input[type="submit"],
input[type="radio"],
input[type="checkbox"] {
  cursor: pointer;
}

input[type="search"] {
  -webkit-box-sizing: content-box;
     -moz-box-sizing: content-box;
          box-sizing: content-box;
  -webkit-appearance: textfield;
}

input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
  -webkit-appearance: none;
}

textarea {
  overflow: auto;
  vertical-align: top;
}

@media print {
  * {
    color: #000 !important;
    text-shadow: none !important;
    background: transparent !important;
    box-shadow: none !important;
  }
  a,
  a:visited {
    text-decoration: underline;
  }
  a[href]:after {
    content: " (" attr(href) ")";
  }
  abbr[title]:after {
    content: " (" attr(title) ")";
  }
  .ir a:after,
  a[href^="javascript:"]:after,
  a[href^="#"]:after {
    content: "";
  }
  pre,
  blockquote {
    border: 1px solid #999;
    page-break-inside: avoid;
  }
  thead {
    display: table-header-group;
  }
  tr,
  img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  @page  {
    margin: 0.5cm;
  }
  p,
  h2,
  h3 {
    orphans: 3;
    widows: 3;
  }
  h2,
  h3 {
    page-break-after: avoid;
  }
}

.clearfix {
  *zoom: 1;
}

.clearfix:before,
.clearfix:after {
  display: table;
  line-height: 0;
  content: "";
}

.clearfix:after {
  clear: both;
}

.hide-text {
  font: 0/0 a;
  color: transparent;
  text-shadow: none;
  background-color: transparent;
  border: 0;
}

.input-block-level {
  display: block;
  width: 100%;
  min-height: 30px;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

body {
  margin: 0;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 14px;
  line-height: 20px;
  color: #333333;
  background-color: #ffffff;
}

a {
  color: #0088cc;
  text-decoration: none;
}

a:hover {
  color: #005580;
  text-decoration: underline;
}

.img-rounded {
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
}

.img-polaroid {
  padding: 4px;
  background-color: #fff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}

.img-circle {
  -webkit-border-radius: 500px;
     -moz-border-radius: 500px;
          border-radius: 500px;
}

.row {
  margin-left: -20px;
  *zoom: 1;
}

.row:before,
.row:after {
  display: table;
  line-height: 0;
  content: "";
}

.row:after {
  clear: both;
}

[class*="span"] {
  float: left;
  min-height: 1px;
  margin-left: 20px;
}

.container,
.navbar-static-top .container,
.navbar-fixed-top .container,
.navbar-fixed-bottom .container {
  width: 940px;
}

.span12 {
  width: 940px;
}

.span11 {
  width: 860px;
}

.span10 {
  width: 780px;
}

.span9 {
  width: 700px;
}

.span8 {
  width: 620px;
}

.span7 {
  width: 540px;
}

.span6 {
  width: 460px;
}

.span5 {
  width: 380px;
}

.span4 {
  width: 300px;
}

.span3 {
  width: 220px;
}

.span2 {
  width: 140px;
}

.span1 {
  width: 60px;
}

.offset12 {
  margin-left: 980px;
}

.offset11 {
  margin-left: 900px;
}

.offset10 {
  margin-left: 820px;
}

.offset9 {
  margin-left: 740px;
}

.offset8 {
  margin-left: 660px;
}

.offset7 {
  margin-left: 580px;
}

.offset6 {
  margin-left: 500px;
}

.offset5 {
  margin-left: 420px;
}

.offset4 {
  margin-left: 340px;
}

.offset3 {
  margin-left: 260px;
}

.offset2 {
  margin-left: 180px;
}

.offset1 {
  margin-left: 100px;
}

.row-fluid {
  width: 100%;
  *zoom: 1;
}

.row-fluid:before,
.row-fluid:after {
  display: table;
  line-height: 0;
  content: "";
}

.row-fluid:after {
  clear: both;
}

.row-fluid [class*="span"] {
  display: block;
  float: left;
  width: 100%;
  min-height: 30px;
  margin-left: 2.127659574468085%;
  *margin-left: 2.074468085106383%;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

.row-fluid [class*="span"]:first-child {
  margin-left: 0;
}

.row-fluid .controls-row [class*="span"] + [class*="span"] {
  margin-left: 2.127659574468085%;
}

.row-fluid .span12 {
  width: 100%;
  *width: 99.94680851063829%;
}

.row-fluid .span11 {
  width: 91.48936170212765%;
  *width: 91.43617021276594%;
}

.row-fluid .span10 {
  width: 82.97872340425532%;
  *width: 82.92553191489361%;
}

.row-fluid .span9 {
  width: 74.46808510638297%;
  *width: 74.41489361702126%;
}

.row-fluid .span8 {
  width: 65.95744680851064%;
  *width: 65.90425531914893%;
}

.row-fluid .span7 {
  width: 57.44680851063829%;
  *width: 57.39361702127659%;
}

.row-fluid .span6 {
  width: 48.93617021276595%;
  *width: 48.88297872340425%;
}

.row-fluid .span5 {
  width: 40.42553191489362%;
  *width: 40.37234042553192%;
}

.row-fluid .span4 {
  width: 31.914893617021278%;
  *width: 31.861702127659576%;
}

.row-fluid .span3 {
  width: 23.404255319148934%;
  *width: 23.351063829787233%;
}

.row-fluid .span2 {
  width: 14.893617021276595%;
  *width: 14.840425531914894%;
}

.row-fluid .span1 {
  width: 6.382978723404255%;
  *width: 6.329787234042553%;
}

.row-fluid .offset12 {
  margin-left: 104.25531914893617%;
  *margin-left: 104.14893617021275%;
}

.row-fluid .offset12:first-child {
  margin-left: 102.12765957446808%;
  *margin-left: 102.02127659574467%;
}

.row-fluid .offset11 {
  margin-left: 95.74468085106382%;
  *margin-left: 95.6382978723404%;
}

.row-fluid .offset11:first-child {
  margin-left: 93.61702127659574%;
  *margin-left: 93.51063829787232%;
}

.row-fluid .offset10 {
  margin-left: 87.23404255319149%;
  *margin-left: 87.12765957446807%;
}

.row-fluid .offset10:first-child {
  margin-left: 85.1063829787234%;
  *margin-left: 84.99999999999999%;
}

.row-fluid .offset9 {
  margin-left: 78.72340425531914%;
  *margin-left: 78.61702127659572%;
}

.row-fluid .offset9:first-child {
  margin-left: 76.59574468085106%;
  *margin-left: 76.48936170212764%;
}

.row-fluid .offset8 {
  margin-left: 70.2127659574468%;
  *margin-left: 70.10638297872339%;
}

.row-fluid .offset8:first-child {
  margin-left: 68.08510638297872%;
  *margin-left: 67.9787234042553%;
}

.row-fluid .offset7 {
  margin-left: 61.70212765957446%;
  *margin-left: 61.59574468085106%;
}

.row-fluid .offset7:first-child {
  margin-left: 59.574468085106375%;
  *margin-left: 59.46808510638297%;
}

.row-fluid .offset6 {
  margin-left: 53.191489361702125%;
  *margin-left: 53.085106382978715%;
}

.row-fluid .offset6:first-child {
  margin-left: 51.063829787234035%;
  *margin-left: 50.95744680851063%;
}

.row-fluid .offset5 {
  margin-left: 44.68085106382979%;
  *margin-left: 44.57446808510638%;
}

.row-fluid .offset5:first-child {
  margin-left: 42.5531914893617%;
  *margin-left: 42.4468085106383%;
}

.row-fluid .offset4 {
  margin-left: 36.170212765957444%;
  *margin-left: 36.06382978723405%;
}

.row-fluid .offset4:first-child {
  margin-left: 34.04255319148936%;
  *margin-left: 33.93617021276596%;
}

.row-fluid .offset3 {
  margin-left: 27.659574468085104%;
  *margin-left: 27.5531914893617%;
}

.row-fluid .offset3:first-child {
  margin-left: 25.53191489361702%;
  *margin-left: 25.425531914893618%;
}

.row-fluid .offset2 {
  margin-left: 19.148936170212764%;
  *margin-left: 19.04255319148936%;
}

.row-fluid .offset2:first-child {
  margin-left: 17.02127659574468%;
  *margin-left: 16.914893617021278%;
}

.row-fluid .offset1 {
  margin-left: 10.638297872340425%;
  *margin-left: 10.53191489361702%;
}

.row-fluid .offset1:first-child {
  margin-left: 8.51063829787234%;
  *margin-left: 8.404255319148938%;
}

[class*="span"].hide,
.row-fluid [class*="span"].hide {
  display: none;
}

[class*="span"].pull-right,
.row-fluid [class*="span"].pull-right {
  float: right;
}

.container {
  margin-right: auto;
  margin-left: auto;
  *zoom: 1;
}

.container:before,
.container:after {
  display: table;
  line-height: 0;
  content: "";
}

.container:after {
  clear: both;
}

.container-fluid {
  padding-right: 20px;
  padding-left: 20px;
  *zoom: 1;
}

.container-fluid:before,
.container-fluid:after {
  display: table;
  line-height: 0;
  content: "";
}

.container-fluid:after {
  clear: both;
}

p {
  margin: 0 0 10px;
}

.lead {
  margin-bottom: 20px;
  font-size: 21px;
  font-weight: 200;
  line-height: 30px;
}

small {
  font-size: 85%;
}

strong {
  font-weight: bold;
}

em {
  font-style: italic;
}

cite {
  font-style: normal;
}

.muted {
  color: #999999;
}

a.muted:hover {
  color: #808080;
}

.text-warning {
  color: #c09853;
}

a.text-warning:hover {
  color: #a47e3c;
}

.text-error {
  color: #b94a48;
}

a.text-error:hover {
  color: #953b39;
}

.text-info {
  color: #3a87ad;
}

a.text-info:hover {
  color: #2d6987;
}

.text-success {
  color: #468847;
}

a.text-success:hover {
  color: #356635;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  margin: 10px 0;
  font-family: inherit;
  font-weight: bold;
  line-height: 20px;
  color: inherit;
  text-rendering: optimizelegibility;
}

h1 small,
h2 small,
h3 small,
h4 small,
h5 small,
h6 small {
  font-weight: normal;
  line-height: 1;
  color: #999999;
}

h1,
h2,
h3 {
  line-height: 40px;
}

h1 {
  font-size: 38.5px;
}

h2 {
  font-size: 31.5px;
}

h3 {
  font-size: 24.5px;
}

h4 {
  font-size: 17.5px;
}

h5 {
  font-size: 14px;
}

h6 {
  font-size: 11.9px;
}

h1 small {
  font-size: 24.5px;
}

h2 small {
  font-size: 17.5px;
}

h3 small {
  font-size: 14px;
}

h4 small {
  font-size: 14px;
}

.page-header {
  padding-bottom: 9px;
  margin: 20px 0 30px;
  border-bottom: 1px solid #eeeeee;
}

ul,
ol {
  padding: 0;
  margin: 0 0 10px 25px;
}

ul ul,
ul ol,
ol ol,
ol ul {
  margin-bottom: 0;
}

li {
  line-height: 20px;
}

ul.unstyled,
ol.unstyled {
  margin-left: 0;
  list-style: none;
}

ul.inline,
ol.inline {
  margin-left: 0;
  list-style: none;
}

ul.inline > li,
ol.inline > li {
  display: inline-block;
  padding-right: 5px;
  padding-left: 5px;
}

dl {
  margin-bottom: 20px;
}

dt,
dd {
  line-height: 20px;
}

dt {
  font-weight: bold;
}

dd {
  margin-left: 10px;
}

.dl-horizontal {
  *zoom: 1;
}

.dl-horizontal:before,
.dl-horizontal:after {
  display: table;
  line-height: 0;
  content: "";
}

.dl-horizontal:after {
  clear: both;
}

.dl-horizontal dt {
  float: left;
  width: 160px;
  overflow: hidden;
  clear: left;
  text-align: right;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.dl-horizontal dd {
  margin-left: 180px;
}

hr {
  margin: 20px 0;
  border: 0;
  border-top: 1px solid #eeeeee;
  border-bottom: 1px solid #ffffff;
}

abbr[title],
abbr[data-original-title] {
  cursor: help;
  border-bottom: 1px dotted #999999;
}

abbr.initialism {
  font-size: 90%;
  text-transform: uppercase;
}

blockquote {
  padding: 0 0 0 15px;
  margin: 0 0 20px;
  border-left: 5px solid #eeeeee;
}

blockquote p {
  margin-bottom: 0;
  font-size: 16px;
  font-weight: 300;
  line-height: 25px;
}

blockquote small {
  display: block;
  line-height: 20px;
  color: #999999;
}

blockquote small:before {
  content: '\2014 \00A0';
}

blockquote.pull-right {
  float: right;
  padding-right: 15px;
  padding-left: 0;
  border-right: 5px solid #eeeeee;
  border-left: 0;
}

blockquote.pull-right p,
blockquote.pull-right small {
  text-align: right;
}

blockquote.pull-right small:before {
  content: '';
}

blockquote.pull-right small:after {
  content: '\00A0 \2014';
}

q:before,
q:after,
blockquote:before,
blockquote:after {
  content: "";
}

address {
  display: block;
  margin-bottom: 20px;
  font-style: normal;
  line-height: 20px;
}

code,
pre {
  padding: 0 3px 2px;
  font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
  font-size: 12px;
  color: #333333;
  -webkit-border-radius: 3px;
     -moz-border-radius: 3px;
          border-radius: 3px;
}

code {
  padding: 2px 4px;
  color: #d14;
  white-space: nowrap;
  background-color: #f7f7f9;
  border: 1px solid #e1e1e8;
}

pre {
  display: block;
  padding: 9.5px;
  margin: 0 0 10px;
  font-size: 13px;
  line-height: 20px;
  word-break: break-all;
  word-wrap: break-word;
  white-space: pre;
  white-space: pre-wrap;
  background-color: #f5f5f5;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.15);
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

pre.prettyprint {
  margin-bottom: 20px;
}

pre code {
  padding: 0;
  color: inherit;
  white-space: pre;
  white-space: pre-wrap;
  background-color: transparent;
  border: 0;
}

.pre-scrollable {
  max-height: 340px;
  overflow-y: scroll;
}

form {
  margin: 0 0 20px;
}

fieldset {
  padding: 0;
  margin: 0;
  border: 0;
}

legend {
  display: block;
  width: 100%;
  padding: 0;
  margin-bottom: 20px;
  font-size: 21px;
  line-height: 40px;
  color: #333333;
  border: 0;
  border-bottom: 1px solid #e5e5e5;
}

legend small {
  font-size: 15px;
  color: #999999;
}

label,
input,
button,
select,
textarea {
  font-size: 14px;
  font-weight: normal;
  line-height: 20px;
}

input,
button,
select,
textarea {
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}

label {
  display: block;
  margin-bottom: 5px;
}

select,
textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.uneditable-input {
  display: inline-block;
  height: 20px;
  padding: 4px 6px;
  margin-bottom: 10px;
  font-size: 14px;
  line-height: 20px;
  color: #555555;
  vertical-align: middle;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

input,
textarea,
.uneditable-input {
  width: 206px;
}

textarea {
  height: auto;
}

textarea,
input[type="text"],
input[type="password"],
input[type="datetime"],
input[type="datetime-local"],
input[type="date"],
input[type="month"],
input[type="time"],
input[type="week"],
input[type="number"],
input[type="email"],
input[type="url"],
input[type="search"],
input[type="tel"],
input[type="color"],
.uneditable-input {
  background-color: #ffffff;
  border: 1px solid #cccccc;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
     -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
       -o-transition: border linear 0.2s, box-shadow linear 0.2s;
          transition: border linear 0.2s, box-shadow linear 0.2s;
}

textarea:focus,
input[type="text"]:focus,
input[type="password"]:focus,
input[type="datetime"]:focus,
input[type="datetime-local"]:focus,
input[type="date"]:focus,
input[type="month"]:focus,
input[type="time"]:focus,
input[type="week"]:focus,
input[type="number"]:focus,
input[type="email"]:focus,
input[type="url"]:focus,
input[type="search"]:focus,
input[type="tel"]:focus,
input[type="color"]:focus,
.uneditable-input:focus {
  border-color: rgba(82, 168, 236, 0.8);
  outline: 0;
  outline: thin dotted \9;
  /* IE6-9 */

  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
}

input[type="radio"],
input[type="checkbox"] {
  margin: 4px 0 0;
  margin-top: 1px \9;
  *margin-top: 0;
  line-height: normal;
}

input[type="file"],
input[type="image"],
input[type="submit"],
input[type="reset"],
input[type="button"],
input[type="radio"],
input[type="checkbox"] {
  width: auto;
}

select,
input[type="file"] {
  height: 30px;
  /* In IE7, the height of the select element cannot be changed by height, only font-size */

  *margin-top: 4px;
  /* For IE7, add top margin to align select with labels */

  line-height: 30px;
}

select {
  width: 220px;
  background-color: #ffffff;
  border: 1px solid #cccccc;
}

select[multiple],
select[size] {
  height: auto;
}

select:focus,
input[type="file"]:focus,
input[type="radio"]:focus,
input[type="checkbox"]:focus {
  outline: thin dotted #333;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}

.uneditable-input,
.uneditable-textarea {
  color: #999999;
  cursor: not-allowed;
  background-color: #fcfcfc;
  border-color: #cccccc;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
}

.uneditable-input {
  overflow: hidden;
  white-space: nowrap;
}

.uneditable-textarea {
  width: auto;
  height: auto;
}

input:-moz-placeholder,
textarea:-moz-placeholder {
  color: #999999;
}

input:-ms-input-placeholder,
textarea:-ms-input-placeholder {
  color: #999999;
}

input::-webkit-input-placeholder,
textarea::-webkit-input-placeholder {
  color: #999999;
}

.radio,
.checkbox {
  min-height: 20px;
  padding-left: 20px;
}

.radio input[type="radio"],
.checkbox input[type="checkbox"] {
  float: left;
  margin-left: -20px;
}

.controls > .radio:first-child,
.controls > .checkbox:first-child {
  padding-top: 5px;
}

.radio.inline,
.checkbox.inline {
  display: inline-block;
  padding-top: 5px;
  margin-bottom: 0;
  vertical-align: middle;
}

.radio.inline + .radio.inline,
.checkbox.inline + .checkbox.inline {
  margin-left: 10px;
}

.input-mini {
  width: 60px;
}

.input-small {
  width: 90px;
}

.input-medium {
  width: 150px;
}

.input-large {
  width: 210px;
}

.input-xlarge {
  width: 270px;
}

.input-xxlarge {
  width: 530px;
}

input[class*="span"],
select[class*="span"],
textarea[class*="span"],
.uneditable-input[class*="span"],
.row-fluid input[class*="span"],
.row-fluid select[class*="span"],
.row-fluid textarea[class*="span"],
.row-fluid .uneditable-input[class*="span"] {
  float: none;
  margin-left: 0;
}

.input-append input[class*="span"],
.input-append .uneditable-input[class*="span"],
.input-prepend input[class*="span"],
.input-prepend .uneditable-input[class*="span"],
.row-fluid input[class*="span"],
.row-fluid select[class*="span"],
.row-fluid textarea[class*="span"],
.row-fluid .uneditable-input[class*="span"],
.row-fluid .input-prepend [class*="span"],
.row-fluid .input-append [class*="span"] {
  display: inline-block;
}

input,
textarea,
.uneditable-input {
  margin-left: 0;
}

.controls-row [class*="span"] + [class*="span"] {
  margin-left: 20px;
}

input.span12,
textarea.span12,
.uneditable-input.span12 {
  width: 926px;
}

input.span11,
textarea.span11,
.uneditable-input.span11 {
  width: 846px;
}

input.span10,
textarea.span10,
.uneditable-input.span10 {
  width: 766px;
}

input.span9,
textarea.span9,
.uneditable-input.span9 {
  width: 686px;
}

input.span8,
textarea.span8,
.uneditable-input.span8 {
  width: 606px;
}

input.span7,
textarea.span7,
.uneditable-input.span7 {
  width: 526px;
}

input.span6,
textarea.span6,
.uneditable-input.span6 {
  width: 446px;
}

input.span5,
textarea.span5,
.uneditable-input.span5 {
  width: 366px;
}

input.span4,
textarea.span4,
.uneditable-input.span4 {
  width: 286px;
}

input.span3,
textarea.span3,
.uneditable-input.span3 {
  width: 206px;
}

input.span2,
textarea.span2,
.uneditable-input.span2 {
  width: 126px;
}

input.span1,
textarea.span1,
.uneditable-input.span1 {
  width: 46px;
}

.controls-row {
  *zoom: 1;
}

.controls-row:before,
.controls-row:after {
  display: table;
  line-height: 0;
  content: "";
}

.controls-row:after {
  clear: both;
}

.controls-row [class*="span"],
.row-fluid .controls-row [class*="span"] {
  float: left;
}

.controls-row .checkbox[class*="span"],
.controls-row .radio[class*="span"] {
  padding-top: 5px;
}

input[disabled],
select[disabled],
textarea[disabled],
input[readonly],
select[readonly],
textarea[readonly] {
  cursor: not-allowed;
  background-color: #eeeeee;
}

input[type="radio"][disabled],
input[type="checkbox"][disabled],
input[type="radio"][readonly],
input[type="checkbox"][readonly] {
  background-color: transparent;
}

.control-group.warning .control-label,
.control-group.warning .help-block,
.control-group.warning .help-inline {
  color: #c09853;
}

.control-group.warning .checkbox,
.control-group.warning .radio,
.control-group.warning input,
.control-group.warning select,
.control-group.warning textarea {
  color: #c09853;
}

.control-group.warning input,
.control-group.warning select,
.control-group.warning textarea {
  border-color: #c09853;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.control-group.warning input:focus,
.control-group.warning select:focus,
.control-group.warning textarea:focus {
  border-color: #a47e3c;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e;
}

.control-group.warning .input-prepend .add-on,
.control-group.warning .input-append .add-on {
  color: #c09853;
  background-color: #fcf8e3;
  border-color: #c09853;
}

.control-group.error .control-label,
.control-group.error .help-block,
.control-group.error .help-inline {
  color: #b94a48;
}

.control-group.error .checkbox,
.control-group.error .radio,
.control-group.error input,
.control-group.error select,
.control-group.error textarea {
  color: #b94a48;
}

.control-group.error input,
.control-group.error select,
.control-group.error textarea {
  border-color: #b94a48;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.control-group.error input:focus,
.control-group.error select:focus,
.control-group.error textarea:focus {
  border-color: #953b39;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392;
}

.control-group.error .input-prepend .add-on,
.control-group.error .input-append .add-on {
  color: #b94a48;
  background-color: #f2dede;
  border-color: #b94a48;
}

.control-group.success .control-label,
.control-group.success .help-block,
.control-group.success .help-inline {
  color: #468847;
}

.control-group.success .checkbox,
.control-group.success .radio,
.control-group.success input,
.control-group.success select,
.control-group.success textarea {
  color: #468847;
}

.control-group.success input,
.control-group.success select,
.control-group.success textarea {
  border-color: #468847;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.control-group.success input:focus,
.control-group.success select:focus,
.control-group.success textarea:focus {
  border-color: #356635;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b;
}

.control-group.success .input-prepend .add-on,
.control-group.success .input-append .add-on {
  color: #468847;
  background-color: #dff0d8;
  border-color: #468847;
}

.control-group.info .control-label,
.control-group.info .help-block,
.control-group.info .help-inline {
  color: #3a87ad;
}

.control-group.info .checkbox,
.control-group.info .radio,
.control-group.info input,
.control-group.info select,
.control-group.info textarea {
  color: #3a87ad;
}

.control-group.info input,
.control-group.info select,
.control-group.info textarea {
  border-color: #3a87ad;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
}

.control-group.info input:focus,
.control-group.info select:focus,
.control-group.info textarea:focus {
  border-color: #2d6987;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3;
}

.control-group.info .input-prepend .add-on,
.control-group.info .input-append .add-on {
  color: #3a87ad;
  background-color: #d9edf7;
  border-color: #3a87ad;
}

input:focus:invalid,
textarea:focus:invalid,
select:focus:invalid {
  color: #b94a48;
  border-color: #ee5f5b;
}

input:focus:invalid:focus,
textarea:focus:invalid:focus,
select:focus:invalid:focus {
  border-color: #e9322d;
  -webkit-box-shadow: 0 0 6px #f8b9b7;
     -moz-box-shadow: 0 0 6px #f8b9b7;
          box-shadow: 0 0 6px #f8b9b7;
}

.form-actions {
  padding: 19px 20px 20px;
  margin-top: 20px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border-top: 1px solid #e5e5e5;
  *zoom: 1;
}

.form-actions:before,
.form-actions:after {
  display: table;
  line-height: 0;
  content: "";
}

.form-actions:after {
  clear: both;
}

.help-block,
.help-inline {
  color: #595959;
}

.help-block {
  display: block;
  margin-bottom: 10px;
}

.help-inline {
  display: inline-block;
  *display: inline;
  padding-left: 5px;
  vertical-align: middle;
  *zoom: 1;
}

.input-append,
.input-prepend {
  margin-bottom: 5px;
  font-size: 0;
  white-space: nowrap;
}

.input-append input,
.input-prepend input,
.input-append select,
.input-prepend select,
.input-append .uneditable-input,
.input-prepend .uneditable-input,
.input-append .dropdown-menu,
.input-prepend .dropdown-menu {
  font-size: 14px;
}

.input-append input,
.input-prepend input,
.input-append select,
.input-prepend select,
.input-append .uneditable-input,
.input-prepend .uneditable-input {
  position: relative;
  margin-bottom: 0;
  *margin-left: 0;
  vertical-align: top;
  -webkit-border-radius: 0 4px 4px 0;
     -moz-border-radius: 0 4px 4px 0;
          border-radius: 0 4px 4px 0;
}

.input-append input:focus,
.input-prepend input:focus,
.input-append select:focus,
.input-prepend select:focus,
.input-append .uneditable-input:focus,
.input-prepend .uneditable-input:focus {
  z-index: 2;
}

.input-append .add-on,
.input-prepend .add-on {
  display: inline-block;
  width: auto;
  height: 20px;
  min-width: 16px;
  padding: 4px 5px;
  font-size: 14px;
  font-weight: normal;
  line-height: 20px;
  text-align: center;
  text-shadow: 0 1px 0 #ffffff;
  background-color: #eeeeee;
  border: 1px solid #ccc;
}

.input-append .add-on,
.input-prepend .add-on,
.input-append .btn,
.input-prepend .btn,
.input-append .btn-group > .dropdown-toggle,
.input-prepend .btn-group > .dropdown-toggle {
  vertical-align: top;
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.input-append .active,
.input-prepend .active {
  background-color: #a9dba9;
  border-color: #46a546;
}

.input-prepend .add-on,
.input-prepend .btn {
  margin-right: -1px;
}

.input-prepend .add-on:first-child,
.input-prepend .btn:first-child {
  -webkit-border-radius: 4px 0 0 4px;
     -moz-border-radius: 4px 0 0 4px;
          border-radius: 4px 0 0 4px;
}

.input-append input,
.input-append select,
.input-append .uneditable-input {
  -webkit-border-radius: 4px 0 0 4px;
     -moz-border-radius: 4px 0 0 4px;
          border-radius: 4px 0 0 4px;
}

.input-append input + .btn-group .btn:last-child,
.input-append select + .btn-group .btn:last-child,
.input-append .uneditable-input + .btn-group .btn:last-child {
  -webkit-border-radius: 0 4px 4px 0;
     -moz-border-radius: 0 4px 4px 0;
          border-radius: 0 4px 4px 0;
}

.input-append .add-on,
.input-append .btn,
.input-append .btn-group {
  margin-left: -1px;
}

.input-append .add-on:last-child,
.input-append .btn:last-child,
.input-append .btn-group:last-child > .dropdown-toggle {
  -webkit-border-radius: 0 4px 4px 0;
     -moz-border-radius: 0 4px 4px 0;
          border-radius: 0 4px 4px 0;
}

.input-prepend.input-append input,
.input-prepend.input-append select,
.input-prepend.input-append .uneditable-input {
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.input-prepend.input-append input + .btn-group .btn,
.input-prepend.input-append select + .btn-group .btn,
.input-prepend.input-append .uneditable-input + .btn-group .btn {
  -webkit-border-radius: 0 4px 4px 0;
     -moz-border-radius: 0 4px 4px 0;
          border-radius: 0 4px 4px 0;
}

.input-prepend.input-append .add-on:first-child,
.input-prepend.input-append .btn:first-child {
  margin-right: -1px;
  -webkit-border-radius: 4px 0 0 4px;
     -moz-border-radius: 4px 0 0 4px;
          border-radius: 4px 0 0 4px;
}

.input-prepend.input-append .add-on:last-child,
.input-prepend.input-append .btn:last-child {
  margin-left: -1px;
  -webkit-border-radius: 0 4px 4px 0;
     -moz-border-radius: 0 4px 4px 0;
          border-radius: 0 4px 4px 0;
}

.input-prepend.input-append .btn-group:first-child {
  margin-left: 0;
}

input.search-query {
  padding-right: 14px;
  padding-right: 4px \9;
  padding-left: 14px;
  padding-left: 4px \9;
  /* IE7-8 doesn't have border-radius, so don't indent the padding */

  margin-bottom: 0;
  -webkit-border-radius: 15px;
     -moz-border-radius: 15px;
          border-radius: 15px;
}

/* Allow for input prepend/append in search forms */

.form-search .input-append .search-query,
.form-search .input-prepend .search-query {
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.form-search .input-append .search-query {
  -webkit-border-radius: 14px 0 0 14px;
     -moz-border-radius: 14px 0 0 14px;
          border-radius: 14px 0 0 14px;
}

.form-search .input-append .btn {
  -webkit-border-radius: 0 14px 14px 0;
     -moz-border-radius: 0 14px 14px 0;
          border-radius: 0 14px 14px 0;
}

.form-search .input-prepend .search-query {
  -webkit-border-radius: 0 14px 14px 0;
     -moz-border-radius: 0 14px 14px 0;
          border-radius: 0 14px 14px 0;
}

.form-search .input-prepend .btn {
  -webkit-border-radius: 14px 0 0 14px;
     -moz-border-radius: 14px 0 0 14px;
          border-radius: 14px 0 0 14px;
}

.form-search input,
.form-inline input,
.form-horizontal input,
.form-search textarea,
.form-inline textarea,
.form-horizontal textarea,
.form-search select,
.form-inline select,
.form-horizontal select,
.form-search .help-inline,
.form-inline .help-inline,
.form-horizontal .help-inline,
.form-search .uneditable-input,
.form-inline .uneditable-input,
.form-horizontal .uneditable-input,
.form-search .input-prepend,
.form-inline .input-prepend,
.form-horizontal .input-prepend,
.form-search .input-append,
.form-inline .input-append,
.form-horizontal .input-append {
  display: inline-block;
  *display: inline;
  margin-bottom: 0;
  vertical-align: middle;
  *zoom: 1;
}

.form-search .hide,
.form-inline .hide,
.form-horizontal .hide {
  display: none;
}

.form-search label,
.form-inline label,
.form-search .btn-group,
.form-inline .btn-group {
  display: inline-block;
}

.form-search .input-append,
.form-inline .input-append,
.form-search .input-prepend,
.form-inline .input-prepend {
  margin-bottom: 0;
}

.form-search .radio,
.form-search .checkbox,
.form-inline .radio,
.form-inline .checkbox {
  padding-left: 0;
  margin-bottom: 0;
  vertical-align: middle;
}

.form-search .radio input[type="radio"],
.form-search .checkbox input[type="checkbox"],
.form-inline .radio input[type="radio"],
.form-inline .checkbox input[type="checkbox"] {
  float: left;
  margin-right: 3px;
  margin-left: 0;
}

.control-group {
  margin-bottom: 10px;
}

legend + .control-group {
  margin-top: 20px;
  -webkit-margin-top-collapse: separate;
}

.form-horizontal .control-group {
  margin-bottom: 20px;
  *zoom: 1;
}

.form-horizontal .control-group:before,
.form-horizontal .control-group:after {
  display: table;
  line-height: 0;
  content: "";
}

.form-horizontal .control-group:after {
  clear: both;
}

.form-horizontal .control-label {
  float: left;
  width: 160px;
  padding-top: 5px;
  text-align: right;
}

.form-horizontal .controls {
  *display: inline-block;
  *padding-left: 20px;
  margin-left: 180px;
  *margin-left: 0;
}

.form-horizontal .controls:first-child {
  *padding-left: 180px;
}

.form-horizontal .help-block {
  margin-bottom: 0;
}

.form-horizontal input + .help-block,
.form-horizontal select + .help-block,
.form-horizontal textarea + .help-block,
.form-horizontal .uneditable-input + .help-block,
.form-horizontal .input-prepend + .help-block,
.form-horizontal .input-append + .help-block {
  margin-top: 10px;
}

.form-horizontal .form-actions {
  padding-left: 180px;
}

table {
  max-width: 100%;
  background-color: transparent;
  border-collapse: collapse;
  border-spacing: 0;
}

.table {
  width: 100%;
  margin-bottom: 20px;
}

.table th,
.table td {
  padding: 8px;
  line-height: 20px;
  text-align: left;
  vertical-align: top;
  border-top: 1px solid #dddddd;
}

.table th {
  font-weight: bold;
}

.table thead th {
  vertical-align: bottom;
}

.table caption + thead tr:first-child th,
.table caption + thead tr:first-child td,
.table colgroup + thead tr:first-child th,
.table colgroup + thead tr:first-child td,
.table thead:first-child tr:first-child th,
.table thead:first-child tr:first-child td {
  border-top: 0;
}

.table tbody + tbody {
  border-top: 2px solid #dddddd;
}

.table .table {
  background-color: #ffffff;
}

.table-condensed th,
.table-condensed td {
  padding: 4px 5px;
}

.table-bordered {
  border: 1px solid #dddddd;
  border-collapse: separate;
  *border-collapse: collapse;
  border-left: 0;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

.table-bordered th,
.table-bordered td {
  border-left: 1px solid #dddddd;
}

.table-bordered caption + thead tr:first-child th,
.table-bordered caption + tbody tr:first-child th,
.table-bordered caption + tbody tr:first-child td,
.table-bordered colgroup + thead tr:first-child th,
.table-bordered colgroup + tbody tr:first-child th,
.table-bordered colgroup + tbody tr:first-child td,
.table-bordered thead:first-child tr:first-child th,
.table-bordered tbody:first-child tr:first-child th,
.table-bordered tbody:first-child tr:first-child td {
  border-top: 0;
}

.table-bordered thead:first-child tr:first-child > th:first-child,
.table-bordered tbody:first-child tr:first-child > td:first-child {
  -webkit-border-top-left-radius: 4px;
          border-top-left-radius: 4px;
  -moz-border-radius-topleft: 4px;
}

.table-bordered thead:first-child tr:first-child > th:last-child,
.table-bordered tbody:first-child tr:first-child > td:last-child {
  -webkit-border-top-right-radius: 4px;
          border-top-right-radius: 4px;
  -moz-border-radius-topright: 4px;
}

.table-bordered thead:last-child tr:last-child > th:first-child,
.table-bordered tbody:last-child tr:last-child > td:first-child,
.table-bordered tfoot:last-child tr:last-child > td:first-child {
  -webkit-border-bottom-left-radius: 4px;
          border-bottom-left-radius: 4px;
  -moz-border-radius-bottomleft: 4px;
}

.table-bordered thead:last-child tr:last-child > th:last-child,
.table-bordered tbody:last-child tr:last-child > td:last-child,
.table-bordered tfoot:last-child tr:last-child > td:last-child {
  -webkit-border-bottom-right-radius: 4px;
          border-bottom-right-radius: 4px;
  -moz-border-radius-bottomright: 4px;
}

.table-bordered tfoot + tbody:last-child tr:last-child td:first-child {
  -webkit-border-bottom-left-radius: 0;
          border-bottom-left-radius: 0;
  -moz-border-radius-bottomleft: 0;
}

.table-bordered tfoot + tbody:last-child tr:last-child td:last-child {
  -webkit-border-bottom-right-radius: 0;
          border-bottom-right-radius: 0;
  -moz-border-radius-bottomright: 0;
}

.table-bordered caption + thead tr:first-child th:first-child,
.table-bordered caption + tbody tr:first-child td:first-child,
.table-bordered colgroup + thead tr:first-child th:first-child,
.table-bordered colgroup + tbody tr:first-child td:first-child {
  -webkit-border-top-left-radius: 4px;
          border-top-left-radius: 4px;
  -moz-border-radius-topleft: 4px;
}

.table-bordered caption + thead tr:first-child th:last-child,
.table-bordered caption + tbody tr:first-child td:last-child,
.table-bordered colgroup + thead tr:first-child th:last-child,
.table-bordered colgroup + tbody tr:first-child td:last-child {
  -webkit-border-top-right-radius: 4px;
          border-top-right-radius: 4px;
  -moz-border-radius-topright: 4px;
}

.table-striped tbody > tr:nth-child(odd) > td,
.table-striped tbody > tr:nth-child(odd) > th {
  background-color: #f9f9f9;
}

.table-hover tbody tr:hover td,
.table-hover tbody tr:hover th {
  background-color: #f5f5f5;
}

table td[class*="span"],
table th[class*="span"],
.row-fluid table td[class*="span"],
.row-fluid table th[class*="span"] {
  display: table-cell;
  float: none;
  margin-left: 0;
}

.table td.span1,
.table th.span1 {
  float: none;
  width: 44px;
  margin-left: 0;
}

.table td.span2,
.table th.span2 {
  float: none;
  width: 124px;
  margin-left: 0;
}

.table td.span3,
.table th.span3 {
  float: none;
  width: 204px;
  margin-left: 0;
}

.table td.span4,
.table th.span4 {
  float: none;
  width: 284px;
  margin-left: 0;
}

.table td.span5,
.table th.span5 {
  float: none;
  width: 364px;
  margin-left: 0;
}

.table td.span6,
.table th.span6 {
  float: none;
  width: 444px;
  margin-left: 0;
}

.table td.span7,
.table th.span7 {
  float: none;
  width: 524px;
  margin-left: 0;
}

.table td.span8,
.table th.span8 {
  float: none;
  width: 604px;
  margin-left: 0;
}

.table td.span9,
.table th.span9 {
  float: none;
  width: 684px;
  margin-left: 0;
}

.table td.span10,
.table th.span10 {
  float: none;
  width: 764px;
  margin-left: 0;
}

.table td.span11,
.table th.span11 {
  float: none;
  width: 844px;
  margin-left: 0;
}

.table td.span12,
.table th.span12 {
  float: none;
  width: 924px;
  margin-left: 0;
}

.table tbody tr.success td {
  background-color: #dff0d8;
}

.table tbody tr.error td {
  background-color: #f2dede;
}

.table tbody tr.warning td {
  background-color: #fcf8e3;
}

.table tbody tr.info td {
  background-color: #d9edf7;
}

.table-hover tbody tr.success:hover td {
  background-color: #d0e9c6;
}

.table-hover tbody tr.error:hover td {
  background-color: #ebcccc;
}

.table-hover tbody tr.warning:hover td {
  background-color: #faf2cc;
}

.table-hover tbody tr.info:hover td {
  background-color: #c4e3f3;
}

[class^="icon-"],
[class*=" icon-"] {
  display: inline-block;
  width: 14px;
  height: 14px;
  margin-top: 1px;
  *margin-right: .3em;
  line-height: 14px;
  vertical-align: text-top;
  background-image: url("../img/glyphicons-halflings.png");
  background-position: 14px 14px;
  background-repeat: no-repeat;
}

/* White icons with optional class, or on hover/active states of certain elements */

.icon-white,
.nav-pills > .active > a > [class^="icon-"],
.nav-pills > .active > a > [class*=" icon-"],
.nav-list > .active > a > [class^="icon-"],
.nav-list > .active > a > [class*=" icon-"],
.navbar-inverse .nav > .active > a > [class^="icon-"],
.navbar-inverse .nav > .active > a > [class*=" icon-"],
.dropdown-menu > li > a:hover > [class^="icon-"],
.dropdown-menu > li > a:hover > [class*=" icon-"],
.dropdown-menu > .active > a > [class^="icon-"],
.dropdown-menu > .active > a > [class*=" icon-"],
.dropdown-submenu:hover > a > [class^="icon-"],
.dropdown-submenu:hover > a > [class*=" icon-"] {
  background-image: url("../img/glyphicons-halflings-white.png");
}

.icon-glass {
  background-position: 0      0;
}

.icon-music {
  background-position: -24px 0;
}

.icon-search {
  background-position: -48px 0;
}

.icon-envelope {
  background-position: -72px 0;
}

.icon-heart {
  background-position: -96px 0;
}

.icon-star {
  background-position: -120px 0;
}

.icon-star-empty {
  background-position: -144px 0;
}

.icon-user {
  background-position: -168px 0;
}

.icon-film {
  background-position: -192px 0;
}

.icon-th-large {
  background-position: -216px 0;
}

.icon-th {
  background-position: -240px 0;
}

.icon-th-list {
  background-position: -264px 0;
}

.icon-ok {
  background-position: -288px 0;
}

.icon-remove {
  background-position: -312px 0;
}

.icon-zoom-in {
  background-position: -336px 0;
}

.icon-zoom-out {
  background-position: -360px 0;
}

.icon-off {
  background-position: -384px 0;
}

.icon-signal {
  background-position: -408px 0;
}

.icon-cog {
  background-position: -432px 0;
}

.icon-trash {
  background-position: -456px 0;
}

.icon-home {
  background-position: 0 -24px;
}

.icon-file {
  background-position: -24px -24px;
}

.icon-time {
  background-position: -48px -24px;
}

.icon-road {
  background-position: -72px -24px;
}

.icon-download-alt {
  background-position: -96px -24px;
}

.icon-download {
  background-position: -120px -24px;
}

.icon-upload {
  background-position: -144px -24px;
}

.icon-inbox {
  background-position: -168px -24px;
}

.icon-play-circle {
  background-position: -192px -24px;
}

.icon-repeat {
  background-position: -216px -24px;
}

.icon-refresh {
  background-position: -240px -24px;
}

.icon-list-alt {
  background-position: -264px -24px;
}

.icon-lock {
  background-position: -287px -24px;
}

.icon-flag {
  background-position: -312px -24px;
}

.icon-headphones {
  background-position: -336px -24px;
}

.icon-volume-off {
  background-position: -360px -24px;
}

.icon-volume-down {
  background-position: -384px -24px;
}

.icon-volume-up {
  background-position: -408px -24px;
}

.icon-qrcode {
  background-position: -432px -24px;
}

.icon-barcode {
  background-position: -456px -24px;
}

.icon-tag {
  background-position: 0 -48px;
}

.icon-tags {
  background-position: -25px -48px;
}

.icon-book {
  background-position: -48px -48px;
}

.icon-bookmark {
  background-position: -72px -48px;
}

.icon-print {
  background-position: -96px -48px;
}

.icon-camera {
  background-position: -120px -48px;
}

.icon-font {
  background-position: -144px -48px;
}

.icon-bold {
  background-position: -167px -48px;
}

.icon-italic {
  background-position: -192px -48px;
}

.icon-text-height {
  background-position: -216px -48px;
}

.icon-text-width {
  background-position: -240px -48px;
}

.icon-align-left {
  background-position: -264px -48px;
}

.icon-align-center {
  background-position: -288px -48px;
}

.icon-align-right {
  background-position: -312px -48px;
}

.icon-align-justify {
  background-position: -336px -48px;
}

.icon-list {
  background-position: -360px -48px;
}

.icon-indent-left {
  background-position: -384px -48px;
}

.icon-indent-right {
  background-position: -408px -48px;
}

.icon-facetime-video {
  background-position: -432px -48px;
}

.icon-picture {
  background-position: -456px -48px;
}

.icon-pencil {
  background-position: 0 -72px;
}

.icon-map-marker {
  background-position: -24px -72px;
}

.icon-adjust {
  background-position: -48px -72px;
}

.icon-tint {
  background-position: -72px -72px;
}

.icon-edit {
  background-position: -96px -72px;
}

.icon-share {
  background-position: -120px -72px;
}

.icon-check {
  background-position: -144px -72px;
}

.icon-move {
  background-position: -168px -72px;
}

.icon-step-backward {
  background-position: -192px -72px;
}

.icon-fast-backward {
  background-position: -216px -72px;
}

.icon-backward {
  background-position: -240px -72px;
}

.icon-play {
  background-position: -264px -72px;
}

.icon-pause {
  background-position: -288px -72px;
}

.icon-stop {
  background-position: -312px -72px;
}

.icon-forward {
  background-position: -336px -72px;
}

.icon-fast-forward {
  background-position: -360px -72px;
}

.icon-step-forward {
  background-position: -384px -72px;
}

.icon-eject {
  background-position: -408px -72px;
}

.icon-chevron-left {
  background-position: -432px -72px;
}

.icon-chevron-right {
  background-position: -456px -72px;
}

.icon-plus-sign {
  background-position: 0 -96px;
}

.icon-minus-sign {
  background-position: -24px -96px;
}

.icon-remove-sign {
  background-position: -48px -96px;
}

.icon-ok-sign {
  background-position: -72px -96px;
}

.icon-question-sign {
  background-position: -96px -96px;
}

.icon-info-sign {
  background-position: -120px -96px;
}

.icon-screenshot {
  background-position: -144px -96px;
}

.icon-remove-circle {
  background-position: -168px -96px;
}

.icon-ok-circle {
  background-position: -192px -96px;
}

.icon-ban-circle {
  background-position: -216px -96px;
}

.icon-arrow-left {
  background-position: -240px -96px;
}

.icon-arrow-right {
  background-position: -264px -96px;
}

.icon-arrow-up {
  background-position: -289px -96px;
}

.icon-arrow-down {
  background-position: -312px -96px;
}

.icon-share-alt {
  background-position: -336px -96px;
}

.icon-resize-full {
  background-position: -360px -96px;
}

.icon-resize-small {
  background-position: -384px -96px;
}

.icon-plus {
  background-position: -408px -96px;
}

.icon-minus {
  background-position: -433px -96px;
}

.icon-asterisk {
  background-position: -456px -96px;
}

.icon-exclamation-sign {
  background-position: 0 -120px;
}

.icon-gift {
  background-position: -24px -120px;
}

.icon-leaf {
  background-position: -48px -120px;
}

.icon-fire {
  background-position: -72px -120px;
}

.icon-eye-open {
  background-position: -96px -120px;
}

.icon-eye-close {
  background-position: -120px -120px;
}

.icon-warning-sign {
  background-position: -144px -120px;
}

.icon-plane {
  background-position: -168px -120px;
}

.icon-calendar {
  background-position: -192px -120px;
}

.icon-random {
  width: 16px;
  background-position: -216px -120px;
}

.icon-comment {
  background-position: -240px -120px;
}

.icon-magnet {
  background-position: -264px -120px;
}

.icon-chevron-up {
  background-position: -288px -120px;
}

.icon-chevron-down {
  background-position: -313px -119px;
}

.icon-retweet {
  background-position: -336px -120px;
}

.icon-shopping-cart {
  background-position: -360px -120px;
}

.icon-folder-close {
  background-position: -384px -120px;
}

.icon-folder-open {
  width: 16px;
  background-position: -408px -120px;
}

.icon-resize-vertical {
  background-position: -432px -119px;
}

.icon-resize-horizontal {
  background-position: -456px -118px;
}

.icon-hdd {
  background-position: 0 -144px;
}

.icon-bullhorn {
  background-position: -24px -144px;
}

.icon-bell {
  background-position: -48px -144px;
}

.icon-certificate {
  background-position: -72px -144px;
}

.icon-thumbs-up {
  background-position: -96px -144px;
}

.icon-thumbs-down {
  background-position: -120px -144px;
}

.icon-hand-right {
  background-position: -144px -144px;
}

.icon-hand-left {
  background-position: -168px -144px;
}

.icon-hand-up {
  background-position: -192px -144px;
}

.icon-hand-down {
  background-position: -216px -144px;
}

.icon-circle-arrow-right {
  background-position: -240px -144px;
}

.icon-circle-arrow-left {
  background-position: -264px -144px;
}

.icon-circle-arrow-up {
  background-position: -288px -144px;
}

.icon-circle-arrow-down {
  background-position: -312px -144px;
}

.icon-globe {
  background-position: -336px -144px;
}

.icon-wrench {
  background-position: -360px -144px;
}

.icon-tasks {
  background-position: -384px -144px;
}

.icon-filter {
  background-position: -408px -144px;
}

.icon-briefcase {
  background-position: -432px -144px;
}

.icon-fullscreen {
  background-position: -456px -144px;
}

.dropup,
.dropdown {
  position: relative;
}

.dropdown-toggle {
  *margin-bottom: -3px;
}

.dropdown-toggle:active,
.open .dropdown-toggle {
  outline: 0;
}

.caret {
  display: inline-block;
  width: 0;
  height: 0;
  vertical-align: top;
  border-top: 4px solid #000000;
  border-right: 4px solid transparent;
  border-left: 4px solid transparent;
  content: "";
}

.dropdown .caret {
  margin-top: 8px;
  margin-left: 2px;
}

.dropdown-menu {
  position: absolute;
  top: 100%;
  left: 0;
  z-index: 1000;
  display: none;
  float: left;
  min-width: 160px;
  padding: 5px 0;
  margin: 2px 0 0;
  list-style: none;
  background-color: #ffffff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  *border-right-width: 2px;
  *border-bottom-width: 2px;
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  -webkit-background-clip: padding-box;
     -moz-background-clip: padding;
          background-clip: padding-box;
}

.dropdown-menu.pull-right {
  right: 0;
  left: auto;
}

.dropdown-menu .divider {
  *width: 100%;
  height: 1px;
  margin: 9px 1px;
  *margin: -5px 0 5px;
  overflow: hidden;
  background-color: #e5e5e5;
  border-bottom: 1px solid #ffffff;
}

.dropdown-menu li > a {
  display: block;
  padding: 3px 20px;
  clear: both;
  font-weight: normal;
  line-height: 20px;
  color: #333333;
  white-space: nowrap;
}

.dropdown-menu li > a:hover,
.dropdown-menu li > a:focus,
.dropdown-submenu:hover > a {
  color: #ffffff;
  text-decoration: none;
  background-color: #0081c2;
  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
}

.dropdown-menu .active > a,
.dropdown-menu .active > a:hover {
  color: #ffffff;
  text-decoration: none;
  background-color: #0081c2;
  background-image: -moz-linear-gradient(top, #0088cc, #0077b3);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3));
  background-image: -webkit-linear-gradient(top, #0088cc, #0077b3);
  background-image: -o-linear-gradient(top, #0088cc, #0077b3);
  background-image: linear-gradient(to bottom, #0088cc, #0077b3);
  background-repeat: repeat-x;
  outline: 0;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0);
}

.dropdown-menu .disabled > a,
.dropdown-menu .disabled > a:hover {
  color: #999999;
}

.dropdown-menu .disabled > a:hover {
  text-decoration: none;
  cursor: default;
  background-color: transparent;
  background-image: none;
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.open {
  *z-index: 1000;
}

.open > .dropdown-menu {
  display: block;
}

.pull-right > .dropdown-menu {
  right: 0;
  left: auto;
}

.dropup .caret,
.navbar-fixed-bottom .dropdown .caret {
  border-top: 0;
  border-bottom: 4px solid #000000;
  content: "";
}

.dropup .dropdown-menu,
.navbar-fixed-bottom .dropdown .dropdown-menu {
  top: auto;
  bottom: 100%;
  margin-bottom: 1px;
}

.dropdown-submenu {
  position: relative;
}

.dropdown-submenu > .dropdown-menu {
  top: 0;
  left: 100%;
  margin-top: -6px;
  margin-left: -1px;
  -webkit-border-radius: 0 6px 6px 6px;
     -moz-border-radius: 0 6px 6px 6px;
          border-radius: 0 6px 6px 6px;
}

.dropdown-submenu:hover > .dropdown-menu {
  display: block;
}

.dropup .dropdown-submenu > .dropdown-menu {
  top: auto;
  bottom: 0;
  margin-top: 0;
  margin-bottom: -2px;
  -webkit-border-radius: 5px 5px 5px 0;
     -moz-border-radius: 5px 5px 5px 0;
          border-radius: 5px 5px 5px 0;
}

.dropdown-submenu > a:after {
  display: block;
  float: right;
  width: 0;
  height: 0;
  margin-top: 5px;
  margin-right: -10px;
  border-color: transparent;
  border-left-color: #cccccc;
  border-style: solid;
  border-width: 5px 0 5px 5px;
  content: " ";
}

.dropdown-submenu:hover > a:after {
  border-left-color: #ffffff;
}

.dropdown-submenu.pull-left {
  float: none;
}

.dropdown-submenu.pull-left > .dropdown-menu {
  left: -100%;
  margin-left: 10px;
  -webkit-border-radius: 6px 0 6px 6px;
     -moz-border-radius: 6px 0 6px 6px;
          border-radius: 6px 0 6px 6px;
}

.dropdown .dropdown-menu .nav-header {
  padding-right: 20px;
  padding-left: 20px;
}

.typeahead {
  z-index: 1051;
  margin-top: 2px;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

.well {
  min-height: 20px;
  padding: 19px;
  margin-bottom: 20px;
  background-color: #f5f5f5;
  border: 1px solid #e3e3e3;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
}

.well blockquote {
  border-color: #ddd;
  border-color: rgba(0, 0, 0, 0.15);
}

.well-large {
  padding: 24px;
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
}

.well-small {
  padding: 9px;
  -webkit-border-radius: 3px;
     -moz-border-radius: 3px;
          border-radius: 3px;
}

.fade {
  opacity: 0;
  -webkit-transition: opacity 0.15s linear;
     -moz-transition: opacity 0.15s linear;
       -o-transition: opacity 0.15s linear;
          transition: opacity 0.15s linear;
}

.fade.in {
  opacity: 1;
}

.collapse {
  position: relative;
  height: 0;
  overflow: hidden;
  -webkit-transition: height 0.35s ease;
     -moz-transition: height 0.35s ease;
       -o-transition: height 0.35s ease;
          transition: height 0.35s ease;
}

.collapse.in {
  height: auto;
}

.close {
  float: right;
  font-size: 20px;
  font-weight: bold;
  line-height: 20px;
  color: #000000;
  text-shadow: 0 1px 0 #ffffff;
  opacity: 0.2;
  filter: alpha(opacity=20);
}

.close:hover {
  color: #000000;
  text-decoration: none;
  cursor: pointer;
  opacity: 0.4;
  filter: alpha(opacity=40);
}

button.close {
  padding: 0;
  cursor: pointer;
  background: transparent;
  border: 0;
  -webkit-appearance: none;
}

.btn {
  display: inline-block;
  *display: inline;
  padding: 4px 12px;
  margin-bottom: 0;
  *margin-left: .3em;
  font-size: 14px;
  line-height: 20px;
  color: #333333;
  text-align: center;
  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
  vertical-align: middle;
  cursor: pointer;
  background-color: #f5f5f5;
  *background-color: #e6e6e6;
  background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));
  background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);
  background-image: -o-linear-gradient(top, #ffffff, #e6e6e6);
  background-image: linear-gradient(to bottom, #ffffff, #e6e6e6);
  background-repeat: repeat-x;
  border: 1px solid #bbbbbb;
  *border: 0;
  border-color: #e6e6e6 #e6e6e6 #bfbfbf;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  border-bottom-color: #a2a2a2;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  *zoom: 1;
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}

.btn:hover,
.btn:active,
.btn.active,
.btn.disabled,
.btn[disabled] {
  color: #333333;
  background-color: #e6e6e6;
  *background-color: #d9d9d9;
}

.btn:active,
.btn.active {
  background-color: #cccccc \9;
}

.btn:first-child {
  *margin-left: 0;
}

.btn:hover {
  color: #333333;
  text-decoration: none;
  background-position: 0 -15px;
  -webkit-transition: background-position 0.1s linear;
     -moz-transition: background-position 0.1s linear;
       -o-transition: background-position 0.1s linear;
          transition: background-position 0.1s linear;
}

.btn:focus {
  outline: thin dotted #333;
  outline: 5px auto -webkit-focus-ring-color;
  outline-offset: -2px;
}

.btn.active,
.btn:active {
  background-image: none;
  outline: 0;
  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
}

.btn.disabled,
.btn[disabled] {
  cursor: default;
  background-image: none;
  opacity: 0.65;
  filter: alpha(opacity=65);
  -webkit-box-shadow: none;
     -moz-box-shadow: none;
          box-shadow: none;
}

.btn-large {
  padding: 11px 19px;
  font-size: 17.5px;
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
}

.btn-large [class^="icon-"],
.btn-large [class*=" icon-"] {
  margin-top: 4px;
}

.btn-small {
  padding: 2px 10px;
  font-size: 11.9px;
  -webkit-border-radius: 3px;
     -moz-border-radius: 3px;
          border-radius: 3px;
}

.btn-small [class^="icon-"],
.btn-small [class*=" icon-"] {
  margin-top: 0;
}

.btn-mini [class^="icon-"],
.btn-mini [class*=" icon-"] {
  margin-top: -1px;
}

.btn-mini {
  padding: 0 6px;
  font-size: 10.5px;
  -webkit-border-radius: 3px;
     -moz-border-radius: 3px;
          border-radius: 3px;
}

.btn-block {
  display: block;
  width: 100%;
  padding-right: 0;
  padding-left: 0;
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

.btn-block + .btn-block {
  margin-top: 5px;
}

input[type="submit"].btn-block,
input[type="reset"].btn-block,
input[type="button"].btn-block {
  width: 100%;
}

.btn-primary.active,
.btn-warning.active,
.btn-danger.active,
.btn-success.active,
.btn-info.active,
.btn-inverse.active {
  color: rgba(255, 255, 255, 0.75);
}

.btn {
  border-color: #c5c5c5;
  border-color: rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.15) rgba(0, 0, 0, 0.25);
}

.btn-primary {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #006dcc;
  *background-color: #0044cc;
  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
  background-image: linear-gradient(to bottom, #0088cc, #0044cc);
  background-repeat: repeat-x;
  border-color: #0044cc #0044cc #002a80;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.btn-primary:hover,
.btn-primary:active,
.btn-primary.active,
.btn-primary.disabled,
.btn-primary[disabled] {
  color: #ffffff;
  background-color: #0044cc;
  *background-color: #003bb3;
}

.btn-primary:active,
.btn-primary.active {
  background-color: #003399 \9;
}

.btn-warning {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #faa732;
  *background-color: #f89406;
  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
  background-image: -o-linear-gradient(top, #fbb450, #f89406);
  background-image: linear-gradient(to bottom, #fbb450, #f89406);
  background-repeat: repeat-x;
  border-color: #f89406 #f89406 #ad6704;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.btn-warning:hover,
.btn-warning:active,
.btn-warning.active,
.btn-warning.disabled,
.btn-warning[disabled] {
  color: #ffffff;
  background-color: #f89406;
  *background-color: #df8505;
}

.btn-warning:active,
.btn-warning.active {
  background-color: #c67605 \9;
}

.btn-danger {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #da4f49;
  *background-color: #bd362f;
  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
  background-image: linear-gradient(to bottom, #ee5f5b, #bd362f);
  background-repeat: repeat-x;
  border-color: #bd362f #bd362f #802420;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.btn-danger:hover,
.btn-danger:active,
.btn-danger.active,
.btn-danger.disabled,
.btn-danger[disabled] {
  color: #ffffff;
  background-color: #bd362f;
  *background-color: #a9302a;
}

.btn-danger:active,
.btn-danger.active {
  background-color: #942a25 \9;
}

.btn-success {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #5bb75b;
  *background-color: #51a351;
  background-image: -moz-linear-gradient(top, #62c462, #51a351);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
  background-image: -o-linear-gradient(top, #62c462, #51a351);
  background-image: linear-gradient(to bottom, #62c462, #51a351);
  background-repeat: repeat-x;
  border-color: #51a351 #51a351 #387038;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.btn-success:hover,
.btn-success:active,
.btn-success.active,
.btn-success.disabled,
.btn-success[disabled] {
  color: #ffffff;
  background-color: #51a351;
  *background-color: #499249;
}

.btn-success:active,
.btn-success.active {
  background-color: #408140 \9;
}

.btn-info {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #49afcd;
  *background-color: #2f96b4;
  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
  background-image: linear-gradient(to bottom, #5bc0de, #2f96b4);
  background-repeat: repeat-x;
  border-color: #2f96b4 #2f96b4 #1f6377;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.btn-info:hover,
.btn-info:active,
.btn-info.active,
.btn-info.disabled,
.btn-info[disabled] {
  color: #ffffff;
  background-color: #2f96b4;
  *background-color: #2a85a0;
}

.btn-info:active,
.btn-info.active {
  background-color: #24748c \9;
}

.btn-inverse {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #363636;
  *background-color: #222222;
  background-image: -moz-linear-gradient(top, #444444, #222222);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222));
  background-image: -webkit-linear-gradient(top, #444444, #222222);
  background-image: -o-linear-gradient(top, #444444, #222222);
  background-image: linear-gradient(to bottom, #444444, #222222);
  background-repeat: repeat-x;
  border-color: #222222 #222222 #000000;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.btn-inverse:hover,
.btn-inverse:active,
.btn-inverse.active,
.btn-inverse.disabled,
.btn-inverse[disabled] {
  color: #ffffff;
  background-color: #222222;
  *background-color: #151515;
}

.btn-inverse:active,
.btn-inverse.active {
  background-color: #080808 \9;
}

button.btn,
input[type="submit"].btn {
  *padding-top: 3px;
  *padding-bottom: 3px;
}

button.btn::-moz-focus-inner,
input[type="submit"].btn::-moz-focus-inner {
  padding: 0;
  border: 0;
}

button.btn.btn-large,
input[type="submit"].btn.btn-large {
  *padding-top: 7px;
  *padding-bottom: 7px;
}

button.btn.btn-small,
input[type="submit"].btn.btn-small {
  *padding-top: 3px;
  *padding-bottom: 3px;
}

button.btn.btn-mini,
input[type="submit"].btn.btn-mini {
  *padding-top: 1px;
  *padding-bottom: 1px;
}

.btn-link,
.btn-link:active,
.btn-link[disabled] {
  background-color: transparent;
  background-image: none;
  -webkit-box-shadow: none;
     -moz-box-shadow: none;
          box-shadow: none;
}

.btn-link {
  color: #0088cc;
  cursor: pointer;
  border-color: transparent;
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.btn-link:hover {
  color: #005580;
  text-decoration: underline;
  background-color: transparent;
}

.btn-link[disabled]:hover {
  color: #333333;
  text-decoration: none;
}

.btn-group {
  position: relative;
  display: inline-block;
  *display: inline;
  *margin-left: .3em;
  font-size: 0;
  white-space: nowrap;
  vertical-align: middle;
  *zoom: 1;
}

.btn-group:first-child {
  *margin-left: 0;
}

.btn-group + .btn-group {
  margin-left: 5px;
}

.btn-toolbar {
  margin-top: 10px;
  margin-bottom: 10px;
  font-size: 0;
}

.btn-toolbar > .btn + .btn,
.btn-toolbar > .btn-group + .btn,
.btn-toolbar > .btn + .btn-group {
  margin-left: 5px;
}

.btn-group > .btn {
  position: relative;
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.btn-group > .btn + .btn {
  margin-left: -1px;
}

.btn-group > .btn,
.btn-group > .dropdown-menu,
.btn-group > .popover {
  font-size: 14px;
}

.btn-group > .btn-mini {
  font-size: 10.5px;
}

.btn-group > .btn-small {
  font-size: 11.9px;
}

.btn-group > .btn-large {
  font-size: 17.5px;
}

.btn-group > .btn:first-child {
  margin-left: 0;
  -webkit-border-bottom-left-radius: 4px;
          border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
          border-top-left-radius: 4px;
  -moz-border-radius-bottomleft: 4px;
  -moz-border-radius-topleft: 4px;
}

.btn-group > .btn:last-child,
.btn-group > .dropdown-toggle {
  -webkit-border-top-right-radius: 4px;
          border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
          border-bottom-right-radius: 4px;
  -moz-border-radius-topright: 4px;
  -moz-border-radius-bottomright: 4px;
}

.btn-group > .btn.large:first-child {
  margin-left: 0;
  -webkit-border-bottom-left-radius: 6px;
          border-bottom-left-radius: 6px;
  -webkit-border-top-left-radius: 6px;
          border-top-left-radius: 6px;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topleft: 6px;
}

.btn-group > .btn.large:last-child,
.btn-group > .large.dropdown-toggle {
  -webkit-border-top-right-radius: 6px;
          border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 6px;
          border-bottom-right-radius: 6px;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 6px;
}

.btn-group > .btn:hover,
.btn-group > .btn:focus,
.btn-group > .btn:active,
.btn-group > .btn.active {
  z-index: 2;
}

.btn-group .dropdown-toggle:active,
.btn-group.open .dropdown-toggle {
  outline: 0;
}

.btn-group > .btn + .dropdown-toggle {
  *padding-top: 5px;
  padding-right: 8px;
  *padding-bottom: 5px;
  padding-left: 8px;
  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
     -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
          box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
}

.btn-group > .btn-mini + .dropdown-toggle {
  *padding-top: 2px;
  padding-right: 5px;
  *padding-bottom: 2px;
  padding-left: 5px;
}

.btn-group > .btn-small + .dropdown-toggle {
  *padding-top: 5px;
  *padding-bottom: 4px;
}

.btn-group > .btn-large + .dropdown-toggle {
  *padding-top: 7px;
  padding-right: 12px;
  *padding-bottom: 7px;
  padding-left: 12px;
}

.btn-group.open .dropdown-toggle {
  background-image: none;
  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
     -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
          box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
}

.btn-group.open .btn.dropdown-toggle {
  background-color: #e6e6e6;
}

.btn-group.open .btn-primary.dropdown-toggle {
  background-color: #0044cc;
}

.btn-group.open .btn-warning.dropdown-toggle {
  background-color: #f89406;
}

.btn-group.open .btn-danger.dropdown-toggle {
  background-color: #bd362f;
}

.btn-group.open .btn-success.dropdown-toggle {
  background-color: #51a351;
}

.btn-group.open .btn-info.dropdown-toggle {
  background-color: #2f96b4;
}

.btn-group.open .btn-inverse.dropdown-toggle {
  background-color: #222222;
}

.btn .caret {
  margin-top: 8px;
  margin-left: 0;
}

.btn-mini .caret,
.btn-small .caret,
.btn-large .caret {
  margin-top: 6px;
}

.btn-large .caret {
  border-top-width: 5px;
  border-right-width: 5px;
  border-left-width: 5px;
}

.dropup .btn-large .caret {
  border-bottom-width: 5px;
}

.btn-primary .caret,
.btn-warning .caret,
.btn-danger .caret,
.btn-info .caret,
.btn-success .caret,
.btn-inverse .caret {
  border-top-color: #ffffff;
  border-bottom-color: #ffffff;
}

.btn-group-vertical {
  display: inline-block;
  *display: inline;
  /* IE7 inline-block hack */

  *zoom: 1;
}

.btn-group-vertical > .btn {
  display: block;
  float: none;
  max-width: 100%;
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.btn-group-vertical > .btn + .btn {
  margin-top: -1px;
  margin-left: 0;
}

.btn-group-vertical > .btn:first-child {
  -webkit-border-radius: 4px 4px 0 0;
     -moz-border-radius: 4px 4px 0 0;
          border-radius: 4px 4px 0 0;
}

.btn-group-vertical > .btn:last-child {
  -webkit-border-radius: 0 0 4px 4px;
     -moz-border-radius: 0 0 4px 4px;
          border-radius: 0 0 4px 4px;
}

.btn-group-vertical > .btn-large:first-child {
  -webkit-border-radius: 6px 6px 0 0;
     -moz-border-radius: 6px 6px 0 0;
          border-radius: 6px 6px 0 0;
}

.btn-group-vertical > .btn-large:last-child {
  -webkit-border-radius: 0 0 6px 6px;
     -moz-border-radius: 0 0 6px 6px;
          border-radius: 0 0 6px 6px;
}

.alert {
  padding: 8px 35px 8px 14px;
  margin-bottom: 20px;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
  background-color: #fcf8e3;
  border: 1px solid #fbeed5;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

.alert,
.alert h4 {
  color: #c09853;
}

.alert h4 {
  margin: 0;
}

.alert .close {
  position: relative;
  top: -2px;
  right: -21px;
  line-height: 20px;
}

.alert-success {
  color: #468847;
  background-color: #dff0d8;
  border-color: #d6e9c6;
}

.alert-success h4 {
  color: #468847;
}

.alert-danger,
.alert-error {
  color: #b94a48;
  background-color: #f2dede;
  border-color: #eed3d7;
}

.alert-danger h4,
.alert-error h4 {
  color: #b94a48;
}

.alert-info {
  color: #3a87ad;
  background-color: #d9edf7;
  border-color: #bce8f1;
}

.alert-info h4 {
  color: #3a87ad;
}

.alert-block {
  padding-top: 14px;
  padding-bottom: 14px;
}

.alert-block > p,
.alert-block > ul {
  margin-bottom: 0;
}

.alert-block p + p {
  margin-top: 5px;
}

.nav {
  margin-bottom: 20px;
  margin-left: 0;
  list-style: none;
}

.nav > li > a {
  display: block;
}

.nav > li > a:hover {
  text-decoration: none;
  background-color: #eeeeee;
}

.nav > li > a > img {
  max-width: none;
}

.nav > .pull-right {
  float: right;
}

.nav-header {
  display: block;
  padding: 3px 15px;
  font-size: 11px;
  font-weight: bold;
  line-height: 20px;
  color: #999999;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
  text-transform: uppercase;
}

.nav li + .nav-header {
  margin-top: 9px;
}

.nav-list {
  padding-right: 15px;
  padding-left: 15px;
  margin-bottom: 0;
}

.nav-list > li > a,
.nav-list .nav-header {
  margin-right: -15px;
  margin-left: -15px;
  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
}

.nav-list > li > a {
  padding: 3px 15px;
}

.nav-list > .active > a,
.nav-list > .active > a:hover {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
  background-color: #0088cc;
}

.nav-list [class^="icon-"],
.nav-list [class*=" icon-"] {
  margin-right: 2px;
}

.nav-list .divider {
  *width: 100%;
  height: 1px;
  margin: 9px 1px;
  *margin: -5px 0 5px;
  overflow: hidden;
  background-color: #e5e5e5;
  border-bottom: 1px solid #ffffff;
}

.nav-tabs,
.nav-pills {
  *zoom: 1;
}

.nav-tabs:before,
.nav-pills:before,
.nav-tabs:after,
.nav-pills:after {
  display: table;
  line-height: 0;
  content: "";
}

.nav-tabs:after,
.nav-pills:after {
  clear: both;
}

.nav-tabs > li,
.nav-pills > li {
  float: left;
}

.nav-tabs > li > a,
.nav-pills > li > a {
  padding-right: 12px;
  padding-left: 12px;
  margin-right: 2px;
  line-height: 14px;
}

.nav-tabs {
  border-bottom: 1px solid #ddd;
}

.nav-tabs > li {
  margin-bottom: -1px;
}

.nav-tabs > li > a {
  padding-top: 8px;
  padding-bottom: 8px;
  line-height: 20px;
  border: 1px solid transparent;
  -webkit-border-radius: 4px 4px 0 0;
     -moz-border-radius: 4px 4px 0 0;
          border-radius: 4px 4px 0 0;
}

.nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #dddddd;
}

.nav-tabs > .active > a,
.nav-tabs > .active > a:hover {
  color: #555555;
  cursor: default;
  background-color: #ffffff;
  border: 1px solid #ddd;
  border-bottom-color: transparent;
}

.nav-pills > li > a {
  padding-top: 8px;
  padding-bottom: 8px;
  margin-top: 2px;
  margin-bottom: 2px;
  -webkit-border-radius: 5px;
     -moz-border-radius: 5px;
          border-radius: 5px;
}

.nav-pills > .active > a,
.nav-pills > .active > a:hover {
  color: #ffffff;
  background-color: #0088cc;
}

.nav-stacked > li {
  float: none;
}

.nav-stacked > li > a {
  margin-right: 0;
}

.nav-tabs.nav-stacked {
  border-bottom: 0;
}

.nav-tabs.nav-stacked > li > a {
  border: 1px solid #ddd;
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.nav-tabs.nav-stacked > li:first-child > a {
  -webkit-border-top-right-radius: 4px;
          border-top-right-radius: 4px;
  -webkit-border-top-left-radius: 4px;
          border-top-left-radius: 4px;
  -moz-border-radius-topright: 4px;
  -moz-border-radius-topleft: 4px;
}

.nav-tabs.nav-stacked > li:last-child > a {
  -webkit-border-bottom-right-radius: 4px;
          border-bottom-right-radius: 4px;
  -webkit-border-bottom-left-radius: 4px;
          border-bottom-left-radius: 4px;
  -moz-border-radius-bottomright: 4px;
  -moz-border-radius-bottomleft: 4px;
}

.nav-tabs.nav-stacked > li > a:hover {
  z-index: 2;
  border-color: #ddd;
}

.nav-pills.nav-stacked > li > a {
  margin-bottom: 3px;
}

.nav-pills.nav-stacked > li:last-child > a {
  margin-bottom: 1px;
}

.nav-tabs .dropdown-menu {
  -webkit-border-radius: 0 0 6px 6px;
     -moz-border-radius: 0 0 6px 6px;
          border-radius: 0 0 6px 6px;
}

.nav-pills .dropdown-menu {
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
}

.nav .dropdown-toggle .caret {
  margin-top: 6px;
  border-top-color: #0088cc;
  border-bottom-color: #0088cc;
}

.nav .dropdown-toggle:hover .caret {
  border-top-color: #005580;
  border-bottom-color: #005580;
}

/* move down carets for tabs */

.nav-tabs .dropdown-toggle .caret {
  margin-top: 8px;
}

.nav .active .dropdown-toggle .caret {
  border-top-color: #fff;
  border-bottom-color: #fff;
}

.nav-tabs .active .dropdown-toggle .caret {
  border-top-color: #555555;
  border-bottom-color: #555555;
}

.nav > .dropdown.active > a:hover {
  cursor: pointer;
}

.nav-tabs .open .dropdown-toggle,
.nav-pills .open .dropdown-toggle,
.nav > li.dropdown.open.active > a:hover {
  color: #ffffff;
  background-color: #999999;
  border-color: #999999;
}

.nav li.dropdown.open .caret,
.nav li.dropdown.open.active .caret,
.nav li.dropdown.open a:hover .caret {
  border-top-color: #ffffff;
  border-bottom-color: #ffffff;
  opacity: 1;
  filter: alpha(opacity=100);
}

.tabs-stacked .open > a:hover {
  border-color: #999999;
}

.tabbable {
  *zoom: 1;
}

.tabbable:before,
.tabbable:after {
  display: table;
  line-height: 0;
  content: "";
}

.tabbable:after {
  clear: both;
}

.tab-content {
  overflow: auto;
}

.tabs-below > .nav-tabs,
.tabs-right > .nav-tabs,
.tabs-left > .nav-tabs {
  border-bottom: 0;
}

.tab-content > .tab-pane,
.pill-content > .pill-pane {
  display: none;
}

.tab-content > .active,
.pill-content > .active {
  display: block;
}

.tabs-below > .nav-tabs {
  border-top: 1px solid #ddd;
}

.tabs-below > .nav-tabs > li {
  margin-top: -1px;
  margin-bottom: 0;
}

.tabs-below > .nav-tabs > li > a {
  -webkit-border-radius: 0 0 4px 4px;
     -moz-border-radius: 0 0 4px 4px;
          border-radius: 0 0 4px 4px;
}

.tabs-below > .nav-tabs > li > a:hover {
  border-top-color: #ddd;
  border-bottom-color: transparent;
}

.tabs-below > .nav-tabs > .active > a,
.tabs-below > .nav-tabs > .active > a:hover {
  border-color: transparent #ddd #ddd #ddd;
}

.tabs-left > .nav-tabs > li,
.tabs-right > .nav-tabs > li {
  float: none;
}

.tabs-left > .nav-tabs > li > a,
.tabs-right > .nav-tabs > li > a {
  min-width: 74px;
  margin-right: 0;
  margin-bottom: 3px;
}

.tabs-left > .nav-tabs {
  float: left;
  margin-right: 19px;
  border-right: 1px solid #ddd;
}

.tabs-left > .nav-tabs > li > a {
  margin-right: -1px;
  -webkit-border-radius: 4px 0 0 4px;
     -moz-border-radius: 4px 0 0 4px;
          border-radius: 4px 0 0 4px;
}

.tabs-left > .nav-tabs > li > a:hover {
  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
}

.tabs-left > .nav-tabs .active > a,
.tabs-left > .nav-tabs .active > a:hover {
  border-color: #ddd transparent #ddd #ddd;
  *border-right-color: #ffffff;
}

.tabs-right > .nav-tabs {
  float: right;
  margin-left: 19px;
  border-left: 1px solid #ddd;
}

.tabs-right > .nav-tabs > li > a {
  margin-left: -1px;
  -webkit-border-radius: 0 4px 4px 0;
     -moz-border-radius: 0 4px 4px 0;
          border-radius: 0 4px 4px 0;
}

.tabs-right > .nav-tabs > li > a:hover {
  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
}

.tabs-right > .nav-tabs .active > a,
.tabs-right > .nav-tabs .active > a:hover {
  border-color: #ddd #ddd #ddd transparent;
  *border-left-color: #ffffff;
}

.nav > .disabled > a {
  color: #999999;
}

.nav > .disabled > a:hover {
  text-decoration: none;
  cursor: default;
  background-color: transparent;
}

.navbar {
  *position: relative;
  *z-index: 2;
  margin-bottom: 20px;
  overflow: visible;
}

.navbar-inner {
  min-height: 40px;
  padding-right: 20px;
  padding-left: 20px;
  background-color: #fafafa;
  background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));
  background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);
  background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);
  background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);
  background-repeat: repeat-x;
  border: 1px solid #d4d4d4;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);
  *zoom: 1;
  -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
     -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
          box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);
}

.navbar-inner:before,
.navbar-inner:after {
  display: table;
  line-height: 0;
  content: "";
}

.navbar-inner:after {
  clear: both;
}

.navbar .container {
  width: auto;
}

.nav-collapse.collapse {
  height: auto;
  overflow: visible;
}

.navbar .brand {
  display: block;
  float: left;
  padding: 10px 20px 10px;
  margin-left: -20px;
  font-size: 20px;
  font-weight: 200;
  color: #777777;
  text-shadow: 0 1px 0 #ffffff;
}

.navbar .brand:hover {
  text-decoration: none;
}

.navbar-text {
  margin-bottom: 0;
  line-height: 40px;
  color: #777777;
}

.navbar-link {
  color: #777777;
}

.navbar-link:hover {
  color: #333333;
}

.navbar .divider-vertical {
  height: 40px;
  margin: 0 9px;
  border-right: 1px solid #ffffff;
  border-left: 1px solid #f2f2f2;
}

.navbar .btn,
.navbar .btn-group {
  margin-top: 5px;
}

.navbar .btn-group .btn,
.navbar .input-prepend .btn,
.navbar .input-append .btn {
  margin-top: 0;
}

.navbar-form {
  margin-bottom: 0;
  *zoom: 1;
}

.navbar-form:before,
.navbar-form:after {
  display: table;
  line-height: 0;
  content: "";
}

.navbar-form:after {
  clear: both;
}

.navbar-form input,
.navbar-form select,
.navbar-form .radio,
.navbar-form .checkbox {
  margin-top: 5px;
}

.navbar-form input,
.navbar-form select,
.navbar-form .btn {
  display: inline-block;
  margin-bottom: 0;
}

.navbar-form input[type="image"],
.navbar-form input[type="checkbox"],
.navbar-form input[type="radio"] {
  margin-top: 3px;
}

.navbar-form .input-append,
.navbar-form .input-prepend {
  margin-top: 5px;
  white-space: nowrap;
}

.navbar-form .input-append input,
.navbar-form .input-prepend input {
  margin-top: 0;
}

.navbar-search {
  position: relative;
  float: left;
  margin-top: 5px;
  margin-bottom: 0;
}

.navbar-search .search-query {
  padding: 4px 14px;
  margin-bottom: 0;
  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
  font-size: 13px;
  font-weight: normal;
  line-height: 1;
  -webkit-border-radius: 15px;
     -moz-border-radius: 15px;
          border-radius: 15px;
}

.navbar-static-top {
  position: static;
  margin-bottom: 0;
}

.navbar-static-top .navbar-inner {
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.navbar-fixed-top,
.navbar-fixed-bottom {
  position: fixed;
  right: 0;
  left: 0;
  z-index: 1030;
  margin-bottom: 0;
}

.navbar-fixed-top .navbar-inner,
.navbar-static-top .navbar-inner {
  border-width: 0 0 1px;
}

.navbar-fixed-bottom .navbar-inner {
  border-width: 1px 0 0;
}

.navbar-fixed-top .navbar-inner,
.navbar-fixed-bottom .navbar-inner {
  padding-right: 0;
  padding-left: 0;
  -webkit-border-radius: 0;
     -moz-border-radius: 0;
          border-radius: 0;
}

.navbar-static-top .container,
.navbar-fixed-top .container,
.navbar-fixed-bottom .container {
  width: 940px;
}

.navbar-fixed-top {
  top: 0;
}

.navbar-fixed-top .navbar-inner,
.navbar-static-top .navbar-inner {
  -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
     -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
          box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1);
}

.navbar-fixed-bottom {
  bottom: 0;
}

.navbar-fixed-bottom .navbar-inner {
  -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
     -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
          box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1);
}

.navbar .nav {
  position: relative;
  left: 0;
  display: block;
  float: left;
  margin: 0 10px 0 0;
}

.navbar .nav.pull-right {
  float: right;
  margin-right: 0;
}

.navbar .nav > li {
  float: left;
}

.navbar .nav > li > a {
  float: none;
  padding: 10px 15px 10px;
  color: #777777;
  text-decoration: none;
  text-shadow: 0 1px 0 #ffffff;
}

.navbar .nav .dropdown-toggle .caret {
  margin-top: 8px;
}

.navbar .nav > li > a:focus,
.navbar .nav > li > a:hover {
  color: #333333;
  text-decoration: none;
  background-color: transparent;
}

.navbar .nav > .active > a,
.navbar .nav > .active > a:hover,
.navbar .nav > .active > a:focus {
  color: #555555;
  text-decoration: none;
  background-color: #e5e5e5;
  -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
     -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
          box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125);
}

.navbar .btn-navbar {
  display: none;
  float: right;
  padding: 7px 10px;
  margin-right: 5px;
  margin-left: 5px;
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #ededed;
  *background-color: #e5e5e5;
  background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5));
  background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5);
  background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5);
  background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5);
  background-repeat: repeat-x;
  border-color: #e5e5e5 #e5e5e5 #bfbfbf;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
     -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
          box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
}

.navbar .btn-navbar:hover,
.navbar .btn-navbar:active,
.navbar .btn-navbar.active,
.navbar .btn-navbar.disabled,
.navbar .btn-navbar[disabled] {
  color: #ffffff;
  background-color: #e5e5e5;
  *background-color: #d9d9d9;
}

.navbar .btn-navbar:active,
.navbar .btn-navbar.active {
  background-color: #cccccc \9;
}

.navbar .btn-navbar .icon-bar {
  display: block;
  width: 18px;
  height: 2px;
  background-color: #f5f5f5;
  -webkit-border-radius: 1px;
     -moz-border-radius: 1px;
          border-radius: 1px;
  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
     -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
          box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
}

.btn-navbar .icon-bar + .icon-bar {
  margin-top: 3px;
}

.navbar .nav > li > .dropdown-menu:before {
  position: absolute;
  top: -7px;
  left: 9px;
  display: inline-block;
  border-right: 7px solid transparent;
  border-bottom: 7px solid #ccc;
  border-left: 7px solid transparent;
  border-bottom-color: rgba(0, 0, 0, 0.2);
  content: '';
}

.navbar .nav > li > .dropdown-menu:after {
  position: absolute;
  top: -6px;
  left: 10px;
  display: inline-block;
  border-right: 6px solid transparent;
  border-bottom: 6px solid #ffffff;
  border-left: 6px solid transparent;
  content: '';
}

.navbar-fixed-bottom .nav > li > .dropdown-menu:before {
  top: auto;
  bottom: -7px;
  border-top: 7px solid #ccc;
  border-bottom: 0;
  border-top-color: rgba(0, 0, 0, 0.2);
}

.navbar-fixed-bottom .nav > li > .dropdown-menu:after {
  top: auto;
  bottom: -6px;
  border-top: 6px solid #ffffff;
  border-bottom: 0;
}

.navbar .nav li.dropdown > a:hover .caret {
  border-top-color: #555555;
  border-bottom-color: #555555;
}

.navbar .nav li.dropdown.open > .dropdown-toggle,
.navbar .nav li.dropdown.active > .dropdown-toggle,
.navbar .nav li.dropdown.open.active > .dropdown-toggle {
  color: #555555;
  background-color: #e5e5e5;
}

.navbar .nav li.dropdown > .dropdown-toggle .caret {
  border-top-color: #777777;
  border-bottom-color: #777777;
}

.navbar .nav li.dropdown.open > .dropdown-toggle .caret,
.navbar .nav li.dropdown.active > .dropdown-toggle .caret,
.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret {
  border-top-color: #555555;
  border-bottom-color: #555555;
}

.navbar .pull-right > li > .dropdown-menu,
.navbar .nav > li > .dropdown-menu.pull-right {
  right: 0;
  left: auto;
}

.navbar .pull-right > li > .dropdown-menu:before,
.navbar .nav > li > .dropdown-menu.pull-right:before {
  right: 12px;
  left: auto;
}

.navbar .pull-right > li > .dropdown-menu:after,
.navbar .nav > li > .dropdown-menu.pull-right:after {
  right: 13px;
  left: auto;
}

.navbar .pull-right > li > .dropdown-menu .dropdown-menu,
.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu {
  right: 100%;
  left: auto;
  margin-right: -1px;
  margin-left: 0;
  -webkit-border-radius: 6px 0 6px 6px;
     -moz-border-radius: 6px 0 6px 6px;
          border-radius: 6px 0 6px 6px;
}

.navbar-inverse .navbar-inner {
  background-color: #1b1b1b;
  background-image: -moz-linear-gradient(top, #222222, #111111);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111));
  background-image: -webkit-linear-gradient(top, #222222, #111111);
  background-image: -o-linear-gradient(top, #222222, #111111);
  background-image: linear-gradient(to bottom, #222222, #111111);
  background-repeat: repeat-x;
  border-color: #252525;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=0);
}

.navbar-inverse .brand,
.navbar-inverse .nav > li > a {
  color: #999999;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}

.navbar-inverse .brand:hover,
.navbar-inverse .nav > li > a:hover {
  color: #ffffff;
}

.navbar-inverse .brand {
  color: #999999;
}

.navbar-inverse .navbar-text {
  color: #999999;
}

.navbar-inverse .nav > li > a:focus,
.navbar-inverse .nav > li > a:hover {
  color: #ffffff;
  background-color: transparent;
}

.navbar-inverse .nav .active > a,
.navbar-inverse .nav .active > a:hover,
.navbar-inverse .nav .active > a:focus {
  color: #ffffff;
  background-color: #111111;
}

.navbar-inverse .navbar-link {
  color: #999999;
}

.navbar-inverse .navbar-link:hover {
  color: #ffffff;
}

.navbar-inverse .divider-vertical {
  border-right-color: #222222;
  border-left-color: #111111;
}

.navbar-inverse .nav li.dropdown.open > .dropdown-toggle,
.navbar-inverse .nav li.dropdown.active > .dropdown-toggle,
.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle {
  color: #ffffff;
  background-color: #111111;
}

.navbar-inverse .nav li.dropdown > a:hover .caret {
  border-top-color: #ffffff;
  border-bottom-color: #ffffff;
}

.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret {
  border-top-color: #999999;
  border-bottom-color: #999999;
}

.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret,
.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret,
.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret {
  border-top-color: #ffffff;
  border-bottom-color: #ffffff;
}

.navbar-inverse .navbar-search .search-query {
  color: #ffffff;
  background-color: #515151;
  border-color: #111111;
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15);
  -webkit-transition: none;
     -moz-transition: none;
       -o-transition: none;
          transition: none;
}

.navbar-inverse .navbar-search .search-query:-moz-placeholder {
  color: #cccccc;
}

.navbar-inverse .navbar-search .search-query:-ms-input-placeholder {
  color: #cccccc;
}

.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder {
  color: #cccccc;
}

.navbar-inverse .navbar-search .search-query:focus,
.navbar-inverse .navbar-search .search-query.focused {
  padding: 5px 15px;
  color: #333333;
  text-shadow: 0 1px 0 #ffffff;
  background-color: #ffffff;
  border: 0;
  outline: 0;
  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
     -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
          box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
}

.navbar-inverse .btn-navbar {
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #0e0e0e;
  *background-color: #040404;
  background-image: -moz-linear-gradient(top, #151515, #040404);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404));
  background-image: -webkit-linear-gradient(top, #151515, #040404);
  background-image: -o-linear-gradient(top, #151515, #040404);
  background-image: linear-gradient(to bottom, #151515, #040404);
  background-repeat: repeat-x;
  border-color: #040404 #040404 #000000;
  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0);
  filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}

.navbar-inverse .btn-navbar:hover,
.navbar-inverse .btn-navbar:active,
.navbar-inverse .btn-navbar.active,
.navbar-inverse .btn-navbar.disabled,
.navbar-inverse .btn-navbar[disabled] {
  color: #ffffff;
  background-color: #040404;
  *background-color: #000000;
}

.navbar-inverse .btn-navbar:active,
.navbar-inverse .btn-navbar.active {
  background-color: #000000 \9;
}

.breadcrumb {
  padding: 8px 15px;
  margin: 0 0 20px;
  list-style: none;
  background-color: #f5f5f5;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

.breadcrumb > li {
  display: inline-block;
  *display: inline;
  text-shadow: 0 1px 0 #ffffff;
  *zoom: 1;
}

.breadcrumb > li > .divider {
  padding: 0 5px;
  color: #ccc;
}

.breadcrumb > .active {
  color: #999999;
}

.pagination {
  margin: 20px 0;
}

.pagination ul {
  display: inline-block;
  *display: inline;
  margin-bottom: 0;
  margin-left: 0;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
  *zoom: 1;
  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
     -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
          box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}

.pagination ul > li {
  display: inline;
}

.pagination ul > li > a,
.pagination ul > li > span {
  float: left;
  padding: 4px 12px;
  line-height: 20px;
  text-decoration: none;
  background-color: #ffffff;
  border: 1px solid #dddddd;
  border-left-width: 0;
}

.pagination ul > li > a:hover,
.pagination ul > .active > a,
.pagination ul > .active > span {
  background-color: #f5f5f5;
}

.pagination ul > .active > a,
.pagination ul > .active > span {
  color: #999999;
  cursor: default;
}

.pagination ul > .disabled > span,
.pagination ul > .disabled > a,
.pagination ul > .disabled > a:hover {
  color: #999999;
  cursor: default;
  background-color: transparent;
}

.pagination ul > li:first-child > a,
.pagination ul > li:first-child > span {
  border-left-width: 1px;
  -webkit-border-bottom-left-radius: 4px;
          border-bottom-left-radius: 4px;
  -webkit-border-top-left-radius: 4px;
          border-top-left-radius: 4px;
  -moz-border-radius-bottomleft: 4px;
  -moz-border-radius-topleft: 4px;
}

.pagination ul > li:last-child > a,
.pagination ul > li:last-child > span {
  -webkit-border-top-right-radius: 4px;
          border-top-right-radius: 4px;
  -webkit-border-bottom-right-radius: 4px;
          border-bottom-right-radius: 4px;
  -moz-border-radius-topright: 4px;
  -moz-border-radius-bottomright: 4px;
}

.pagination-centered {
  text-align: center;
}

.pagination-right {
  text-align: right;
}

.pagination-large ul > li > a,
.pagination-large ul > li > span {
  padding: 11px 19px;
  font-size: 17.5px;
}

.pagination-large ul > li:first-child > a,
.pagination-large ul > li:first-child > span {
  -webkit-border-bottom-left-radius: 6px;
          border-bottom-left-radius: 6px;
  -webkit-border-top-left-radius: 6px;
          border-top-left-radius: 6px;
  -moz-border-radius-bottomleft: 6px;
  -moz-border-radius-topleft: 6px;
}

.pagination-large ul > li:last-child > a,
.pagination-large ul > li:last-child > span {
  -webkit-border-top-right-radius: 6px;
          border-top-right-radius: 6px;
  -webkit-border-bottom-right-radius: 6px;
          border-bottom-right-radius: 6px;
  -moz-border-radius-topright: 6px;
  -moz-border-radius-bottomright: 6px;
}

.pagination-mini ul > li:first-child > a,
.pagination-small ul > li:first-child > a,
.pagination-mini ul > li:first-child > span,
.pagination-small ul > li:first-child > span {
  -webkit-border-bottom-left-radius: 3px;
          border-bottom-left-radius: 3px;
  -webkit-border-top-left-radius: 3px;
          border-top-left-radius: 3px;
  -moz-border-radius-bottomleft: 3px;
  -moz-border-radius-topleft: 3px;
}

.pagination-mini ul > li:last-child > a,
.pagination-small ul > li:last-child > a,
.pagination-mini ul > li:last-child > span,
.pagination-small ul > li:last-child > span {
  -webkit-border-top-right-radius: 3px;
          border-top-right-radius: 3px;
  -webkit-border-bottom-right-radius: 3px;
          border-bottom-right-radius: 3px;
  -moz-border-radius-topright: 3px;
  -moz-border-radius-bottomright: 3px;
}

.pagination-small ul > li > a,
.pagination-small ul > li > span {
  padding: 2px 10px;
  font-size: 11.9px;
}

.pagination-mini ul > li > a,
.pagination-mini ul > li > span {
  padding: 0 6px;
  font-size: 10.5px;
}

.pager {
  margin: 20px 0;
  text-align: center;
  list-style: none;
  *zoom: 1;
}

.pager:before,
.pager:after {
  display: table;
  line-height: 0;
  content: "";
}

.pager:after {
  clear: both;
}

.pager li {
  display: inline;
}

.pager li > a,
.pager li > span {
  display: inline-block;
  padding: 5px 14px;
  background-color: #fff;
  border: 1px solid #ddd;
  -webkit-border-radius: 15px;
     -moz-border-radius: 15px;
          border-radius: 15px;
}

.pager li > a:hover {
  text-decoration: none;
  background-color: #f5f5f5;
}

.pager .next > a,
.pager .next > span {
  float: right;
}

.pager .previous > a,
.pager .previous > span {
  float: left;
}

.pager .disabled > a,
.pager .disabled > a:hover,
.pager .disabled > span {
  color: #999999;
  cursor: default;
  background-color: #fff;
}

.modal-backdrop {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1040;
  background-color: #000000;
}

.modal-backdrop.fade {
  opacity: 0;
}

.modal-backdrop,
.modal-backdrop.fade.in {
  opacity: 0.8;
  filter: alpha(opacity=80);
}

.modal {
  position: fixed;
  top: 10%;
  left: 50%;
  z-index: 1050;
  width: 560px;
  margin-left: -280px;
  background-color: #ffffff;
  border: 1px solid #999;
  border: 1px solid rgba(0, 0, 0, 0.3);
  *border: 1px solid #999;
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
  outline: none;
  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
     -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
          box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
  -webkit-background-clip: padding-box;
     -moz-background-clip: padding-box;
          background-clip: padding-box;
}

.modal.fade {
  top: -25%;
  -webkit-transition: opacity 0.3s linear, top 0.3s ease-out;
     -moz-transition: opacity 0.3s linear, top 0.3s ease-out;
       -o-transition: opacity 0.3s linear, top 0.3s ease-out;
          transition: opacity 0.3s linear, top 0.3s ease-out;
}

.modal.fade.in {
  top: 10%;
}

.modal-header {
  padding: 9px 15px;
  border-bottom: 1px solid #eee;
}

.modal-header .close {
  margin-top: 2px;
}

.modal-header h3 {
  margin: 0;
  line-height: 30px;
}

.modal-body {
  position: relative;
  max-height: 400px;
  padding: 15px;
  overflow-y: auto;
}

.modal-form {
  margin-bottom: 0;
}

.modal-footer {
  padding: 14px 15px 15px;
  margin-bottom: 0;
  text-align: right;
  background-color: #f5f5f5;
  border-top: 1px solid #ddd;
  -webkit-border-radius: 0 0 6px 6px;
     -moz-border-radius: 0 0 6px 6px;
          border-radius: 0 0 6px 6px;
  *zoom: 1;
  -webkit-box-shadow: inset 0 1px 0 #ffffff;
     -moz-box-shadow: inset 0 1px 0 #ffffff;
          box-shadow: inset 0 1px 0 #ffffff;
}

.modal-footer:before,
.modal-footer:after {
  display: table;
  line-height: 0;
  content: "";
}

.modal-footer:after {
  clear: both;
}

.modal-footer .btn + .btn {
  margin-bottom: 0;
  margin-left: 5px;
}

.modal-footer .btn-group .btn + .btn {
  margin-left: -1px;
}

.modal-footer .btn-block + .btn-block {
  margin-left: 0;
}

.tooltip {
  position: absolute;
  z-index: 1030;
  display: block;
  padding: 5px;
  font-size: 11px;
  opacity: 0;
  filter: alpha(opacity=0);
  visibility: visible;
}

.tooltip.in {
  opacity: 0.8;
  filter: alpha(opacity=80);
}

.tooltip.top {
  margin-top: -3px;
}

.tooltip.right {
  margin-left: 3px;
}

.tooltip.bottom {
  margin-top: 3px;
}

.tooltip.left {
  margin-left: -3px;
}

.tooltip-inner {
  max-width: 200px;
  padding: 3px 8px;
  color: #ffffff;
  text-align: center;
  text-decoration: none;
  background-color: #000000;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

.tooltip-arrow {
  position: absolute;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}

.tooltip.top .tooltip-arrow {
  bottom: 0;
  left: 50%;
  margin-left: -5px;
  border-top-color: #000000;
  border-width: 5px 5px 0;
}

.tooltip.right .tooltip-arrow {
  top: 50%;
  left: 0;
  margin-top: -5px;
  border-right-color: #000000;
  border-width: 5px 5px 5px 0;
}

.tooltip.left .tooltip-arrow {
  top: 50%;
  right: 0;
  margin-top: -5px;
  border-left-color: #000000;
  border-width: 5px 0 5px 5px;
}

.tooltip.bottom .tooltip-arrow {
  top: 0;
  left: 50%;
  margin-left: -5px;
  border-bottom-color: #000000;
  border-width: 0 5px 5px;
}

.popover {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 1010;
  display: none;
  width: 236px;
  padding: 1px;
  text-align: left;
  white-space: normal;
  background-color: #ffffff;
  border: 1px solid #ccc;
  border: 1px solid rgba(0, 0, 0, 0.2);
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
     -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
          box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
  -webkit-background-clip: padding-box;
     -moz-background-clip: padding;
          background-clip: padding-box;
}

.popover.top {
  margin-top: -10px;
}

.popover.right {
  margin-left: 10px;
}

.popover.bottom {
  margin-top: 10px;
}

.popover.left {
  margin-left: -10px;
}

.popover-title {
  padding: 8px 14px;
  margin: 0;
  font-size: 14px;
  font-weight: normal;
  line-height: 18px;
  background-color: #f7f7f7;
  border-bottom: 1px solid #ebebeb;
  -webkit-border-radius: 5px 5px 0 0;
     -moz-border-radius: 5px 5px 0 0;
          border-radius: 5px 5px 0 0;
}

.popover-content {
  padding: 9px 14px;
}

.popover .arrow,
.popover .arrow:after {
  position: absolute;
  display: block;
  width: 0;
  height: 0;
  border-color: transparent;
  border-style: solid;
}

.popover .arrow {
  border-width: 11px;
}

.popover .arrow:after {
  border-width: 10px;
  content: "";
}

.popover.top .arrow {
  bottom: -11px;
  left: 50%;
  margin-left: -11px;
  border-top-color: #999;
  border-top-color: rgba(0, 0, 0, 0.25);
  border-bottom-width: 0;
}

.popover.top .arrow:after {
  bottom: 1px;
  margin-left: -10px;
  border-top-color: #ffffff;
  border-bottom-width: 0;
}

.popover.right .arrow {
  top: 50%;
  left: -11px;
  margin-top: -11px;
  border-right-color: #999;
  border-right-color: rgba(0, 0, 0, 0.25);
  border-left-width: 0;
}

.popover.right .arrow:after {
  bottom: -10px;
  left: 1px;
  border-right-color: #ffffff;
  border-left-width: 0;
}

.popover.bottom .arrow {
  top: -11px;
  left: 50%;
  margin-left: -11px;
  border-bottom-color: #999;
  border-bottom-color: rgba(0, 0, 0, 0.25);
  border-top-width: 0;
}

.popover.bottom .arrow:after {
  top: 1px;
  margin-left: -10px;
  border-bottom-color: #ffffff;
  border-top-width: 0;
}

.popover.left .arrow {
  top: 50%;
  right: -11px;
  margin-top: -11px;
  border-left-color: #999;
  border-left-color: rgba(0, 0, 0, 0.25);
  border-right-width: 0;
}

.popover.left .arrow:after {
  right: 1px;
  bottom: -10px;
  border-left-color: #ffffff;
  border-right-width: 0;
}

.thumbnails {
  margin-left: -20px;
  list-style: none;
  *zoom: 1;
}

.thumbnails:before,
.thumbnails:after {
  display: table;
  line-height: 0;
  content: "";
}

.thumbnails:after {
  clear: both;
}

.row-fluid .thumbnails {
  margin-left: 0;
}

.thumbnails > li {
  float: left;
  margin-bottom: 20px;
  margin-left: 20px;
}

.thumbnail {
  display: block;
  padding: 4px;
  line-height: 20px;
  border: 1px solid #ddd;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
     -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055);
  -webkit-transition: all 0.2s ease-in-out;
     -moz-transition: all 0.2s ease-in-out;
       -o-transition: all 0.2s ease-in-out;
          transition: all 0.2s ease-in-out;
}

a.thumbnail:hover {
  border-color: #0088cc;
  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
     -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
          box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
}

.thumbnail > img {
  display: block;
  max-width: 100%;
  margin-right: auto;
  margin-left: auto;
}

.thumbnail .caption {
  padding: 9px;
  color: #555555;
}

.media,
.media-body {
  overflow: hidden;
  *overflow: visible;
  zoom: 1;
}

.media,
.media .media {
  margin-top: 15px;
}

.media:first-child {
  margin-top: 0;
}

.media-object {
  display: block;
}

.media-heading {
  margin: 0 0 5px;
}

.media .pull-left {
  margin-right: 10px;
}

.media .pull-right {
  margin-left: 10px;
}

.media-list {
  margin-left: 0;
  list-style: none;
}

.label,
.badge {
  display: inline-block;
  padding: 2px 4px;
  font-size: 11.844px;
  font-weight: bold;
  line-height: 14px;
  color: #ffffff;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  white-space: nowrap;
  vertical-align: baseline;
  background-color: #999999;
}

.label {
  -webkit-border-radius: 3px;
     -moz-border-radius: 3px;
          border-radius: 3px;
}

.badge {
  padding-right: 9px;
  padding-left: 9px;
  -webkit-border-radius: 9px;
     -moz-border-radius: 9px;
          border-radius: 9px;
}

.label:empty,
.badge:empty {
  display: none;
}

a.label:hover,
a.badge:hover {
  color: #ffffff;
  text-decoration: none;
  cursor: pointer;
}

.label-important,
.badge-important {
  background-color: #b94a48;
}

.label-important[href],
.badge-important[href] {
  background-color: #953b39;
}

.label-warning,
.badge-warning {
  background-color: #f89406;
}

.label-warning[href],
.badge-warning[href] {
  background-color: #c67605;
}

.label-success,
.badge-success {
  background-color: #468847;
}

.label-success[href],
.badge-success[href] {
  background-color: #356635;
}

.label-info,
.badge-info {
  background-color: #3a87ad;
}

.label-info[href],
.badge-info[href] {
  background-color: #2d6987;
}

.label-inverse,
.badge-inverse {
  background-color: #333333;
}

.label-inverse[href],
.badge-inverse[href] {
  background-color: #1a1a1a;
}

.btn .label,
.btn .badge {
  position: relative;
  top: -1px;
}

.btn-mini .label,
.btn-mini .badge {
  top: 0;
}

@-webkit-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}

@-moz-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}

@-ms-keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}

@-o-keyframes progress-bar-stripes {
  from {
    background-position: 0 0;
  }
  to {
    background-position: 40px 0;
  }
}

@keyframes progress-bar-stripes {
  from {
    background-position: 40px 0;
  }
  to {
    background-position: 0 0;
  }
}

.progress {
  height: 20px;
  margin-bottom: 20px;
  overflow: hidden;
  background-color: #f7f7f7;
  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
  background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9);
  background-repeat: repeat-x;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0);
  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
     -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
          box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
}

.progress .bar {
  float: left;
  width: 0;
  height: 100%;
  font-size: 12px;
  color: #ffffff;
  text-align: center;
  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
  background-color: #0e90d2;
  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
  background-image: -o-linear-gradient(top, #149bdf, #0480be);
  background-image: linear-gradient(to bottom, #149bdf, #0480be);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0);
  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
     -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
  -webkit-transition: width 0.6s ease;
     -moz-transition: width 0.6s ease;
       -o-transition: width 0.6s ease;
          transition: width 0.6s ease;
}

.progress .bar + .bar {
  -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
     -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
          box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15);
}

.progress-striped .bar {
  background-color: #149bdf;
  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  -webkit-background-size: 40px 40px;
     -moz-background-size: 40px 40px;
       -o-background-size: 40px 40px;
          background-size: 40px 40px;
}

.progress.active .bar {
  -webkit-animation: progress-bar-stripes 2s linear infinite;
     -moz-animation: progress-bar-stripes 2s linear infinite;
      -ms-animation: progress-bar-stripes 2s linear infinite;
       -o-animation: progress-bar-stripes 2s linear infinite;
          animation: progress-bar-stripes 2s linear infinite;
}

.progress-danger .bar,
.progress .bar-danger {
  background-color: #dd514c;
  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
  background-image: linear-gradient(to bottom, #ee5f5b, #c43c35);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0);
}

.progress-danger.progress-striped .bar,
.progress-striped .bar-danger {
  background-color: #ee5f5b;
  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}

.progress-success .bar,
.progress .bar-success {
  background-color: #5eb95e;
  background-image: -moz-linear-gradient(top, #62c462, #57a957);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
  background-image: -o-linear-gradient(top, #62c462, #57a957);
  background-image: linear-gradient(to bottom, #62c462, #57a957);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0);
}

.progress-success.progress-striped .bar,
.progress-striped .bar-success {
  background-color: #62c462;
  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}

.progress-info .bar,
.progress .bar-info {
  background-color: #4bb1cf;
  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
  background-image: linear-gradient(to bottom, #5bc0de, #339bb9);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0);
}

.progress-info.progress-striped .bar,
.progress-striped .bar-info {
  background-color: #5bc0de;
  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}

.progress-warning .bar,
.progress .bar-warning {
  background-color: #faa732;
  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
  background-image: -o-linear-gradient(top, #fbb450, #f89406);
  background-image: linear-gradient(to bottom, #fbb450, #f89406);
  background-repeat: repeat-x;
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0);
}

.progress-warning.progress-striped .bar,
.progress-striped .bar-warning {
  background-color: #fbb450;
  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
}

.accordion {
  margin-bottom: 20px;
}

.accordion-group {
  margin-bottom: 2px;
  border: 1px solid #e5e5e5;
  -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;
}

.accordion-heading {
  border-bottom: 0;
}

.accordion-heading .accordion-toggle {
  display: block;
  padding: 8px 15px;
}

.accordion-toggle {
  cursor: pointer;
}

.accordion-inner {
  padding: 9px 15px;
  border-top: 1px solid #e5e5e5;
}

.carousel {
  position: relative;
  margin-bottom: 20px;
  line-height: 1;
}

.carousel-inner {
  position: relative;
  width: 100%;
  overflow: hidden;
}

.carousel-inner > .item {
  position: relative;
  display: none;
  -webkit-transition: 0.6s ease-in-out left;
     -moz-transition: 0.6s ease-in-out left;
       -o-transition: 0.6s ease-in-out left;
          transition: 0.6s ease-in-out left;
}

.carousel-inner > .item > img {
  display: block;
  line-height: 1;
}

.carousel-inner > .active,
.carousel-inner > .next,
.carousel-inner > .prev {
  display: block;
}

.carousel-inner > .active {
  left: 0;
}

.carousel-inner > .next,
.carousel-inner > .prev {
  position: absolute;
  top: 0;
  width: 100%;
}

.carousel-inner > .next {
  left: 100%;
}

.carousel-inner > .prev {
  left: -100%;
}

.carousel-inner > .next.left,
.carousel-inner > .prev.right {
  left: 0;
}

.carousel-inner > .active.left {
  left: -100%;
}

.carousel-inner > .active.right {
  left: 100%;
}

.carousel-control {
  position: absolute;
  top: 40%;
  left: 15px;
  width: 40px;
  height: 40px;
  margin-top: -20px;
  font-size: 60px;
  font-weight: 100;
  line-height: 30px;
  color: #ffffff;
  text-align: center;
  background: #222222;
  border: 3px solid #ffffff;
  -webkit-border-radius: 23px;
     -moz-border-radius: 23px;
          border-radius: 23px;
  opacity: 0.5;
  filter: alpha(opacity=50);
}

.carousel-control.right {
  right: 15px;
  left: auto;
}

.carousel-control:hover {
  color: #ffffff;
  text-decoration: none;
  opacity: 0.9;
  filter: alpha(opacity=90);
}

.carousel-caption {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 15px;
  background: #333333;
  background: rgba(0, 0, 0, 0.75);
}

.carousel-caption h4,
.carousel-caption p {
  line-height: 20px;
  color: #ffffff;
}

.carousel-caption h4 {
  margin: 0 0 5px;
}

.carousel-caption p {
  margin-bottom: 0;
}

.hero-unit {
  padding: 60px;
  margin-bottom: 30px;
  font-size: 18px;
  font-weight: 200;
  line-height: 30px;
  color: inherit;
  background-color: #eeeeee;
  -webkit-border-radius: 6px;
     -moz-border-radius: 6px;
          border-radius: 6px;
}

.hero-unit h1 {
  margin-bottom: 0;
  font-size: 60px;
  line-height: 1;
  letter-spacing: -1px;
  color: inherit;
}

.hero-unit li {
  line-height: 30px;
}

.pull-right {
  float: right;
}

.pull-left {
  float: left;
}

.hide {
  display: none;
}

.show {
  display: block;
}

.invisible {
  visibility: hidden;
}

.affix {
  position: fixed;
}


================================================
FILE: chapter1/recipe1/index.html
================================================
<html>
  <head>
    <script src="js/angular.js"></script>
    <link rel="stylesheet" href="css/bootstrap.css">
  </head>
  <body ng-app>
    <p>This is your first angular expression {{1 + 2}}</p>
  </body>
</html>


================================================
FILE: chapter1/recipe1/js/angular.js
================================================
/**
 * @license AngularJS v1.0.4
 * (c) 2010-2012 Google, Inc. http://angularjs.org
 * License: MIT
 */
(function(window, document, undefined) {
'use strict';

////////////////////////////////////

/**
 * @ngdoc function
 * @name angular.lowercase
 * @function
 *
 * @description Converts the specified string to lowercase.
 * @param {string} string String to be converted to lowercase.
 * @returns {string} Lowercased string.
 */
var lowercase = function(string){return isString(string) ? string.toLowerCase() : string;};


/**
 * @ngdoc function
 * @name angular.uppercase
 * @function
 *
 * @description Converts the specified string to uppercase.
 * @param {string} string String to be converted to uppercase.
 * @returns {string} Uppercased string.
 */
var uppercase = function(string){return isString(string) ? string.toUpperCase() : string;};


var manualLowercase = function(s) {
  return isString(s)
      ? s.replace(/[A-Z]/g, function(ch) {return fromCharCode(ch.charCodeAt(0) | 32);})
      : s;
};
var manualUppercase = function(s) {
  return isString(s)
      ? s.replace(/[a-z]/g, function(ch) {return fromCharCode(ch.charCodeAt(0) & ~32);})
      : s;
};


// String#toLowerCase and String#toUpperCase don't produce correct results in browsers with Turkish
// locale, for this reason we need to detect this case and redefine lowercase/uppercase methods
// with correct but slower alternatives.
if ('i' !== 'I'.toLowerCase()) {
  lowercase = manualLowercase;
  uppercase = manualUppercase;
}

function fromCharCode(code) {return String.fromCharCode(code);}


var Error             = window.Error,
    /** holds major version number for IE or NaN for real browsers */
    msie              = int((/msie (\d+)/.exec(lowercase(navigator.userAgent)) || [])[1]),
    jqLite,           // delay binding since jQuery could be loaded after us.
    jQuery,           // delay binding
    slice             = [].slice,
    push              = [].push,
    toString          = Object.prototype.toString,

    /** @name angular */
    angular           = window.angular || (window.angular = {}),
    angularModule,
    nodeName_,
    uid               = ['0', '0', '0'];

/**
 * @ngdoc function
 * @name angular.forEach
 * @function
 *
 * @description
 * Invokes the `iterator` function once for each item in `obj` collection, which can be either an
 * object or an array. The `iterator` function is invoked with `iterator(value, key)`, where `value`
 * is the value of an object property or an array element and `key` is the object property key or
 * array element index. Specifying a `context` for the function is optional.
 *
 * Note: this function was previously known as `angular.foreach`.
 *
   <pre>
     var values = {name: 'misko', gender: 'male'};
     var log = [];
     angular.forEach(values, function(value, key){
       this.push(key + ': ' + value);
     }, log);
     expect(log).toEqual(['name: misko', 'gender:male']);
   </pre>
 *
 * @param {Object|Array} obj Object to iterate over.
 * @param {Function} iterator Iterator function.
 * @param {Object=} context Object to become context (`this`) for the iterator function.
 * @returns {Object|Array} Reference to `obj`.
 */
function forEach(obj, iterator, context) {
  var key;
  if (obj) {
    if (isFunction(obj)){
      for (key in obj) {
        if (key != 'prototype' && key != 'length' && key != 'name' && obj.hasOwnProperty(key)) {
          iterator.call(context, obj[key], key);
        }
      }
    } else if (obj.forEach && obj.forEach !== forEach) {
      obj.forEach(iterator, context);
    } else if (isObject(obj) && isNumber(obj.length)) {
      for (key = 0; key < obj.length; key++)
        iterator.call(context, obj[key], key);
    } else {
      for (key in obj) {
        if (obj.hasOwnProperty(key)) {
          iterator.call(context, obj[key], key);
        }
      }
    }
  }
  return obj;
}

function sortedKeys(obj) {
  var keys = [];
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      keys.push(key);
    }
  }
  return keys.sort();
}

function forEachSorted(obj, iterator, context) {
  var keys = sortedKeys(obj);
  for ( var i = 0; i < keys.length; i++) {
    iterator.call(context, obj[keys[i]], keys[i]);
  }
  return keys;
}


/**
 * when using forEach the params are value, key, but it is often useful to have key, value.
 * @param {function(string, *)} iteratorFn
 * @returns {function(*, string)}
 */
function reverseParams(iteratorFn) {
  return function(value, key) { iteratorFn(key, value) };
}

/**
 * A consistent way of creating unique IDs in angular. The ID is a sequence of alpha numeric
 * characters such as '012ABC'. The reason why we are not using simply a number counter is that
 * the number string gets longer over time, and it can also overflow, where as the the nextId
 * will grow much slower, it is a string, and it will never overflow.
 *
 * @returns an unique alpha-numeric string
 */
function nextUid() {
  var index = uid.length;
  var digit;

  while(index) {
    index--;
    digit = uid[index].charCodeAt(0);
    if (digit == 57 /*'9'*/) {
      uid[index] = 'A';
      return uid.join('');
    }
    if (digit == 90  /*'Z'*/) {
      uid[index] = '0';
    } else {
      uid[index] = String.fromCharCode(digit + 1);
      return uid.join('');
    }
  }
  uid.unshift('0');
  return uid.join('');
}

/**
 * @ngdoc function
 * @name angular.extend
 * @function
 *
 * @description
 * Extends the destination object `dst` by copying all of the properties from the `src` object(s)
 * to `dst`. You can specify multiple `src` objects.
 *
 * @param {Object} dst Destination object.
 * @param {...Object} src Source object(s).
 */
function extend(dst) {
  forEach(arguments, function(obj){
    if (obj !== dst) {
      forEach(obj, function(value, key){
        dst[key] = value;
      });
    }
  });
  return dst;
}

function int(str) {
  return parseInt(str, 10);
}


function inherit(parent, extra) {
  return extend(new (extend(function() {}, {prototype:parent}))(), extra);
}


/**
 * @ngdoc function
 * @name angular.noop
 * @function
 *
 * @description
 * A function that performs no operations. This function can be useful when writing code in the
 * functional style.
   <pre>
     function foo(callback) {
       var result = calculateResult();
       (callback || angular.noop)(result);
     }
   </pre>
 */
function noop() {}
noop.$inject = [];


/**
 * @ngdoc function
 * @name angular.identity
 * @function
 *
 * @description
 * A function that returns its first argument. This function is useful when writing code in the
 * functional style.
 *
   <pre>
     function transformer(transformationFn, value) {
       return (transformationFn || identity)(value);
     };
   </pre>
 */
function identity($) {return $;}
identity.$inject = [];


function valueFn(value) {return function() {return value;};}

/**
 * @ngdoc function
 * @name angular.isUndefined
 * @function
 *
 * @description
 * Determines if a reference is undefined.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is undefined.
 */
function isUndefined(value){return typeof value == 'undefined';}


/**
 * @ngdoc function
 * @name angular.isDefined
 * @function
 *
 * @description
 * Determines if a reference is defined.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is defined.
 */
function isDefined(value){return typeof value != 'undefined';}


/**
 * @ngdoc function
 * @name angular.isObject
 * @function
 *
 * @description
 * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not
 * considered to be objects.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is an `Object` but not `null`.
 */
function isObject(value){return value != null && typeof value == 'object';}


/**
 * @ngdoc function
 * @name angular.isString
 * @function
 *
 * @description
 * Determines if a reference is a `String`.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is a `String`.
 */
function isString(value){return typeof value == 'string';}


/**
 * @ngdoc function
 * @name angular.isNumber
 * @function
 *
 * @description
 * Determines if a reference is a `Number`.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is a `Number`.
 */
function isNumber(value){return typeof value == 'number';}


/**
 * @ngdoc function
 * @name angular.isDate
 * @function
 *
 * @description
 * Determines if a value is a date.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is a `Date`.
 */
function isDate(value){
  return toString.apply(value) == '[object Date]';
}


/**
 * @ngdoc function
 * @name angular.isArray
 * @function
 *
 * @description
 * Determines if a reference is an `Array`.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is an `Array`.
 */
function isArray(value) {
  return toString.apply(value) == '[object Array]';
}


/**
 * @ngdoc function
 * @name angular.isFunction
 * @function
 *
 * @description
 * Determines if a reference is a `Function`.
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is a `Function`.
 */
function isFunction(value){return typeof value == 'function';}


/**
 * Checks if `obj` is a window object.
 *
 * @private
 * @param {*} obj Object to check
 * @returns {boolean} True if `obj` is a window obj.
 */
function isWindow(obj) {
  return obj && obj.document && obj.location && obj.alert && obj.setInterval;
}


function isScope(obj) {
  return obj && obj.$evalAsync && obj.$watch;
}


function isFile(obj) {
  return toString.apply(obj) === '[object File]';
}


function isBoolean(value) {
  return typeof value == 'boolean';
}


function trim(value) {
  return isString(value) ? value.replace(/^\s*/, '').replace(/\s*$/, '') : value;
}

/**
 * @ngdoc function
 * @name angular.isElement
 * @function
 *
 * @description
 * Determines if a reference is a DOM element (or wrapped jQuery element).
 *
 * @param {*} value Reference to check.
 * @returns {boolean} True if `value` is a DOM element (or wrapped jQuery element).
 */
function isElement(node) {
  return node &&
    (node.nodeName  // we are a direct element
    || (node.bind && node.find));  // we have a bind and find method part of jQuery API
}

/**
 * @param str 'key1,key2,...'
 * @returns {object} in the form of {key1:true, key2:true, ...}
 */
function makeMap(str){
  var obj = {}, items = str.split(","), i;
  for ( i = 0; i < items.length; i++ )
    obj[ items[i] ] = true;
  return obj;
}


if (msie < 9) {
  nodeName_ = function(element) {
    element = element.nodeName ? element : element[0];
    return (element.scopeName && element.scopeName != 'HTML')
      ? uppercase(element.scopeName + ':' + element.nodeName) : element.nodeName;
  };
} else {
  nodeName_ = function(element) {
    return element.nodeName ? element.nodeName : element[0].nodeName;
  };
}


function map(obj, iterator, context) {
  var results = [];
  forEach(obj, function(value, index, list) {
    results.push(iterator.call(context, value, index, list));
  });
  return results;
}


/**
 * @description
 * Determines the number of elements in an array, the number of properties an object has, or
 * the length of a string.
 *
 * Note: This function is used to augment the Object type in Angular expressions. See
 * {@link angular.Object} for more information about Angular arrays.
 *
 * @param {Object|Array|string} obj Object, array, or string to inspect.
 * @param {boolean} [ownPropsOnly=false] Count only "own" properties in an object
 * @returns {number} The size of `obj` or `0` if `obj` is neither an object nor an array.
 */
function size(obj, ownPropsOnly) {
  var size = 0, key;

  if (isArray(obj) || isString(obj)) {
    return obj.length;
  } else if (isObject(obj)){
    for (key in obj)
      if (!ownPropsOnly || obj.hasOwnProperty(key))
        size++;
  }

  return size;
}


function includes(array, obj) {
  return indexOf(array, obj) != -1;
}

function indexOf(array, obj) {
  if (array.indexOf) return array.indexOf(obj);

  for ( var i = 0; i < array.length; i++) {
    if (obj === array[i]) return i;
  }
  return -1;
}

function arrayRemove(array, value) {
  var index = indexOf(array, value);
  if (index >=0)
    array.splice(index, 1);
  return value;
}

function isLeafNode (node) {
  if (node) {
    switch (node.nodeName) {
    case "OPTION":
    case "PRE":
    case "TITLE":
      return true;
    }
  }
  return false;
}

/**
 * @ngdoc function
 * @name angular.copy
 * @function
 *
 * @description
 * Creates a deep copy of `source`, which should be an object or an array.
 *
 * * If no destination is supplied, a copy of the object or array is created.
 * * If a destination is provided, all of its elements (for array) or properties (for objects)
 *   are deleted and then all elements/properties from the source are copied to it.
 * * If  `source` is not an object or array, `source` is returned.
 *
 * Note: this function is used to augment the Object type in Angular expressions. See
 * {@link ng.$filter} for more information about Angular arrays.
 *
 * @param {*} source The source that will be used to make a copy.
 *                   Can be any type, including primitives, `null`, and `undefined`.
 * @param {(Object|Array)=} destination Destination into which the source is copied. If
 *     provided, must be of the same type as `source`.
 * @returns {*} The copy or updated `destination`, if `destination` was specified.
 */
function copy(source, destination){
  if (isWindow(source) || isScope(source)) throw Error("Can't copy Window or Scope");
  if (!destination) {
    destination = source;
    if (source) {
      if (isArray(source)) {
        destination = copy(source, []);
      } else if (isDate(source)) {
        destination = new Date(source.getTime());
      } else if (isObject(source)) {
        destination = copy(source, {});
      }
    }
  } else {
    if (source === destination) throw Error("Can't copy equivalent objects or arrays");
    if (isArray(source)) {
      while(destination.length) {
        destination.pop();
      }
      for ( var i = 0; i < source.length; i++) {
        destination.push(copy(source[i]));
      }
    } else {
      forEach(destination, function(value, key){
        delete destination[key];
      });
      for ( var key in source) {
        destination[key] = copy(source[key]);
      }
    }
  }
  return destination;
}

/**
 * Create a shallow copy of an object
 */
function shallowCopy(src, dst) {
  dst = dst || {};

  for(var key in src) {
    if (src.hasOwnProperty(key) && key.substr(0, 2) !== '$$') {
      dst[key] = src[key];
    }
  }

  return dst;
}


/**
 * @ngdoc function
 * @name angular.equals
 * @function
 *
 * @description
 * Determines if two objects or two values are equivalent. Supports value types, arrays and
 * objects.
 *
 * Two objects or values are considered equivalent if at least one of the following is true:
 *
 * * Both objects or values pass `===` comparison.
 * * Both objects or values are of the same type and all of their properties pass `===` comparison.
 * * Both values are NaN. (In JavasScript, NaN == NaN => false. But we consider two NaN as equal)
 *
 * During a property comparision, properties of `function` type and properties with names
 * that begin with `$` are ignored.
 *
 * Scope and DOMWindow objects are being compared only be identify (`===`).
 *
 * @param {*} o1 Object or value to compare.
 * @param {*} o2 Object or value to compare.
 * @returns {boolean} True if arguments are equal.
 */
function equals(o1, o2) {
  if (o1 === o2) return true;
  if (o1 === null || o2 === null) return false;
  if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN
  var t1 = typeof o1, t2 = typeof o2, length, key, keySet;
  if (t1 == t2) {
    if (t1 == 'object') {
      if (isArray(o1)) {
        if ((length = o1.length) == o2.length) {
          for(key=0; key<length; key++) {
            if (!equals(o1[key], o2[key])) return false;
          }
          return true;
        }
      } else if (isDate(o1)) {
        return isDate(o2) && o1.getTime() == o2.getTime();
      } else {
        if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2)) return false;
        keySet = {};
        for(key in o1) {
          if (key.charAt(0) === '$' || isFunction(o1[key])) continue;
          if (!equals(o1[key], o2[key])) return false;
          keySet[key] = true;
        }
        for(key in o2) {
          if (!keySet[key] &&
              key.charAt(0) !== '$' &&
              o2[key] !== undefined &&
              !isFunction(o2[key])) return false;
        }
        return true;
      }
    }
  }
  return false;
}


function concat(array1, array2, index) {
  return array1.concat(slice.call(array2, index));
}

function sliceArgs(args, startIndex) {
  return slice.call(args, startIndex || 0);
}


/**
 * @ngdoc function
 * @name angular.bind
 * @function
 *
 * @description
 * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for
 * `fn`). You can supply optional `args` that are are prebound to the function. This feature is also
 * known as [function currying](http://en.wikipedia.org/wiki/Currying).
 *
 * @param {Object} self Context which `fn` should be evaluated in.
 * @param {function()} fn Function to be bound.
 * @param {...*} args Optional arguments to be prebound to the `fn` function call.
 * @returns {function()} Function that wraps the `fn` with all the specified bindings.
 */
function bind(self, fn) {
  var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : [];
  if (isFunction(fn) && !(fn instanceof RegExp)) {
    return curryArgs.length
      ? function() {
          return arguments.length
            ? fn.apply(self, curryArgs.concat(slice.call(arguments, 0)))
            : fn.apply(self, curryArgs);
        }
      : function() {
          return arguments.length
            ? fn.apply(self, arguments)
            : fn.call(self);
        };
  } else {
    // in IE, native methods are not functions so they cannot be bound (note: they don't need to be)
    return fn;
  }
}


function toJsonReplacer(key, value) {
  var val = value;

  if (/^\$+/.test(key)) {
    val = undefined;
  } else if (isWindow(value)) {
    val = '$WINDOW';
  } else if (value &&  document === value) {
    val = '$DOCUMENT';
  } else if (isScope(value)) {
    val = '$SCOPE';
  }

  return val;
}


/**
 * @ngdoc function
 * @name angular.toJson
 * @function
 *
 * @description
 * Serializes input into a JSON-formatted string.
 *
 * @param {Object|Array|Date|string|number} obj Input to be serialized into JSON.
 * @param {boolean=} pretty If set to true, the JSON output will contain newlines and whitespace.
 * @returns {string} Jsonified string representing `obj`.
 */
function toJson(obj, pretty) {
  return JSON.stringify(obj, toJsonReplacer, pretty ? '  ' : null);
}


/**
 * @ngdoc function
 * @name angular.fromJson
 * @function
 *
 * @description
 * Deserializes a JSON string.
 *
 * @param {string} json JSON string to deserialize.
 * @returns {Object|Array|Date|string|number} Deserialized thingy.
 */
function fromJson(json) {
  return isString(json)
      ? JSON.parse(json)
      : json;
}


function toBoolean(value) {
  if (value && value.length !== 0) {
    var v = lowercase("" + value);
    value = !(v == 'f' || v == '0' || v == 'false' || v == 'no' || v == 'n' || v == '[]');
  } else {
    value = false;
  }
  return value;
}

/**
 * @returns {string} Returns the string representation of the element.
 */
function startingTag(element) {
  element = jqLite(element).clone();
  try {
    // turns out IE does not let you set .html() on elements which
    // are not allowed to have children. So we just ignore it.
    element.html('');
  } catch(e) {}
  return jqLite('<div>').append(element).html().
      match(/^(<[^>]+>)/)[1].
      replace(/^<([\w\-]+)/, function(match, nodeName) { return '<' + lowercase(nodeName); });
}


/////////////////////////////////////////////////

/**
 * Parses an escaped url query string into key-value pairs.
 * @returns Object.<(string|boolean)>
 */
function parseKeyValue(/**string*/keyValue) {
  var obj = {}, key_value, key;
  forEach((keyValue || "").split('&'), function(keyValue){
    if (keyValue) {
      key_value = keyValue.split('=');
      key = decodeURIComponent(key_value[0]);
      obj[key] = isDefined(key_value[1]) ? decodeURIComponent(key_value[1]) : true;
    }
  });
  return obj;
}

function toKeyValue(obj) {
  var parts = [];
  forEach(obj, function(value, key) {
    parts.push(encodeUriQuery(key, true) + (value === true ? '' : '=' + encodeUriQuery(value, true)));
  });
  return parts.length ? parts.join('&') : '';
}


/**
 * We need our custom method because encodeURIComponent is too agressive and doesn't follow
 * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path
 * segments:
 *    segment       = *pchar
 *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
 *    pct-encoded   = "%" HEXDIG HEXDIG
 *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
 *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
 *                     / "*" / "+" / "," / ";" / "="
 */
function encodeUriSegment(val) {
  return encodeUriQuery(val, true).
             replace(/%26/gi, '&').
             replace(/%3D/gi, '=').
             replace(/%2B/gi, '+');
}


/**
 * This method is intended for encoding *key* or *value* parts of query component. We need a custom
 * method becuase encodeURIComponent is too agressive and encodes stuff that doesn't have to be
 * encoded per http://tools.ietf.org/html/rfc3986:
 *    query       = *( pchar / "/" / "?" )
 *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
 *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
 *    pct-encoded   = "%" HEXDIG HEXDIG
 *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
 *                     / "*" / "+" / "," / ";" / "="
 */
function encodeUriQuery(val, pctEncodeSpaces) {
  return encodeURIComponent(val).
             replace(/%40/gi, '@').
             replace(/%3A/gi, ':').
             replace(/%24/g, '$').
             replace(/%2C/gi, ',').
             replace((pctEncodeSpaces ? null : /%20/g), '+');
}


/**
 * @ngdoc directive
 * @name ng.directive:ngApp
 *
 * @element ANY
 * @param {angular.Module} ngApp an optional application
 *   {@link angular.module module} name to load.
 *
 * @description
 *
 * Use this directive to auto-bootstrap on application. Only
 * one directive can be used per HTML document. The directive
 * designates the root of the application and is typically placed
 * ot the root of the page.
 *
 * In the example below if the `ngApp` directive would not be placed
 * on the `html` element then the document would not be compiled
 * and the `{{ 1+2 }}` would not be resolved to `3`.
 *
 * `ngApp` is the easiest way to bootstrap an application.
 *
 <doc:example>
   <doc:source>
    I can add: 1 + 2 =  {{ 1+2 }}
   </doc:source>
 </doc:example>
 *
 */
function angularInit(element, bootstrap) {
  var elements = [element],
      appElement,
      module,
      names = ['ng:app', 'ng-app', 'x-ng-app', 'data-ng-app'],
      NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/;

  function append(element) {
    element && elements.push(element);
  }

  forEach(names, function(name) {
    names[name] = true;
    append(document.getElementById(name));
    name = name.replace(':', '\\:');
    if (element.querySelectorAll) {
      forEach(element.querySelectorAll('.' + name), append);
      forEach(element.querySelectorAll('.' + name + '\\:'), append);
      forEach(element.querySelectorAll('[' + name + ']'), append);
    }
  });

  forEach(elements, function(element) {
    if (!appElement) {
      var className = ' ' + element.className + ' ';
      var match = NG_APP_CLASS_REGEXP.exec(className);
      if (match) {
        appElement = element;
        module = (match[2] || '').replace(/\s+/g, ',');
      } else {
        forEach(element.attributes, function(attr) {
          if (!appElement && names[attr.name]) {
            appElement = element;
            module = attr.value;
          }
        });
      }
    }
  });
  if (appElement) {
    bootstrap(appElement, module ? [module] : []);
  }
}

/**
 * @ngdoc function
 * @name angular.bootstrap
 * @description
 * Use this function to manually start up angular application.
 *
 * See: {@link guide/bootstrap Bootstrap}
 *
 * @param {Element} element DOM element which is the root of angular application.
 * @param {Array<String|Function>=} modules an array of module declarations. See: {@link angular.module modules}
 * @returns {AUTO.$injector} Returns the newly created injector for this app.
 */
function bootstrap(element, modules) {
  element = jqLite(element);
  modules = modules || [];
  modules.unshift(['$provide', function($provide) {
    $provide.value('$rootElement', element);
  }]);
  modules.unshift('ng');
  var injector = createInjector(modules);
  injector.invoke(
    ['$rootScope', '$rootElement', '$compile', '$injector', function(scope, element, compile, injector){
      scope.$apply(function() {
        element.data('$injector', injector);
        compile(element)(scope);
      });
    }]
  );
  return injector;
}

var SNAKE_CASE_REGEXP = /[A-Z]/g;
function snake_case(name, separator){
  separator = separator || '_';
  return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) {
    return (pos ? separator : '') + letter.toLowerCase();
  });
}

function bindJQuery() {
  // bind to jQuery if present;
  jQuery = window.jQuery;
  // reset to jQuery or default to us.
  if (jQuery) {
    jqLite = jQuery;
    extend(jQuery.fn, {
      scope: JQLitePrototype.scope,
      controller: JQLitePrototype.controller,
      injector: JQLitePrototype.injector,
      inheritedData: JQLitePrototype.inheritedData
    });
    JQLitePatchJQueryRemove('remove', true);
    JQLitePatchJQueryRemove('empty');
    JQLitePatchJQueryRemove('html');
  } else {
    jqLite = JQLite;
  }
  angular.element = jqLite;
}

/**
 * throw error of the argument is falsy.
 */
function assertArg(arg, name, reason) {
  if (!arg) {
    throw new Error("Argument '" + (name || '?') + "' is " + (reason || "required"));
  }
  return arg;
}

function assertArgFn(arg, name, acceptArrayAnnotation) {
  if (acceptArrayAnnotation && isArray(arg)) {
      arg = arg[arg.length - 1];
  }

  assertArg(isFunction(arg), name, 'not a function, got ' +
      (arg && typeof arg == 'object' ? arg.constructor.name || 'Object' : typeof arg));
  return arg;
}

/**
 * @ngdoc interface
 * @name angular.Module
 * @description
 *
 * Interface for configuring angular {@link angular.module modules}.
 */

function setupModuleLoader(window) {

  function ensure(obj, name, factory) {
    return obj[name] || (obj[name] = factory());
  }

  return ensure(ensure(window, 'angular', Object), 'module', function() {
    /** @type {Object.<string, angular.Module>} */
    var modules = {};

    /**
     * @ngdoc function
     * @name angular.module
     * @description
     *
     * The `angular.module` is a global place for creating and registering Angular modules. All
     * modules (angular core or 3rd party) that should be available to an application must be
     * registered using this mechanism.
     *
     *
     * # Module
     *
     * A module is a collocation of services, directives, filters, and configuration information. Module
     * is used to configure the {@link AUTO.$injector $injector}.
     *
     * <pre>
     * // Create a new module
     * var myModule = angular.module('myModule', []);
     *
     * // register a new service
     * myModule.value('appName', 'MyCoolApp');
     *
     * // configure existing services inside initialization blocks.
     * myModule.config(function($locationProvider) {
     *   // Configure existing providers
     *   $locationProvider.hashPrefix('!');
     * });
     * </pre>
     *
     * Then you can create an injector and load your modules like this:
     *
     * <pre>
     * var injector = angular.injector(['ng', 'MyModule'])
     * </pre>
     *
     * However it's more likely that you'll just use
     * {@link ng.directive:ngApp ngApp} or
     * {@link angular.bootstrap} to simplify this process for you.
     *
     * @param {!string} name The name of the module to create or retrieve.
     * @param {Array.<string>=} requires If specified then new module is being created. If unspecified then the
     *        the module is being retrieved for further configuration.
     * @param {Function} configFn Optional configuration function for the module. Same as
     *        {@link angular.Module#config Module#config()}.
     * @returns {module} new module with the {@link angular.Module} api.
     */
    return function module(name, requires, configFn) {
      if (requires && modules.hasOwnProperty(name)) {
        modules[name] = null;
      }
      return ensure(modules, name, function() {
        if (!requires) {
          throw Error('No module: ' + name);
        }

        /** @type {!Array.<Array.<*>>} */
        var invokeQueue = [];

        /** @type {!Array.<Function>} */
        var runBlocks = [];

        var config = invokeLater('$injector', 'invoke');

        /** @type {angular.Module} */
        var moduleInstance = {
          // Private state
          _invokeQueue: invokeQueue,
          _runBlocks: runBlocks,

          /**
           * @ngdoc property
           * @name angular.Module#requires
           * @propertyOf angular.Module
           * @returns {Array.<string>} List of module names which must be loaded before this module.
           * @description
           * Holds the list of modules which the injector will load before the current module is loaded.
           */
          requires: requires,

          /**
           * @ngdoc property
           * @name angular.Module#name
           * @propertyOf angular.Module
           * @returns {string} Name of the module.
           * @description
           */
          name: name,


          /**
           * @ngdoc method
           * @name angular.Module#provider
           * @methodOf angular.Module
           * @param {string} name service name
           * @param {Function} providerType Construction function for creating new instance of the service.
           * @description
           * See {@link AUTO.$provide#provider $provide.provider()}.
           */
          provider: invokeLater('$provide', 'provider'),

          /**
           * @ngdoc method
           * @name angular.Module#factory
           * @methodOf angular.Module
           * @param {string} name service name
           * @param {Function} providerFunction Function for creating new instance of the service.
           * @description
           * See {@link AUTO.$provide#factory $provide.factory()}.
           */
          factory: invokeLater('$provide', 'factory'),

          /**
           * @ngdoc method
           * @name angular.Module#service
           * @methodOf angular.Module
           * @param {string} name service name
           * @param {Function} constructor A constructor function that will be instantiated.
           * @description
           * See {@link AUTO.$provide#service $provide.service()}.
           */
          service: invokeLater('$provide', 'service'),

          /**
           * @ngdoc method
           * @name angular.Module#value
           * @methodOf angular.Module
           * @param {string} name service name
           * @param {*} object Service instance object.
           * @description
           * See {@link AUTO.$provide#value $provide.value()}.
           */
          value: invokeLater('$provide', 'value'),

          /**
           * @ngdoc method
           * @name angular.Module#constant
           * @methodOf angular.Module
           * @param {string} name constant name
           * @param {*} object Constant value.
           * @description
           * Because the constant are fixed, they get applied before other provide methods.
           * See {@link AUTO.$provide#constant $provide.constant()}.
           */
          constant: invokeLater('$provide', 'constant', 'unshift'),

          /**
           * @ngdoc method
           * @name angular.Module#filter
           * @methodOf angular.Module
           * @param {string} name Filter name.
           * @param {Function} filterFactory Factory function for creating new instance of filter.
           * @description
           * See {@link ng.$filterProvider#register $filterProvider.register()}.
           */
          filter: invokeLater('$filterProvider', 'register'),

          /**
           * @ngdoc method
           * @name angular.Module#controller
           * @methodOf angular.Module
           * @param {string} name Controller name.
           * @param {Function} constructor Controller constructor function.
           * @description
           * See {@link ng.$controllerProvider#register $controllerProvider.register()}.
           */
          controller: invokeLater('$controllerProvider', 'register'),

          /**
           * @ngdoc method
           * @name angular.Module#directive
           * @methodOf angular.Module
           * @param {string} name directive name
           * @param {Function} directiveFactory Factory function for creating new instance of
           * directives.
           * @description
           * See {@link ng.$compileProvider#directive $compileProvider.directive()}.
           */
          directive: invokeLater('$compileProvider', 'directive'),

          /**
           * @ngdoc method
           * @name angular.Module#config
           * @methodOf angular.Module
           * @param {Function} configFn Execute this function on module load. Useful for service
           *    configuration.
           * @description
           * Use this method to register work which needs to be performed on module loading.
           */
          config: config,

          /**
           * @ngdoc method
           * @name angular.Module#run
           * @methodOf angular.Module
           * @param {Function} initializationFn Execute this function after injector creation.
           *    Useful for application initialization.
           * @description
           * Use this method to register work which should be performed when the injector is done
           * loading all modules.
           */
          run: function(block) {
            runBlocks.push(block);
            return this;
          }
        };

        if (configFn) {
          config(configFn);
        }

        return  moduleInstance;

        /**
         * @param {string} provider
         * @param {string} method
         * @param {String=} insertMethod
         * @returns {angular.Module}
         */
        function invokeLater(provider, method, insertMethod) {
          return function() {
            invokeQueue[insertMethod || 'push']([provider, method, arguments]);
            return moduleInstance;
          }
        }
      });
    };
  });

}

/**
 * @ngdoc property
 * @name angular.version
 * @description
 * An object that contains information about the current AngularJS version. This object has the
 * following properties:
 *
 * - `full` – `{string}` – Full version string, such as "0.9.18".
 * - `major` – `{number}` – Major version number, such as "0".
 * - `minor` – `{number}` – Minor version number, such as "9".
 * - `dot` – `{number}` – Dot version number, such as "18".
 * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
 */
var version = {
  full: '1.0.4',    // all of these placeholder strings will be replaced by rake's
  major: 1,    // compile task
  minor: 0,
  dot: 4,
  codeName: 'bewildering-hair'
};


function publishExternalAPI(angular){
  extend(angular, {
    'bootstrap': bootstrap,
    'copy': copy,
    'extend': extend,
    'equals': equals,
    'element': jqLite,
    'forEach': forEach,
    'injector': createInjector,
    'noop':noop,
    'bind':bind,
    'toJson': toJson,
    'fromJson': fromJson,
    'identity':identity,
    'isUndefined': isUndefined,
    'isDefined': isDefined,
    'isString': isString,
    'isFunction': isFunction,
    'isObject': isObject,
    'isNumber': isNumber,
    'isElement': isElement,
    'isArray': isArray,
    'version': version,
    'isDate': isDate,
    'lowercase': lowercase,
    'uppercase': uppercase,
    'callbacks': {counter: 0}
  });

  angularModule = setupModuleLoader(window);
  try {
    angularModule('ngLocale');
  } catch (e) {
    angularModule('ngLocale', []).provider('$locale', $LocaleProvider);
  }

  angularModule('ng', ['ngLocale'], ['$provide',
    function ngModule($provide) {
      $provide.provider('$compile', $CompileProvider).
        directive({
            a: htmlAnchorDirective,
            input: inputDirective,
            textarea: inputDirective,
            form: formDirective,
            script: scriptDirective,
            select: selectDirective,
            style: styleDirective,
            option: optionDirective,
            ngBind: ngBindDirective,
            ngBindHtmlUnsafe: ngBindHtmlUnsafeDirective,
            ngBindTemplate: ngBindTemplateDirective,
            ngClass: ngClassDirective,
            ngClassEven: ngClassEvenDirective,
            ngClassOdd: ngClassOddDirective,
            ngCsp: ngCspDirective,
            ngCloak: ngCloakDirective,
            ngController: ngControllerDirective,
            ngForm: ngFormDirective,
            ngHide: ngHideDirective,
            ngInclude: ngIncludeDirective,
            ngInit: ngInitDirective,
            ngNonBindable: ngNonBindableDirective,
            ngPluralize: ngPluralizeDirective,
            ngRepeat: ngRepeatDirective,
            ngShow: ngShowDirective,
            ngSubmit: ngSubmitDirective,
            ngStyle: ngStyleDirective,
            ngSwitch: ngSwitchDirective,
            ngSwitchWhen: ngSwitchWhenDirective,
            ngSwitchDefault: ngSwitchDefaultDirective,
            ngOptions: ngOptionsDirective,
            ngView: ngViewDirective,
            ngTransclude: ngTranscludeDirective,
            ngModel: ngModelDirective,
            ngList: ngListDirective,
            ngChange: ngChangeDirective,
            required: requiredDirective,
            ngRequired: requiredDirective,
            ngValue: ngValueDirective
        }).
        directive(ngAttributeAliasDirectives).
        directive(ngEventDirectives);
      $provide.provider({
        $anchorScroll: $AnchorScrollProvider,
        $browser: $BrowserProvider,
        $cacheFactory: $CacheFactoryProvider,
        $controller: $ControllerProvider,
        $document: $DocumentProvider,
        $exceptionHandler: $ExceptionHandlerProvider,
        $filter: $FilterProvider,
        $interpolate: $InterpolateProvider,
        $http: $HttpProvider,
        $httpBackend: $HttpBackendProvider,
        $location: $LocationProvider,
        $log: $LogProvider,
        $parse: $ParseProvider,
        $route: $RouteProvider,
        $routeParams: $RouteParamsProvider,
        $rootScope: $RootScopeProvider,
        $q: $QProvider,
        $sniffer: $SnifferProvider,
        $templateCache: $TemplateCacheProvider,
        $timeout: $TimeoutProvider,
        $window: $WindowProvider
      });
    }
  ]);
}

//////////////////////////////////
//JQLite
//////////////////////////////////

/**
 * @ngdoc function
 * @name angular.element
 * @function
 *
 * @description
 * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element.
 * `angular.element` can be either an alias for [jQuery](http://api.jquery.com/jQuery/) function, if
 * jQuery is available, or a function that wraps the element or string in Angular's jQuery lite
 * implementation (commonly referred to as jqLite).
 *
 * Real jQuery always takes precedence over jqLite, provided it was loaded before `DOMContentLoaded`
 * event fired.
 *
 * jqLite is a tiny, API-compatible subset of jQuery that allows
 * Angular to manipulate the DOM. jqLite implements only the most commonly needed functionality
 * within a very small footprint, so only a subset of the jQuery API - methods, arguments and
 * invocation styles - are supported.
 *
 * Note: All element references in Angular are always wrapped with jQuery or jqLite; they are never
 * raw DOM references.
 *
 * ## Angular's jQuery lite provides the following methods:
 *
 * - [addClass()](http://api.jquery.com/addClass/)
 * - [after()](http://api.jquery.com/after/)
 * - [append()](http://api.jquery.com/append/)
 * - [attr()](http://api.jquery.com/attr/)
 * - [bind()](http://api.jquery.com/bind/)
 * - [children()](http://api.jquery.com/children/)
 * - [clone()](http://api.jquery.com/clone/)
 * - [contents()](http://api.jquery.com/contents/)
 * - [css()](http://api.jquery.com/css/)
 * - [data()](http://api.jquery.com/data/)
 * - [eq()](http://api.jquery.com/eq/)
 * - [find()](http://api.jquery.com/find/) - Limited to lookups by tag name.
 * - [hasClass()](http://api.jquery.com/hasClass/)
 * - [html()](http://api.jquery.com/html/)
 * - [next()](http://api.jquery.com/next/)
 * - [parent()](http://api.jquery.com/parent/)
 * - [prepend()](http://api.jquery.com/prepend/)
 * - [prop()](http://api.jquery.com/prop/)
 * - [ready()](http://api.jquery.com/ready/)
 * - [remove()](http://api.jquery.com/remove/)
 * - [removeAttr()](http://api.jquery.com/removeAttr/)
 * - [removeClass()](http://api.jquery.com/removeClass/)
 * - [removeData()](http://api.jquery.com/removeData/)
 * - [replaceWith()](http://api.jquery.com/replaceWith/)
 * - [text()](http://api.jquery.com/text/)
 * - [toggleClass()](http://api.jquery.com/toggleClass/)
 * - [triggerHandler()](http://api.jquery.com/triggerHandler/) - Doesn't pass native event objects to handlers.
 * - [unbind()](http://api.jquery.com/unbind/)
 * - [val()](http://api.jquery.com/val/)
 * - [wrap()](http://api.jquery.com/wrap/)
 *
 * ## In addtion to the above, Angular provides additional methods to both jQuery and jQuery lite:
 *
 * - `controller(name)` - retrieves the controller of the current element or its parent. By default
 *   retrieves controller associated with the `ngController` directive. If `name` is provided as
 *   camelCase directive name, then the controller for this directive will be retrieved (e.g.
 *   `'ngModel'`).
 * - `injector()` - retrieves the injector of the current element or its parent.
 * - `scope()` - retrieves the {@link api/ng.$rootScope.Scope scope} of the current
 *   element or its parent.
 * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top
 *   parent element is reached.
 *
 * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery.
 * @returns {Object} jQuery object.
 */

var jqCache = JQLite.cache = {},
    jqName = JQLite.expando = 'ng-' + new Date().getTime(),
    jqId = 1,
    addEventListenerFn = (window.document.addEventListener
      ? function(element, type, fn) {element.addEventListener(type, fn, false);}
      : function(element, type, fn) {element.attachEvent('on' + type, fn);}),
    removeEventListenerFn = (window.document.removeEventListener
      ? function(element, type, fn) {element.removeEventListener(type, fn, false); }
      : function(element, type, fn) {element.detachEvent('on' + type, fn); });

function jqNextId() { return ++jqId; }


var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
var MOZ_HACK_REGEXP = /^moz([A-Z])/;

/**
 * Converts snake_case to camelCase.
 * Also there is special case for Moz prefix starting with upper case letter.
 * @param name Name to normalize
 */
function camelCase(name) {
  return name.
    replace(SPECIAL_CHARS_REGEXP, function(_, separator, letter, offset) {
      return offset ? letter.toUpperCase() : letter;
    }).
    replace(MOZ_HACK_REGEXP, 'Moz$1');
}

/////////////////////////////////////////////
// jQuery mutation patch
//
//  In conjunction with bindJQuery intercepts all jQuery's DOM destruction apis and fires a
// $destroy event on all DOM nodes being removed.
//
/////////////////////////////////////////////

function JQLitePatchJQueryRemove(name, dispatchThis) {
  var originalJqFn = jQuery.fn[name];
  originalJqFn = originalJqFn.$original || originalJqFn;
  removePatch.$original = originalJqFn;
  jQuery.fn[name] = removePatch;

  function removePatch() {
    var list = [this],
        fireEvent = dispatchThis,
        set, setIndex, setLength,
        element, childIndex, childLength, children,
        fns, events;

    while(list.length) {
      set = list.shift();
      for(setIndex = 0, setLength = set.length; setIndex < setLength; setIndex++) {
        element = jqLite(set[setIndex]);
        if (fireEvent) {
          element.triggerHandler('$destroy');
        } else {
          fireEvent = !fireEvent;
        }
        for(childIndex = 0, childLength = (children = element.children()).length;
            childIndex < childLength;
            childIndex++) {
          list.push(jQuery(children[childIndex]));
        }
      }
    }
    return originalJqFn.apply(this, arguments);
  }
}

/////////////////////////////////////////////
function JQLite(element) {
  if (element instanceof JQLite) {
    return element;
  }
  if (!(this instanceof JQLite)) {
    if (isString(element) && element.charAt(0) != '<') {
      throw Error('selectors not implemented');
    }
    return new JQLite(element);
  }

  if (isString(element)) {
    var div = document.createElement('div');
    // Read about the NoScope elements here:
    // http://msdn.microsoft.com/en-us/library/ms533897(VS.85).aspx
    div.innerHTML = '<div>&#160;</div>' + element; // IE insanity to make NoScope elements work!
    div.removeChild(div.firstChild); // remove the superfluous div
    JQLiteAddNodes(this, div.childNodes);
    this.remove(); // detach the elements from the temporary DOM div.
  } else {
    JQLiteAddNodes(this, element);
  }
}

function JQLiteClone(element) {
  return element.cloneNode(true);
}

function JQLiteDealoc(element){
  JQLiteRemoveData(element);
  for ( var i = 0, children = element.childNodes || []; i < children.length; i++) {
    JQLiteDealoc(children[i]);
  }
}

function JQLiteUnbind(element, type, fn) {
  var events = JQLiteExpandoStore(element, 'events'),
      handle = JQLiteExpandoStore(element, 'handle');

  if (!handle) return; //no listeners registered

  if (isUndefined(type)) {
    forEach(events, function(eventHandler, type) {
      removeEventListenerFn(element, type, eventHandler);
      delete events[type];
    });
  } else {
    if (isUndefined(fn)) {
      removeEventListenerFn(element, type, events[type]);
      delete events[type];
    } else {
      arrayRemove(events[type], fn);
    }
  }
}

function JQLiteRemoveData(element) {
  var expandoId = element[jqName],
      expandoStore = jqCache[expandoId];

  if (expandoStore) {
    if (expandoStore.handle) {
      expandoStore.events.$destroy && expandoStore.handle({}, '$destroy');
      JQLiteUnbind(element);
    }
    delete jqCache[expandoId];
    element[jqName] = undefined; // ie does not allow deletion of attributes on elements.
  }
}

function JQLiteExpandoStore(element, key, value) {
  var expandoId = element[jqName],
      expandoStore = jqCache[expandoId || -1];

  if (isDefined(value)) {
    if (!expandoStore) {
      element[jqName] = expandoId = jqNextId();
      expandoStore = jqCache[expandoId] = {};
    }
    expandoStore[key] = value;
  } else {
    return expandoStore && expandoStore[key];
  }
}

function JQLiteData(element, key, value) {
  var data = JQLiteExpandoStore(element, 'data'),
      isSetter = isDefined(value),
      keyDefined = !isSetter && isDefined(key),
      isSimpleGetter = keyDefined && !isObject(key);

  if (!data && !isSimpleGetter) {
    JQLiteExpandoStore(element, 'data', data = {});
  }

  if (isSetter) {
    data[key] = value;
  } else {
    if (keyDefined) {
      if (isSimpleGetter) {
        // don't create data in this case.
        return data && data[key];
      } else {
        extend(data, key);
      }
    } else {
      return data;
    }
  }
}

function JQLiteHasClass(element, selector) {
  return ((" " + element.className + " ").replace(/[\n\t]/g, " ").
      indexOf( " " + selector + " " ) > -1);
}

function JQLiteRemoveClass(element, cssClasses) {
  if (cssClasses) {
    forEach(cssClasses.split(' '), function(cssClass) {
      element.className = trim(
          (" " + element.className + " ")
          .replace(/[\n\t]/g, " ")
          .replace(" " + trim(cssClass) + " ", " ")
      );
    });
  }
}

function JQLiteAddClass(element, cssClasses) {
  if (cssClasses) {
    forEach(cssClasses.split(' '), function(cssClass) {
      if (!JQLiteHasClass(element, cssClass)) {
        element.className = trim(element.className + ' ' + trim(cssClass));
      }
    });
  }
}

function JQLiteAddNodes(root, elements) {
  if (elements) {
    elements = (!elements.nodeName && isDefined(elements.length) && !isWindow(elements))
      ? elements
      : [ elements ];
    for(var i=0; i < elements.length; i++) {
      root.push(elements[i]);
    }
  }
}

function JQLiteController(element, name) {
  return JQLiteInheritedData(element, '$' + (name || 'ngController' ) + 'Controller');
}

function JQLiteInheritedData(element, name, value) {
  element = jqLite(element);

  // if element is the document object work with the html element instead
  // this makes $(document).scope() possible
  if(element[0].nodeType == 9) {
    element = element.find('html');
  }

  while (element.length) {
    if (value = element.data(name)) return value;
    element = element.parent();
  }
}

//////////////////////////////////////////
// Functions which are declared directly.
//////////////////////////////////////////
var JQLitePrototype = JQLite.prototype = {
  ready: function(fn) {
    var fired = false;

    function trigger() {
      if (fired) return;
      fired = true;
      fn();
    }

    this.bind('DOMContentLoaded', trigger); // works for modern browsers and IE9
    // we can not use jqLite since we are not done loading and jQuery could be loaded later.
    JQLite(window).bind('load', trigger); // fallback to window.onload for others
  },
  toString: function() {
    var value = [];
    forEach(this, function(e){ value.push('' + e);});
    return '[' + value.join(', ') + ']';
  },

  eq: function(index) {
      return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]);
  },

  length: 0,
  push: push,
  sort: [].sort,
  splice: [].splice
};

//////////////////////////////////////////
// Functions iterating getter/setters.
// these functions return self on setter and
// value on get.
//////////////////////////////////////////
var BOOLEAN_ATTR = {};
forEach('multiple,selected,checked,disabled,readOnly,required'.split(','), function(value) {
  BOOLEAN_ATTR[lowercase(value)] = value;
});
var BOOLEAN_ELEMENTS = {};
forEach('input,select,option,textarea,button,form'.split(','), function(value) {
  BOOLEAN_ELEMENTS[uppercase(value)] = true;
});

function getBooleanAttrName(element, name) {
  // check dom last since we will most likely fail on name
  var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()];

  // booleanAttr is here twice to minimize DOM access
  return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr;
}

forEach({
  data: JQLiteData,
  inheritedData: JQLiteInheritedData,

  scope: function(element) {
    return JQLiteInheritedData(element, '$scope');
  },

  controller: JQLiteController ,

  injector: function(element) {
    return JQLiteInheritedData(element, '$injector');
  },

  removeAttr: function(element,name) {
    element.removeAttribute(name);
  },

  hasClass: JQLiteHasClass,

  css: function(element, name, value) {
    name = camelCase(name);

    if (isDefined(value)) {
      element.style[name] = value;
    } else {
      var val;

      if (msie <= 8) {
        // this is some IE specific weirdness that jQuery 1.6.4 does not sure why
        val = element.currentStyle && element.currentStyle[name];
        if (val === '') val = 'auto';
      }

      val = val || element.style[name];

      if (msie <= 8) {
        // jquery weirdness :-/
        val = (val === '') ? undefined : val;
      }

      return  val;
    }
  },

  attr: function(element, name, value){
    var lowercasedName = lowercase(name);
    if (BOOLEAN_ATTR[lowercasedName]) {
      if (isDefined(value)) {
        if (!!value) {
          element[name] = true;
          element.setAttribute(name, lowercasedName);
        } else {
          element[name] = false;
          element.removeAttribute(lowercasedName);
        }
      } else {
        return (element[name] ||
                 (element.attributes.getNamedItem(name)|| noop).specified)
               ? lowercasedName
               : undefined;
      }
    } else if (isDefined(value)) {
      element.setAttribute(name, value);
    } else if (element.getAttribute) {
      // the extra argument "2" is to get the right thing for a.href in IE, see jQuery code
      // some elements (e.g. Document) don't have get attribute, so return undefined
      var ret = element.getAttribute(name, 2);
      // normalize non-existing attributes to undefined (as jQuery)
      return ret === null ? undefined : ret;
    }
  },

  prop: function(element, name, value) {
    if (isDefined(value)) {
      element[name] = value;
    } else {
      return element[name];
    }
  },

  text: extend((msie < 9)
      ? function(element, value) {
        if (element.nodeType == 1 /** Element */) {
          if (isUndefined(value))
            return element.innerText;
          element.innerText = value;
        } else {
          if (isUndefined(value))
            return element.nodeValue;
          element.nodeValue = value;
        }
      }
      : function(element, value) {
        if (isUndefined(value)) {
          return element.textContent;
        }
        element.textContent = value;
      }, {$dv:''}),

  val: function(element, value) {
    if (isUndefined(value)) {
      return element.value;
    }
    element.value = value;
  },

  html: function(element, value) {
    if (isUndefined(value)) {
      return element.innerHTML;
    }
    for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) {
      JQLiteDealoc(childNodes[i]);
    }
    element.innerHTML = value;
  }
}, function(fn, name){
  /**
   * Properties: writes return selection, reads return first value
   */
  JQLite.prototype[name] = function(arg1, arg2) {
    var i, key;

    // JQLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it
    // in a way that survives minification.
    if (((fn.length == 2 && (fn !== JQLiteHasClass && fn !== JQLiteController)) ? arg1 : arg2) === undefined) {
      if (isObject(arg1)) {

        // we are a write, but the object properties are the key/values
        for(i=0; i < this.length; i++) {
          if (fn === JQLiteData) {
            // data() takes the whole object in jQuery
            fn(this[i], arg1);
          } else {
            for (key in arg1) {
              fn(this[i], key, arg1[key]);
            }
          }
        }
        // return self for chaining
        return this;
      } else {
        // we are a read, so read the first child.
        if (this.length)
          return fn(this[0], arg1, arg2);
      }
    } else {
      // we are a write, so apply to all children
      for(i=0; i < this.length; i++) {
        fn(this[i], arg1, arg2);
      }
      // return self for chaining
      return this;
    }
    return fn.$dv;
  };
});

function createEventHandler(element, events) {
  var eventHandler = function (event, type) {
    if (!event.preventDefault) {
      event.preventDefault = function() {
        event.returnValue = false; //ie
      };
    }

    if (!event.stopPropagation) {
      event.stopPropagation = function() {
        event.cancelBubble = true; //ie
      };
    }

    if (!event.target) {
      event.target = event.srcElement || document;
    }

    if (isUndefined(event.defaultPrevented)) {
      var prevent = event.preventDefault;
      event.preventDefault = function() {
        event.defaultPrevented = true;
        prevent.call(event);
      };
      event.defaultPrevented = false;
    }

    event.isDefaultPrevented = function() {
      return event.defaultPrevented;
    };

    forEach(events[type || event.type], function(fn) {
      fn.call(element, event);
    });

    // Remove monkey-patched methods (IE),
    // as they would cause memory leaks in IE8.
    if (msie <= 8) {
      // IE7/8 does not allow to delete property on native object
      event.preventDefault = null;
      event.stopPropagation = null;
      event.isDefaultPrevented = null;
    } else {
      // It shouldn't affect normal browsers (native methods are defined on prototype).
      delete event.preventDefault;
      delete event.stopPropagation;
      delete event.isDefaultPrevented;
    }
  };
  eventHandler.elem = element;
  return eventHandler;
}

//////////////////////////////////////////
// Functions iterating traversal.
// These functions chain results into a single
// selector.
//////////////////////////////////////////
forEach({
  removeData: JQLiteRemoveData,

  dealoc: JQLiteDealoc,

  bind: function bindFn(element, type, fn){
    var events = JQLiteExpandoStore(element, 'events'),
        handle = JQLiteExpandoStore(element, 'handle');

    if (!events) JQLiteExpandoStore(element, 'events', events = {});
    if (!handle) JQLiteExpandoStore(element, 'handle', handle = createEventHandler(element, events));

    forEach(type.split(' '), function(type){
      var eventFns = events[type];

      if (!eventFns) {
        if (type == 'mouseenter' || type == 'mouseleave') {
          var counter = 0;

          events.mouseenter = [];
          events.mouseleave = [];

          bindFn(element, 'mouseover', function(event) {
            counter++;
            if (counter == 1) {
              handle(event, 'mouseenter');
            }
          });
          bindFn(element, 'mouseout', function(event) {
            counter --;
            if (counter == 0) {
              handle(event, 'mouseleave');
            }
          });
        } else {
          addEventListenerFn(element, type, handle);
          events[type] = [];
        }
        eventFns = events[type]
      }
      eventFns.push(fn);
    });
  },

  unbind: JQLiteUnbind,

  replaceWith: function(element, replaceNode) {
    var index, parent = element.parentNode;
    JQLiteDealoc(element);
    forEach(new JQLite(replaceNode), function(node){
      if (index) {
        parent.insertBefore(node, index.nextSibling);
      } else {
        parent.replaceChild(node, element);
      }
      index = node;
    });
  },

  children: function(element) {
    var children = [];
    forEach(element.childNodes, function(element){
      if (element.nodeType === 1)
        children.push(element);
    });
    return children;
  },

  contents: function(element) {
    return element.childNodes || [];
  },

  append: function(element, node) {
    forEach(new JQLite(node), function(child){
      if (element.nodeType === 1)
        element.appendChild(child);
    });
  },

  prepend: function(element, node) {
    if (element.nodeType === 1) {
      var index = element.firstChild;
      forEach(new JQLite(node), function(child){
        if (index) {
          element.insertBefore(child, index);
        } else {
          element.appendChild(child);
          index = child;
        }
      });
    }
  },

  wrap: function(element, wrapNode) {
    wrapNode = jqLite(wrapNode)[0];
    var parent = element.parentNode;
    if (parent) {
      parent.replaceChild(wrapNode, element);
    }
    wrapNode.appendChild(element);
  },

  remove: function(element) {
    JQLiteDealoc(element);
    var parent = element.parentNode;
    if (parent) parent.removeChild(element);
  },

  after: function(element, newElement) {
    var index = element, parent = element.parentNode;
    forEach(new JQLite(newElement), function(node){
      parent.insertBefore(node, index.nextSibling);
      index = node;
    });
  },

  addClass: JQLiteAddClass,
  removeClass: JQLiteRemoveClass,

  toggleClass: function(element, selector, condition) {
    if (isUndefined(condition)) {
      condition = !JQLiteHasClass(element, selector);
    }
    (condition ? JQLiteAddClass : JQLiteRemoveClass)(element, selector);
  },

  parent: function(element) {
    var parent = element.parentNode;
    return parent && parent.nodeType !== 11 ? parent : null;
  },

  next: function(element) {
    if (element.nextElementSibling) {
      return element.nextElementSibling;
    }

    // IE8 doesn't have nextElementSibling
    var elm = element.nextSibling;
    while (elm != null && elm.nodeType !== 1) {
      elm = elm.nextSibling;
    }
    return elm;
  },

  find: function(element, selector) {
    return element.getElementsByTagName(selector);
  },

  clone: JQLiteClone,

  triggerHandler: function(element, eventName) {
    var eventFns = (JQLiteExpandoStore(element, 'events') || {})[eventName];

    forEach(eventFns, function(fn) {
      fn.call(element, null);
    });
  }
}, function(fn, name){
  /**
   * chaining functions
   */
  JQLite.prototype[name] = function(arg1, arg2) {
    var value;
    for(var i=0; i < this.length; i++) {
      if (value == undefined) {
        value = fn(this[i], arg1, arg2);
        if (value !== undefined) {
          // any function which returns a value needs to be wrapped
          value = jqLite(value);
        }
      } else {
        JQLiteAddNodes(value, fn(this[i], arg1, arg2));
      }
    }
    return value == undefined ? this : value;
  };
});

/**
 * Computes a hash of an 'obj'.
 * Hash of a:
 *  string is string
 *  number is number as string
 *  object is either result of calling $$hashKey function on the object or uniquely generated id,
 *         that is also assigned to the $$hashKey property of the object.
 *
 * @param obj
 * @returns {string} hash string such that the same input will have the same hash string.
 *         The resulting string key is in 'type:hashKey' format.
 */
function hashKey(obj) {
  var objType = typeof obj,
      key;

  if (objType == 'object' && obj !== null) {
    if (typeof (key = obj.$$hashKey) == 'function') {
      // must invoke on object to keep the right this
      key = obj.$$hashKey();
    } else if (key === undefined) {
      key = obj.$$hashKey = nextUid();
    }
  } else {
    key = obj;
  }

  return objType + ':' + key;
}

/**
 * HashMap which can use objects as keys
 */
function HashMap(array){
  forEach(array, this.put, this);
}
HashMap.prototype = {
  /**
   * Store key value pair
   * @param key key to store can be any type
   * @param value value to store can be any type
   */
  put: function(key, value) {
    this[hashKey(key)] = value;
  },

  /**
   * @param key
   * @returns the value for the key
   */
  get: function(key) {
    return this[hashKey(key)];
  },

  /**
   * Remove the key/value pair
   * @param key
   */
  remove: function(key) {
    var value = this[key = hashKey(key)];
    delete this[key];
    return value;
  }
};

/**
 * A map where multiple values can be added to the same key such that they form a queue.
 * @returns {HashQueueMap}
 */
function HashQueueMap() {}
HashQueueMap.prototype = {
  /**
   * Same as array push, but using an array as the value for the hash
   */
  push: function(key, value) {
    var array = this[key = hashKey(key)];
    if (!array) {
      this[key] = [value];
    } else {
      array.push(value);
    }
  },

  /**
   * Same as array shift, but using an array as the value for the hash
   */
  shift: function(key) {
    var array = this[key = hashKey(key)];
    if (array) {
      if (array.length == 1) {
        delete this[key];
        return array[0];
      } else {
        return array.shift();
      }
    }
  },

  /**
   * return the first item without deleting it
   */
  peek: function(key) {
    var array = this[hashKey(key)];
    if (array) {
    return array[0];
    }
  }
};

/**
 * @ngdoc function
 * @name angular.injector
 * @function
 *
 * @description
 * Creates an injector function that can be used for retrieving services as well as for
 * dependency injection (see {@link guide/di dependency injection}).
 *

 * @param {Array.<string|Function>} modules A list of module functions or their aliases. See
 *        {@link angular.module}. The `ng` module must be explicitly added.
 * @returns {function()} Injector function. See {@link AUTO.$injector $injector}.
 *
 * @example
 * Typical usage
 * <pre>
 *   // create an injector
 *   var $injector = angular.injector(['ng']);
 *
 *   // use the injector to kick off your application
 *   // use the type inference to auto inject arguments, or use implicit injection
 *   $injector.invoke(function($rootScope, $compile, $document){
 *     $compile($document)($rootScope);
 *     $rootScope.$digest();
 *   });
 * </pre>
 */


/**
 * @ngdoc overview
 * @name AUTO
 * @description
 *
 * Implicit module which gets automatically added to each {@link AUTO.$injector $injector}.
 */

var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
function annotate(fn) {
  var $inject,
      fnText,
      argDecl,
      last;

  if (typeof fn == 'function') {
    if (!($inject = fn.$inject)) {
      $inject = [];
      fnText = fn.toString().replace(STRIP_COMMENTS, '');
      argDecl = fnText.match(FN_ARGS);
      forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg){
        arg.replace(FN_ARG, function(all, underscore, name){
          $inject.push(name);
        });
      });
      fn.$inject = $inject;
    }
  } else if (isArray(fn)) {
    last = fn.length - 1;
    assertArgFn(fn[last], 'fn')
    $inject = fn.slice(0, last);
  } else {
    assertArgFn(fn, 'fn', true);
  }
  return $inject;
}

///////////////////////////////////////

/**
 * @ngdoc object
 * @name AUTO.$injector
 * @function
 *
 * @description
 *
 * `$injector` is used to retrieve object instances as defined by
 * {@link AUTO.$provide provider}, instantiate types, invoke methods,
 * and load modules.
 *
 * The following always holds true:
 *
 * <pre>
 *   var $injector = angular.injector();
 *   expect($injector.get('$injector')).toBe($injector);
 *   expect($injector.invoke(function($injector){
 *     return $injector;
 *   }).toBe($injector);
 * </pre>
 *
 * # Injection Function Annotation
 *
 * JavaScript does not have annotations, and annotations are needed for dependency injection. The
 * following ways are all valid way of annotating function with injection arguments and are equivalent.
 *
 * <pre>
 *   // inferred (only works if code not minified/obfuscated)
 *   $inject.invoke(function(serviceA){});
 *
 *   // annotated
 *   function explicit(serviceA) {};
 *   explicit.$inject = ['serviceA'];
 *   $inject.invoke(explicit);
 *
 *   // inline
 *   $inject.invoke(['serviceA', function(serviceA){}]);
 * </pre>
 *
 * ## Inference
 *
 * In JavaScript calling `toString()` on a function returns the function definition. The definition can then be
 * parsed and the function arguments can be extracted. *NOTE:* This does not work with minification, and obfuscation
 * tools since these tools change the argument names.
 *
 * ## `$inject` Annotation
 * By adding a `$inject` property onto a function the injection parameters can be specified.
 *
 * ## Inline
 * As an array of injection names, where the last item in the array is the function to call.
 */

/**
 * @ngdoc method
 * @name AUTO.$injector#get
 * @methodOf AUTO.$injector
 *
 * @description
 * Return an instance of the service.
 *
 * @param {string} name The name of the instance to retrieve.
 * @return {*} The instance.
 */

/**
 * @ngdoc method
 * @name AUTO.$injector#invoke
 * @methodOf AUTO.$injector
 *
 * @description
 * Invoke the method and supply the method arguments from the `$injector`.
 *
 * @param {!function} fn The function to invoke. The function arguments come form the function annotation.
 * @param {Object=} self The `this` for the invoked method.
 * @param {Object=} locals Optional object. If preset then any argument names are read from this object first, before
 *   the `$injector` is consulted.
 * @returns {*} the value returned by the invoked `fn` function.
 */

/**
 * @ngdoc method
 * @name AUTO.$injector#instantiate
 * @methodOf AUTO.$injector
 * @description
 * Create a new instance of JS type. The method takes a constructor function invokes the new operator and supplies
 * all of the arguments to the constructor function as specified by the constructor annotation.
 *
 * @param {function} Type Annotated constructor function.
 * @param {Object=} locals Optional object. If preset then any argument names are read from this object first, before
 *   the `$injector` is consulted.
 * @returns {Object} new instance of `Type`.
 */

/**
 * @ngdoc method
 * @name AUTO.$injector#annotate
 * @methodOf AUTO.$injector
 *
 * @description
 * Returns an array of service names which the function is requesting for injection. This API is used by the injector
 * to determine which services need to be injected into the function when the function is invoked. There are three
 * ways in which the function can be annotated with the needed dependencies.
 *
 * # Argument names
 *
 * The simplest form is to extract the dependencies from the arguments of the function. This is done by converting
 * the function into a string using `toString()` method and extracting the argument names.
 * <pre>
 *   // Given
 *   function MyController($scope, $route) {
 *     // ...
 *   }
 *
 *   // Then
 *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
 * </pre>
 *
 * This method does not work with code minfication / obfuscation. For this reason the following annotation strategies
 * are supported.
 *
 * # The `$injector` property
 *
 * If a function has an `$inject` property and its value is an array of strings, then the strings represent names of
 * services to be injected into the function.
 * <pre>
 *   // Given
 *   var MyController = function(obfuscatedScope, obfuscatedRoute) {
 *     // ...
 *   }
 *   // Define function dependencies
 *   MyController.$inject = ['$scope', '$route'];
 *
 *   // Then
 *   expect(injector.annotate(MyController)).toEqual(['$scope', '$route']);
 * </pre>
 *
 * # The array notation
 *
 * It is often desirable to inline Injected functions and that's when setting the `$inject` property is very
 * inconvenient. In these situations using the array notation to specify the dependencies in a way that survives
 * minification is a better choice:
 *
 * <pre>
 *   // We wish to write this (not minification / obfuscation safe)
 *   injector.invoke(function($compile, $rootScope) {
 *     // ...
 *   });
 *
 *   // We are forced to write break inlining
 *   var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) {
 *     // ...
 *   };
 *   tmpFn.$inject = ['$compile', '$rootScope'];
 *   injector.invoke(tempFn);
 *
 *   // To better support inline function the inline annotation is supported
 *   injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) {
 *     // ...
 *   }]);
 *
 *   // Therefore
 *   expect(injector.annotate(
 *      ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}])
 *    ).toEqual(['$compile', '$rootScope']);
 * </pre>
 *
 * @param {function|Array.<string|Function>} fn Function for which dependent service names need to be retrieved as described
 *   above.
 *
 * @returns {Array.<string>} The names of the services which the function requires.
 */




/**
 * @ngdoc object
 * @name AUTO.$provide
 *
 * @description
 *
 * Use `$provide` to register new providers with the `$injector`. The providers are the factories for the instance.
 * The providers share the same name as the instance they create with the `Provider` suffixed to them.
 *
 * A provider is an object with a `$get()` method. The injector calls the `$get` method to create a new instance of
 * a service. The Provider can have additional methods which would allow for configuration of the provider.
 *
 * <pre>
 *   function GreetProvider() {
 *     var salutation = 'Hello';
 *
 *     this.salutation = function(text) {
 *       salutation = text;
 *     };
 *
 *     this.$get = function() {
 *       return function (name) {
 *         return salutation + ' ' + name + '!';
 *       };
 *     };
 *   }
 *
 *   describe('Greeter', function(){
 *
 *     beforeEach(module(function($provide) {
 *       $provide.provider('greet', GreetProvider);
 *     });
 *
 *     it('should greet', inject(function(greet) {
 *       expect(greet('angular')).toEqual('Hello angular!');
 *     }));
 *
 *     it('should allow configuration of salutation', function() {
 *       module(function(greetProvider) {
 *         greetProvider.salutation('Ahoj');
 *       });
 *       inject(function(greet) {
 *         expect(greet('angular')).toEqual('Ahoj angular!');
 *       });
 *     )};
 *
 *   });
 * </pre>
 */

/**
 * @ngdoc method
 * @name AUTO.$provide#provider
 * @methodOf AUTO.$provide
 * @description
 *
 * Register a provider for a service. The providers can be retrieved and can have additional configuration methods.
 *
 * @param {string} name The name of the instance. NOTE: the provider will be available under `name + 'Provider'` key.
 * @param {(Object|function())} provider If the provider is:
 *
 *   - `Object`: then it should have a `$get` method. The `$get` method will be invoked using
 *               {@link AUTO.$injector#invoke $injector.invoke()} when an instance needs to be created.
 *   - `Constructor`: a new instance of the provider will be created using
 *               {@link AUTO.$injector#instantiate $injector.instantiate()}, then treated as `object`.
 *
 * @returns {Object} registered provider instance
 */

/**
 * @ngdoc method
 * @name AUTO.$provide#factory
 * @methodOf AUTO.$provide
 * @description
 *
 * A short hand for configuring services if only `$get` method is required.
 *
 * @param {strin
Download .txt
gitextract_1lrcw1wg/

├── README.md
├── chapter1/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       └── angular.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   ├── jquery_example.html
│   │   └── js/
│   │       └── angular.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       └── angular.js
│   └── recipe5/
│       ├── css/
│       │   └── bootstrap.css
│       ├── index.html
│       └── js/
│           ├── angular.js
│           └── app.js
├── chapter10/
│   └── recipe1/
│       └── contacts/
│           ├── README.md
│           ├── app.js
│           ├── package.json
│           ├── public/
│           │   ├── css/
│           │   │   ├── app.css
│           │   │   └── bootstrap.css
│           │   └── js/
│           │       ├── app.js
│           │       ├── controllers/
│           │       │   ├── ContactsEditCtrl.js
│           │       │   ├── ContactsIndexCtrl.js
│           │       │   ├── ContactsShowCtrl.js
│           │       │   └── MainCtrl.js
│           │       ├── controllers.js
│           │       ├── directives.js
│           │       ├── filters.js
│           │       ├── lib/
│           │       │   └── angular/
│           │       │       ├── angular-cookies.js
│           │       │       ├── angular-loader.js
│           │       │       ├── angular-resource.js
│           │       │       ├── angular-sanitize.js
│           │       │       ├── angular.js
│           │       │       └── version.txt
│           │       └── services.js
│           ├── routes/
│           │   ├── api.js
│           │   └── index.js
│           └── views/
│               ├── layout.jade
│               └── partials/
│                   ├── .gitignore
│                   ├── edit.jade
│                   ├── index.jade
│                   └── show.jade
├── chapter2/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe6/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe7/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── app.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── controllers.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── partial1.html
│       │       └── partial2.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   └── angular/
│           │       ├── angular-mocks.js
│           │       ├── angular-scenario.js
│           │       └── version.txt
│           └── unit/
│               └── controllersSpec.js
├── chapter3/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       └── angular.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index-async.html
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── app.js
│   │   │   ├── lib/
│   │   │   │   └── angular/
│   │   │   │       ├── angular-cookies.js
│   │   │   │       ├── angular-loader.js
│   │   │   │       ├── angular-resource.js
│   │   │   │       ├── angular-sanitize.js
│   │   │   │       ├── angular.js
│   │   │   │       └── version.txt
│   │   │   ├── partials/
│   │   │   │   ├── .gitignore
│   │   │   │   ├── partial1.html
│   │   │   │   └── partial2.html
│   │   │   └── widget.html
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       └── lib/
│   │           └── angular/
│   │               ├── angular-mocks.js
│   │               ├── angular-scenario.js
│   │               └── version.txt
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe6/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe7/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe8/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── bootstrap.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── app.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── partial1.html
│       │       └── partial2.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   ├── angular/
│           │   │   ├── angular-mocks.js
│           │   │   ├── angular-scenario.js
│           │   │   └── version.txt
│           │   └── jasmine-jquery.js
│           └── unit/
│               └── directivesSpec.js
├── chapter4/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular-locale_de.js
│   │       └── angular.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe4/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── bootstrap.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── app.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── partial1.html
│       │       └── partial2.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   ├── angular/
│           │   │   ├── angular-mocks.js
│           │   │   ├── angular-scenario.js
│           │   │   └── version.txt
│           │   └── jasmine-jquery.js
│           └── unit/
│               └── filtersSpec.js
├── chapter5/
│   ├── recipe1/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── data/
│   │   │   │   └── posts.json
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index-async.html
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── controllers.js
│   │   │   └── lib/
│   │   │       └── angular/
│   │   │           ├── angular-cookies.js
│   │   │           ├── angular-loader.js
│   │   │           ├── angular-resource.js
│   │   │           ├── angular-sanitize.js
│   │   │           ├── angular.js
│   │   │           └── version.txt
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       ├── lib/
│   │       │   └── angular/
│   │       │       ├── angular-mocks.js
│   │       │       ├── angular-scenario.js
│   │       │       └── version.txt
│   │       └── unit/
│   │           └── controllersSpec.js
│   ├── recipe2/
│   │   ├── README.md
│   │   ├── app.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── css/
│   │   │   │   ├── app.css
│   │   │   │   └── bootstrap.css
│   │   │   └── js/
│   │   │       ├── app.js
│   │   │       ├── controllers.js
│   │   │       ├── directives.js
│   │   │       ├── filters.js
│   │   │       ├── lib/
│   │   │       │   └── angular/
│   │   │       │       ├── angular-cookies.js
│   │   │       │       ├── angular-loader.js
│   │   │       │       ├── angular-resource.js
│   │   │       │       ├── angular-sanitize.js
│   │   │       │       ├── angular.js
│   │   │       │       └── version.txt
│   │   │       └── services.js
│   │   └── views/
│   │       ├── index.jade
│   │       └── layout.jade
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular-resource.js
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── data/
│   │   │   │   ├── first.json
│   │   │   │   ├── second.json
│   │   │   │   └── third.json
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── controllers.js
│   │   │   └── lib/
│   │   │       └── angular/
│   │   │           ├── angular-cookies.js
│   │   │           ├── angular-loader.js
│   │   │           ├── angular-resource.js
│   │   │           ├── angular-sanitize.js
│   │   │           ├── angular.js
│   │   │           └── version.txt
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       ├── lib/
│   │       │   └── angular/
│   │       │       ├── angular-mocks.js
│   │       │       ├── angular-scenario.js
│   │       │       └── version.txt
│   │       └── unit/
│   │           └── controllersSpec.js
│   └── recipe5/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── app.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index-async.html
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── controllers.js
│       │   └── lib/
│       │       └── angular/
│       │           ├── angular-cookies.js
│       │           ├── angular-loader.js
│       │           ├── angular-resource.js
│       │           ├── angular-sanitize.js
│       │           ├── angular.js
│       │           └── version.txt
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           ├── lib/
│           │   └── angular/
│           │       ├── angular-mocks.js
│           │       ├── angular-scenario.js
│           │       └── version.txt
│           └── unit/
│               └── controllersSpec.js
├── chapter6/
│   ├── recipe1/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index-async.html
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── app.js
│   │   │   ├── lib/
│   │   │   │   └── angular/
│   │   │   │       ├── angular-cookies.js
│   │   │   │       ├── angular-loader.js
│   │   │   │       ├── angular-resource.js
│   │   │   │       ├── angular-sanitize.js
│   │   │   │       ├── angular.js
│   │   │   │       └── version.txt
│   │   │   └── partials/
│   │   │       ├── .gitignore
│   │   │       ├── person_details.html
│   │   │       └── person_list.html
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       └── lib/
│   │           └── angular/
│   │               ├── angular-mocks.js
│   │               ├── angular-scenario.js
│   │               └── version.txt
│   ├── recipe2/
│   │   ├── README.md
│   │   ├── app.js
│   │   ├── package.json
│   │   ├── public/
│   │   │   ├── css/
│   │   │   │   ├── app.css
│   │   │   │   └── bootstrap.css
│   │   │   └── js/
│   │   │       ├── app.js
│   │   │       ├── controllers.js
│   │   │       ├── directives.js
│   │   │       ├── filters.js
│   │   │       ├── lib/
│   │   │       │   └── angular/
│   │   │       │       ├── angular-cookies.js
│   │   │       │       ├── angular-loader.js
│   │   │       │       ├── angular-resource.js
│   │   │       │       ├── angular-sanitize.js
│   │   │       │       ├── angular.js
│   │   │       │       └── version.txt
│   │   │       └── services.js
│   │   └── views/
│   │       ├── index.jade
│   │       ├── layout.jade
│   │       └── partials/
│   │           ├── index.jade
│   │           └── show.jade
│   ├── recipe3/
│   │   ├── README.md
│   │   ├── app/
│   │   │   ├── css/
│   │   │   │   ├── .gitignore
│   │   │   │   └── app.css
│   │   │   ├── img/
│   │   │   │   └── .gitignore
│   │   │   ├── index.html
│   │   │   ├── js/
│   │   │   │   └── app.js
│   │   │   ├── lib/
│   │   │   │   └── angular/
│   │   │   │       ├── angular-cookies.js
│   │   │   │       ├── angular-loader.js
│   │   │   │       ├── angular-resource.js
│   │   │   │       ├── angular-sanitize.js
│   │   │   │       ├── angular.js
│   │   │   │       └── version.txt
│   │   │   └── partials/
│   │   │       ├── .gitignore
│   │   │       ├── help.html
│   │   │       ├── index.html
│   │   │       └── show.html
│   │   ├── config/
│   │   │   ├── testacular-e2e.conf.js
│   │   │   └── testacular.conf.js
│   │   ├── logs/
│   │   │   └── .gitignore
│   │   ├── scripts/
│   │   │   ├── e2e-test.bat
│   │   │   ├── e2e-test.sh
│   │   │   ├── test.bat
│   │   │   ├── test.sh
│   │   │   ├── watchr.rb
│   │   │   └── web-server.js
│   │   └── test/
│   │       ├── e2e/
│   │       │   ├── runner.html
│   │       │   └── scenarios.js
│   │       └── lib/
│   │           └── angular/
│   │               ├── angular-mocks.js
│   │               ├── angular-scenario.js
│   │               └── version.txt
│   └── recipe4/
│       ├── README.md
│       ├── app/
│       │   ├── css/
│       │   │   ├── .gitignore
│       │   │   └── app.css
│       │   ├── img/
│       │   │   └── .gitignore
│       │   ├── index.html
│       │   ├── js/
│       │   │   └── app.js
│       │   ├── lib/
│       │   │   └── angular/
│       │   │       ├── angular-cookies.js
│       │   │       ├── angular-loader.js
│       │   │       ├── angular-resource.js
│       │   │       ├── angular-sanitize.js
│       │   │       ├── angular.js
│       │   │       └── version.txt
│       │   └── partials/
│       │       ├── .gitignore
│       │       ├── help.html
│       │       ├── index.html
│       │       ├── login.html
│       │       └── show.html
│       ├── config/
│       │   ├── testacular-e2e.conf.js
│       │   └── testacular.conf.js
│       ├── logs/
│       │   └── .gitignore
│       ├── scripts/
│       │   ├── e2e-test.bat
│       │   ├── e2e-test.sh
│       │   ├── test.bat
│       │   ├── test.sh
│       │   ├── watchr.rb
│       │   └── web-server.js
│       └── test/
│           ├── e2e/
│           │   ├── runner.html
│           │   └── scenarios.js
│           └── lib/
│               └── angular/
│                   ├── angular-mocks.js
│                   ├── angular-scenario.js
│                   └── version.txt
├── chapter7/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe6/
│       ├── css/
│       │   └── bootstrap.css
│       ├── index.html
│       └── js/
│           ├── angular-ui.js
│           ├── angular.js
│           └── app.js
├── chapter8/
│   ├── recipe1/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe2/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe3/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe4/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe5/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe6/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular.js
│   │       └── app.js
│   ├── recipe7/
│   │   ├── css/
│   │   │   └── bootstrap.css
│   │   ├── index.html
│   │   └── js/
│   │       ├── angular-ui-bootstrap-modal.js
│   │       ├── angular.js
│   │       └── app.js
│   └── recipe8/
│       ├── css/
│       │   └── bootstrap.css
│       ├── index.html
│       └── js/
│           ├── angular-resource.js
│           ├── angular.js
│           └── app.js
└── chapter9/
    └── recipe1/
        └── contacts/
            ├── .gitignore
            ├── Gemfile
            ├── README.rdoc
            ├── Rakefile
            ├── app/
            │   ├── assets/
            │   │   ├── javascripts/
            │   │   │   ├── angular/
            │   │   │   │   ├── app.js.erb
            │   │   │   │   ├── controllers/
            │   │   │   │   │   ├── .gitkeep
            │   │   │   │   │   ├── ContactsEditCtrl.js
            │   │   │   │   │   ├── ContactsIndexCtrl.js
            │   │   │   │   │   ├── ContactsShowCtrl.js
            │   │   │   │   │   └── MainCtrl.js
            │   │   │   │   ├── filters/
            │   │   │   │   │   └── .gitkeep
            │   │   │   │   └── services/
            │   │   │   │       ├── .gitkeep
            │   │   │   │       └── Contact.js
            │   │   │   └── application.js
            │   │   ├── stylesheets/
            │   │   │   ├── application.css
            │   │   │   └── bootstrap_and_overrides.css
            │   │   └── templates/
            │   │       ├── .gitkeep
            │   │       └── contacts/
            │   │           ├── edit.html
            │   │           ├── index.html
            │   │           └── show.html
            │   ├── controllers/
            │   │   ├── application_controller.rb
            │   │   ├── contacts_controller.rb
            │   │   └── layouts_controller.rb
            │   ├── helpers/
            │   │   ├── application_helper.rb
            │   │   └── contacts_helper.rb
            │   ├── mailers/
            │   │   └── .gitkeep
            │   ├── models/
            │   │   ├── .gitkeep
            │   │   └── contact.rb
            │   └── views/
            │       └── layouts/
            │           └── application.html.erb
            ├── config/
            │   ├── application.rb
            │   ├── boot.rb
            │   ├── database.yml
            │   ├── environment.rb
            │   ├── environments/
            │   │   ├── development.rb
            │   │   ├── production.rb
            │   │   └── test.rb
            │   ├── initializers/
            │   │   ├── backtrace_silencers.rb
            │   │   ├── inflections.rb
            │   │   ├── mime_types.rb
            │   │   ├── secret_token.rb
            │   │   ├── session_store.rb
            │   │   └── wrap_parameters.rb
            │   ├── locales/
            │   │   └── en.yml
            │   └── routes.rb
            ├── config.ru
            ├── db/
            │   ├── migrate/
            │   │   └── 20130221092802_create_contacts.rb
            │   ├── schema.rb
            │   └── seeds.rb
            ├── doc/
            │   └── README_FOR_APP
            ├── lib/
            │   ├── assets/
            │   │   └── .gitkeep
            │   └── tasks/
            │       └── .gitkeep
            ├── public/
            │   ├── 404.html
            │   ├── 422.html
            │   ├── 500.html
            │   └── robots.txt
            ├── script/
            │   └── rails
            ├── spec/
            │   └── javascripts/
            │       └── angular/
            │           └── .gitkeep
            ├── test/
            │   ├── fixtures/
            │   │   ├── .gitkeep
            │   │   └── contacts.yml
            │   ├── functional/
            │   │   ├── .gitkeep
            │   │   └── contacts_controller_test.rb
            │   ├── integration/
            │   │   └── .gitkeep
            │   ├── performance/
            │   │   └── browsing_test.rb
            │   ├── test_helper.rb
            │   └── unit/
            │       ├── .gitkeep
            │       ├── contact_test.rb
            │       └── helpers/
            │           └── contacts_helper_test.rb
            └── vendor/
                ├── assets/
                │   ├── javascripts/
                │   │   ├── .gitkeep
                │   │   ├── angular-resource.js
                │   │   ├── angular.js
                │   │   └── underscore.js
                │   └── stylesheets/
                │       └── .gitkeep
                └── plugins/
                    └── .gitkeep
Download .txt
Showing preview only (804K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (10408 symbols across 159 files)

FILE: chapter1/recipe1/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter1/recipe2/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter1/recipe3/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter1/recipe3/js/app.js
  function MyCtrl (line 1) | function MyCtrl($scope) {

FILE: chapter1/recipe4/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter1/recipe5/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter10/recipe1/contacts/public/js/controllers/ContactsEditCtrl.js
  function success (line 12) | function success(response) {
  function failure (line 17) | function failure(response) {

FILE: chapter10/recipe1/contacts/public/js/lib/angular/angular-cookies.js
  function push (line 61) | function push() {

FILE: chapter10/recipe1/contacts/public/js/lib/angular/angular-loader.js
  function ensure (line 19) | function ensure(obj, name, factory) {
  function invokeLater (line 246) | function invokeLater(provider, method, insertMethod) {

FILE: chapter10/recipe1/contacts/public/js/lib/angular/angular-resource.js
  function encodeUriSegment (line 244) | function encodeUriSegment(val) {
  function encodeUriQuery (line 263) | function encodeUriQuery(val, pctEncodeSpaces) {
  function Route (line 272) | function Route(template, defaults) {
  function ResourceFactory (line 315) | function ResourceFactory(url, paramDefaults, actions) {

FILE: chapter10/recipe1/contacts/public/js/lib/angular/angular-sanitize.js
  function makeMap (line 175) | function makeMap(str) {
  function htmlParser (line 194) | function htmlParser( html, handler ) {
  function decodeEntities (line 323) | function decodeEntities(value) {
  function encodeEntities (line 335) | function encodeEntities(value) {
  function htmlSanitizeWriter (line 355) | function htmlSanitizeWriter(buf){

FILE: chapter10/recipe1/contacts/public/js/lib/angular/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 646) | function concat(array1, array2, index) {
  function sliceArgs (line 650) | function sliceArgs(args, startIndex) {
  function bind (line 670) | function bind(self, fn) {
  function toJsonReplacer (line 691) | function toJsonReplacer(key, value) {
  function toJson (line 720) | function toJson(obj, pretty) {
  function fromJson (line 736) | function fromJson(json) {
  function toBoolean (line 743) | function toBoolean(value) {
  function startingTag (line 756) | function startingTag(element) {
  function parseKeyValue (line 775) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 787) | function toKeyValue(obj) {
  function encodeUriSegment (line 807) | function encodeUriSegment(val) {
  function encodeUriQuery (line 826) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 864) | function angularInit(element, bootstrap) {
  function bootstrap (line 920) | function bootstrap(element, modules) {
  function snake_case (line 940) | function snake_case(name, separator){
  function bindJQuery (line 947) | function bindJQuery() {
  function assertArg (line 971) | function assertArg(arg, name, reason) {
  function assertArgFn (line 978) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 996) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1258) | function publishExternalAPI(angular){
  function jqNextId (line 1452) | function jqNextId() { return ++jqId; }
  function camelCase (line 1463) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1479) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1513) | function JQLite(element) {
  function JQLiteClone (line 1537) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1541) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1548) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1569) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1583) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1598) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1624) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1629) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1641) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1651) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1662) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1666) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1688) | function trigger() {
  function getBooleanAttrName (line 1728) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1894) | function createEventHandler(element, events) {
  function hashKey (line 2133) | function hashKey(obj) {
  function HashMap (line 2154) | function HashMap(array){
  function HashQueueMap (line 2190) | function HashQueueMap() {}
  function annotate (line 2272) | function annotate(fn) {
  function createInjector (line 2625) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2847) | function $AnchorScrollProvider() {
  function Browser (line 2921) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3253) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3282) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3424) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3580) | function $CompileProvider($provide) {
  function directiveNormalize (line 4511) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4558) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4565) | function directiveLinkingFn(
  function $ControllerProvider (line 4583) | function $ControllerProvider() {
  function $DocumentProvider (line 4653) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4676) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4693) | function $InterpolateProvider() {
  function encodePath (line 4877) | function encodePath(path) {
  function stripHash (line 4888) | function stripHash(url) {
  function matchUrl (line 4893) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4915) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4920) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4925) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4940) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4971) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5026) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5264) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5277) | function locationGetter(property) {
  function locationGetterSetter (line 5284) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5332) | function $LocationProvider(){
  function $LogProvider (line 5515) | function $LogProvider(){
  function lex (line 5630) | function lex(text, csp){
  function parser (line 5864) | function parser(text, json, $filter, csp){
  function setter (line 6244) | function setter(obj, path, setValue) {
  function getter (line 6267) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6293) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6357) | function getterFn(path, csp) {
  function $ParseProvider (line 6443) | function $ParseProvider() {
  function $QProvider (line 6585) | function $QProvider() {
  function qFactory (line 6603) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6860) | function $RouteProvider(){
  function $RouteParamsProvider (line 7325) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7387) | function $RootScopeProvider(){
  function $SnifferProvider (line 8153) | function $SnifferProvider() {
  function $WindowProvider (line 8209) | function $WindowProvider(){
  function parseHeaders (line 8219) | function parseHeaders(headers) {
  function headersGetter (line 8254) | function headersGetter(headers) {
  function transformData (line 8279) | function transformData(data, headers, fns) {
  function isSuccess (line 8291) | function isSuccess(status) {
  function $HttpProvider (line 8296) | function $HttpProvider() {
  function $HttpBackendProvider (line 9001) | function $HttpBackendProvider() {
  function createHttpBackend (line 9008) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9113) | function $LocaleProvider(){
  function $TimeoutProvider (line 9174) | function $TimeoutProvider() {
  function $FilterProvider (line 9334) | function $FilterProvider($provide) {
  function filterFilter (line 9441) | function filterFilter() {
  function currencyFilter (line 9566) | function currencyFilter($locale) {
  function numberFilter (line 9623) | function numberFilter($locale) {
  function formatNumber (line 9632) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9701) | function padNumber(num, digits, trim) {
  function dateGetter (line 9715) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9725) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9734) | function timeZoneGetter(date) {
  function ampmGetter (line 9739) | function ampmGetter(date, formats) {
  function dateFilter (line 9850) | function dateFilter($locale) {
  function jsonFilter (line 9945) | function jsonFilter() {
  function limitToFilter (line 10026) | function limitToFilter(){
  function orderByFilter (line 10146) | function orderByFilter($parse){
  function ngDirective (line 10195) | function ngDirective(directive) {
  function FormController (line 10588) | function FormController(element, attrs) {
  function isEmpty (line 11217) | function isEmpty(value) {
  function textInputType (line 11222) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11335) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11397) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11414) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11431) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11453) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11758) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12251) | function classDirective(name, selector) {
  function destroyLastScope (line 13859) | function destroyLastScope() {
  function clearContent (line 13866) | function clearContent() {
  function update (line 13871) | function update() {
  function Single (line 14185) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14210) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14241) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe1/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe1/js/app.js
  function MyCtrl (line 1) | function MyCtrl($scope) {

FILE: chapter2/recipe2/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe2/js/app.js
  function MyCtrl (line 1) | function MyCtrl($scope) {

FILE: chapter2/recipe3/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe3/js/app.js
  function MyCtrl (line 1) | function MyCtrl($scope) {

FILE: chapter2/recipe4/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe4/js/app.js
  function MyCtrl (line 1) | function MyCtrl($scope) {

FILE: chapter2/recipe5/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe6/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe7/app/js/controllers.js
  function MyCtrl (line 3) | function MyCtrl($scope) {

FILE: chapter2/recipe7/app/lib/angular/angular-cookies.js
  function push (line 61) | function push() {

FILE: chapter2/recipe7/app/lib/angular/angular-loader.js
  function ensure (line 19) | function ensure(obj, name, factory) {
  function invokeLater (line 246) | function invokeLater(provider, method, insertMethod) {

FILE: chapter2/recipe7/app/lib/angular/angular-resource.js
  function encodeUriSegment (line 246) | function encodeUriSegment(val) {
  function encodeUriQuery (line 265) | function encodeUriQuery(val, pctEncodeSpaces) {
  function Route (line 274) | function Route(template, defaults) {
  function ResourceFactory (line 324) | function ResourceFactory(url, paramDefaults, actions) {

FILE: chapter2/recipe7/app/lib/angular/angular-sanitize.js
  function makeMap (line 175) | function makeMap(str) {
  function htmlParser (line 194) | function htmlParser( html, handler ) {
  function decodeEntities (line 323) | function decodeEntities(value) {
  function encodeEntities (line 335) | function encodeEntities(value) {
  function htmlSanitizeWriter (line 355) | function htmlSanitizeWriter(buf){

FILE: chapter2/recipe7/app/lib/angular/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter2/recipe7/scripts/web-server.js
  function main (line 11) | function main(argv) {
  function escapeHtml (line 18) | function escapeHtml(value) {
  function createServlet (line 25) | function createServlet(Class) {
  function HttpServer (line 36) | function HttpServer(handlers) {
  function StaticServlet (line 72) | function StaticServlet() {}

FILE: chapter2/recipe7/test/lib/angular/angular-mocks.js
  function concat (line 297) | function concat(array1, array2, index) {
  function jsonStringToDate (line 391) | function jsonStringToDate(string){
  function int (line 408) | function int(str) {
  function padNumber (line 412) | function padNumber(num, digits, trim) {
  function serialize (line 603) | function serialize(object) {
  function serializeScope (line 634) | function serializeScope(scope, offset) {
  function createHttpBackendMock (line 841) | function createHttpBackendMock($delegate, $browser) {
  function MockHttpExpectation (line 1262) | function MockHttpExpectation(method, url, data, headers) {
  function MockXhr (line 1299) | function MockXhr() {
  function getCurrentSpec (line 1642) | function getCurrentSpec() {
  function isSpecRunning (line 1646) | function isSpecRunning() {
  function workFn (line 1672) | function workFn() {
  function workFn (line 1743) | function workFn() {

FILE: chapter2/recipe7/test/lib/angular/angular-scenario.js
  function jQuerySub (line 898) | function jQuerySub( selector, context ) {
  function doScrollCheck (line 964) | function doScrollCheck() {
  function createFlags (line 991) | function createFlags( flags ) {
  function resolveFunc (line 1326) | function resolveFunc( i ) {
  function progressFunc (line 1334) | function progressFunc( i ) {
  function dataAttr (line 1986) | function dataAttr( elem, key, data ) {
  function isEmptyDataObject (line 2017) | function isEmptyDataObject( obj ) {
  function handleQueueMarkDefer (line 2035) | function handleQueueMarkDefer( elem, type, src ) {
  function resolve (line 2194) | function resolve() {
  function returnFalse (line 3547) | function returnFalse() {
  function returnTrue (line 3550) | function returnTrue() {
  function dirNodeCheck (line 5261) | function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
  function dirCheck (line 5294) | function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
  function isDisconnected (line 5567) | function isDisconnected( node ) {
  function winnow (line 5684) | function winnow( elements, qualifier, keep ) {
  function createSafeFragment (line 5721) | function createSafeFragment( document ) {
  function root (line 6093) | function root( elem, cur ) {
  function cloneCopyEvent (line 6100) | function cloneCopyEvent( src, dest ) {
  function cloneFixAttributes (line 6128) | function cloneFixAttributes( src, dest ) {
  function getAll (line 6273) | function getAll( elem ) {
  function fixDefaultChecked (line 6286) | function fixDefaultChecked( elem ) {
  function findInputs (line 6292) | function findInputs( elem ) {
  function shimCloneNode (line 6303) | function shimCloneNode( elem ) {
  function getWidthOrHeight (line 6794) | function getWidthOrHeight( elem, name, extra ) {
  function addToPrefiltersOrTransports (line 7035) | function addToPrefiltersOrTransports( structure ) {
  function inspectPrefiltersOrTransports (line 7071) | function inspectPrefiltersOrTransports( structure, options, originalOpti...
  function ajaxExtend (line 7113) | function ajaxExtend( target, src ) {
  function done (line 7455) | function done( status, nativeStatusText, responses, headers ) {
  function buildParams (line 7770) | function buildParams( prefix, obj, traditional, add ) {
  function ajaxHandleResponses (line 7820) | function ajaxHandleResponses( s, jqXHR, responses ) {
  function ajaxConvert (line 7885) | function ajaxConvert( s, response ) {
  function createStandardXHR (line 8150) | function createStandardXHR() {
  function createActiveXHR (line 8156) | function createActiveXHR() {
  function doAnimation (line 8495) | function doAnimation() {
  function stopQueue (line 8651) | function stopQueue( elem, data, index ) {
  function createFxNow (line 8693) | function createFxNow() {
  function clearFxNow (line 8698) | function clearFxNow() {
  function genFx (line 8703) | function genFx( type, num ) {
  function t (line 8818) | function t( gotoEnd ) {
  function defaultDisplay (line 9016) | function defaultDisplay( nodeName ) {
  function getWindow (line 9300) | function getWindow( elem ) {
  function fromCharCode (line 9460) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 9505) | function forEach(obj, iterator, context) {
  function sortedKeys (line 9530) | function sortedKeys(obj) {
  function forEachSorted (line 9540) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 9554) | function reverseParams(iteratorFn) {
  function nextUid (line 9566) | function nextUid() {
  function extend (line 9600) | function extend(dst) {
  function int (line 9611) | function int(str) {
  function inherit (line 9616) | function inherit(parent, extra) {
  function noop (line 9636) | function noop() {}
  function identity (line 9655) | function identity($) {return $;}
  function valueFn (line 9659) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 9672) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 9686) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 9701) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 9715) | function isString(value){return typeof value == 'string';}
  function isNumber (line 9729) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 9743) | function isDate(value){
  function isArray (line 9759) | function isArray(value) {
  function isFunction (line 9775) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 9785) | function isWindow(obj) {
  function isScope (line 9790) | function isScope(obj) {
  function isFile (line 9795) | function isFile(obj) {
  function isBoolean (line 9800) | function isBoolean(value) {
  function trim (line 9805) | function trim(value) {
  function isElement (line 9820) | function isElement(node) {
  function makeMap (line 9830) | function makeMap(str){
  function map (line 9851) | function map(obj, iterator, context) {
  function size (line 9872) | function size(obj, ownPropsOnly) {
  function includes (line 9887) | function includes(array, obj) {
  function indexOf (line 9891) | function indexOf(array, obj) {
  function arrayRemove (line 9900) | function arrayRemove(array, value) {
  function isLeafNode (line 9907) | function isLeafNode (node) {
  function copy (line 9941) | function copy(source, destination){
  function shallowCopy (line 9978) | function shallowCopy(src, dst) {
  function equals (line 10015) | function equals(o1, o2) {
  function concat (line 10053) | function concat(array1, array2, index) {
  function sliceArgs (line 10057) | function sliceArgs(args, startIndex) {
  function bind (line 10077) | function bind(self, fn) {
  function toJsonReplacer (line 10098) | function toJsonReplacer(key, value) {
  function toJson (line 10127) | function toJson(obj, pretty) {
  function fromJson (line 10143) | function fromJson(json) {
  function toBoolean (line 10150) | function toBoolean(value) {
  function startingTag (line 10163) | function startingTag(element) {
  function parseKeyValue (line 10182) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 10194) | function toKeyValue(obj) {
  function encodeUriSegment (line 10214) | function encodeUriSegment(val) {
  function encodeUriQuery (line 10233) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 10271) | function angularInit(element, bootstrap) {
  function bootstrap (line 10327) | function bootstrap(element, modules) {
  function snake_case (line 10347) | function snake_case(name, separator){
  function bindJQuery (line 10354) | function bindJQuery() {
  function assertArg (line 10378) | function assertArg(arg, name, reason) {
  function assertArgFn (line 10385) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 10403) | function setupModuleLoader(window) {
  function publishExternalAPI (line 10665) | function publishExternalAPI(angular){
  function jqNextId (line 10859) | function jqNextId() { return ++jqId; }
  function camelCase (line 10870) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 10886) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 10920) | function JQLite(element) {
  function JQLiteClone (line 10944) | function JQLiteClone(element) {
  function JQLiteDealoc (line 10948) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 10955) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 10976) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 10990) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 11005) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 11031) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 11036) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 11048) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 11058) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 11069) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 11073) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 11095) | function trigger() {
  function getBooleanAttrName (line 11135) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 11301) | function createEventHandler(element, events) {
  function hashKey (line 11549) | function hashKey(obj) {
  function HashMap (line 11570) | function HashMap(array){
  function HashQueueMap (line 11606) | function HashQueueMap() {}
  function annotate (line 11688) | function annotate(fn) {
  function createInjector (line 12041) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 12263) | function $AnchorScrollProvider() {
  function Browser (line 12337) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 12670) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 12699) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 12841) | function $TemplateCacheProvider() {
  function $CompileProvider (line 12997) | function $CompileProvider($provide) {
  function directiveNormalize (line 13934) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 13981) | function nodesetLinkingFn(
  function directiveLinkingFn (line 13988) | function directiveLinkingFn(
  function $ControllerProvider (line 14006) | function $ControllerProvider() {
  function $DocumentProvider (line 14076) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 14100) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 14117) | function $InterpolateProvider() {
  function encodePath (line 14301) | function encodePath(path) {
  function stripHash (line 14312) | function stripHash(url) {
  function matchUrl (line 14317) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 14339) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 14344) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 14349) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 14364) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 14395) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 14450) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 14688) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 14701) | function locationGetter(property) {
  function locationGetterSetter (line 14708) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 14756) | function $LocationProvider(){
  function $LogProvider (line 14939) | function $LogProvider(){
  function lex (line 15054) | function lex(text, csp){
  function parser (line 15288) | function parser(text, json, $filter, csp){
  function setter (line 15668) | function setter(obj, path, setValue) {
  function getter (line 15691) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 15717) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 15781) | function getterFn(path, csp) {
  function $ParseProvider (line 15867) | function $ParseProvider() {
  function $QProvider (line 16033) | function $QProvider() {
  function qFactory (line 16051) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 16308) | function $RouteProvider(){
  function $RouteParamsProvider (line 16792) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 16854) | function $RootScopeProvider(){
  function $SnifferProvider (line 17623) | function $SnifferProvider() {
  function $WindowProvider (line 17679) | function $WindowProvider(){
  function parseHeaders (line 17689) | function parseHeaders(headers) {
  function headersGetter (line 17724) | function headersGetter(headers) {
  function transformData (line 17749) | function transformData(data, headers, fns) {
  function isSuccess (line 17761) | function isSuccess(status) {
  function $HttpProvider (line 17766) | function $HttpProvider() {
  function $HttpBackendProvider (line 18474) | function $HttpBackendProvider() {
  function createHttpBackend (line 18481) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 18586) | function $LocaleProvider(){
  function $TimeoutProvider (line 18647) | function $TimeoutProvider() {
  function $FilterProvider (line 18807) | function $FilterProvider($provide) {
  function filterFilter (line 18914) | function filterFilter() {
  function currencyFilter (line 19039) | function currencyFilter($locale) {
  function numberFilter (line 19096) | function numberFilter($locale) {
  function formatNumber (line 19105) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 19174) | function padNumber(num, digits, trim) {
  function dateGetter (line 19188) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 19198) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 19207) | function timeZoneGetter(date) {
  function ampmGetter (line 19212) | function ampmGetter(date, formats) {
  function dateFilter (line 19323) | function dateFilter($locale) {
  function jsonFilter (line 19418) | function jsonFilter() {
  function limitToFilter (line 19499) | function limitToFilter(){
  function orderByFilter (line 19619) | function orderByFilter($parse){
  function ngDirective (line 19668) | function ngDirective(directive) {
  function FormController (line 20060) | function FormController(element, attrs) {
  function isEmpty (line 20689) | function isEmpty(value) {
  function textInputType (line 20694) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 20807) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 20869) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 20886) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 20903) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 20925) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 21230) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 21723) | function classDirective(name, selector) {
  function destroyLastScope (line 23337) | function destroyLastScope() {
  function clearContent (line 23344) | function clearContent() {
  function update (line 23349) | function update() {
  function Single (line 23663) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 23688) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 23719) | function Options(scope, selectElement, ctrl) {
  function executeStatement (line 24032) | function executeStatement(statement, args) {
  function asyncForEach (line 24150) | function asyncForEach(list, iterator, done) {
  function formatException (line 24177) | function formatException(error, maxStackLines) {
  function callerFile (line 24200) | function callerFile(offset) {
  function browserTrigger (line 24230) | function browserTrigger(element, type, keys) {
  function push (line 24375) | function push(value) {
  function complete (line 24851) | function complete(item) {
  function findContext (line 25933) | function findContext(spec) {
  function updateTotals (line 25957) | function updateTotals(status) {
  function addError (line 25971) | function addError(context, line, error) {
  function serializeXml (line 26004) | function serializeXml(context, tree) {

FILE: chapter3/recipe1/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, document, $log, $sniffer) {
  function $BrowserProvider (line 3265) | function $BrowserProvider(){
  function $CacheFactoryProvider (line 3294) | function $CacheFactoryProvider() {
  function $TemplateCacheProvider (line 3436) | function $TemplateCacheProvider() {
  function $CompileProvider (line 3592) | function $CompileProvider($provide) {
  function directiveNormalize (line 4529) | function directiveNormalize(name) {
  function nodesetLinkingFn (line 4576) | function nodesetLinkingFn(
  function directiveLinkingFn (line 4583) | function directiveLinkingFn(
  function $ControllerProvider (line 4601) | function $ControllerProvider() {
  function $DocumentProvider (line 4671) | function $DocumentProvider(){
  function $ExceptionHandlerProvider (line 4695) | function $ExceptionHandlerProvider() {
  function $InterpolateProvider (line 4712) | function $InterpolateProvider() {
  function encodePath (line 4896) | function encodePath(path) {
  function stripHash (line 4907) | function stripHash(url) {
  function matchUrl (line 4912) | function matchUrl(url, obj) {
  function composeProtocolHostPort (line 4934) | function composeProtocolHostPort(protocol, host, port) {
  function pathPrefixFromBase (line 4939) | function pathPrefixFromBase(basePath) {
  function convertToHtml5Url (line 4944) | function convertToHtml5Url(url, basePath, hashPrefix) {
  function convertToHashbangUrl (line 4959) | function convertToHashbangUrl(url, basePath, hashPrefix) {
  function LocationUrl (line 4990) | function LocationUrl(url, pathPrefix, appBaseUrl) {
  function LocationHashbangUrl (line 5045) | function LocationHashbangUrl(url, hashPrefix, appBaseUrl) {
  function LocationHashbangInHtml5Url (line 5283) | function LocationHashbangInHtml5Url(url, hashPrefix, appBaseUrl, baseExt...
  function locationGetter (line 5296) | function locationGetter(property) {
  function locationGetterSetter (line 5303) | function locationGetterSetter(property, preprocess) {
  function $LocationProvider (line 5351) | function $LocationProvider(){
  function $LogProvider (line 5534) | function $LogProvider(){
  function lex (line 5649) | function lex(text, csp){
  function parser (line 5883) | function parser(text, json, $filter, csp){
  function setter (line 6263) | function setter(obj, path, setValue) {
  function getter (line 6286) | function getter(obj, path, bindFnToScope) {
  function cspSafeGetterFn (line 6312) | function cspSafeGetterFn(key0, key1, key2, key3, key4) {
  function getterFn (line 6376) | function getterFn(path, csp) {
  function $ParseProvider (line 6462) | function $ParseProvider() {
  function $QProvider (line 6628) | function $QProvider() {
  function qFactory (line 6646) | function qFactory(nextTick, exceptionHandler) {
  function $RouteProvider (line 6903) | function $RouteProvider(){
  function $RouteParamsProvider (line 7387) | function $RouteParamsProvider() {
  function $RootScopeProvider (line 7449) | function $RootScopeProvider(){
  function $SnifferProvider (line 8218) | function $SnifferProvider() {
  function $WindowProvider (line 8274) | function $WindowProvider(){
  function parseHeaders (line 8284) | function parseHeaders(headers) {
  function headersGetter (line 8319) | function headersGetter(headers) {
  function transformData (line 8344) | function transformData(data, headers, fns) {
  function isSuccess (line 8356) | function isSuccess(status) {
  function $HttpProvider (line 8361) | function $HttpProvider() {
  function $HttpBackendProvider (line 9069) | function $HttpBackendProvider() {
  function createHttpBackend (line 9076) | function createHttpBackend($browser, XHR, $browserDefer, callbacks, rawD...
  function $LocaleProvider (line 9181) | function $LocaleProvider(){
  function $TimeoutProvider (line 9242) | function $TimeoutProvider() {
  function $FilterProvider (line 9402) | function $FilterProvider($provide) {
  function filterFilter (line 9509) | function filterFilter() {
  function currencyFilter (line 9634) | function currencyFilter($locale) {
  function numberFilter (line 9691) | function numberFilter($locale) {
  function formatNumber (line 9700) | function formatNumber(number, pattern, groupSep, decimalSep, fractionSiz...
  function padNumber (line 9769) | function padNumber(num, digits, trim) {
  function dateGetter (line 9783) | function dateGetter(name, size, offset, trim) {
  function dateStrGetter (line 9793) | function dateStrGetter(name, shortForm) {
  function timeZoneGetter (line 9802) | function timeZoneGetter(date) {
  function ampmGetter (line 9807) | function ampmGetter(date, formats) {
  function dateFilter (line 9918) | function dateFilter($locale) {
  function jsonFilter (line 10013) | function jsonFilter() {
  function limitToFilter (line 10094) | function limitToFilter(){
  function orderByFilter (line 10214) | function orderByFilter($parse){
  function ngDirective (line 10263) | function ngDirective(directive) {
  function FormController (line 10655) | function FormController(element, attrs) {
  function isEmpty (line 11284) | function isEmpty(value) {
  function textInputType (line 11289) | function textInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function numberInputType (line 11402) | function numberInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function urlInputType (line 11464) | function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function emailInputType (line 11481) | function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) {
  function radioInputType (line 11498) | function radioInputType(scope, element, attr, ctrl) {
  function checkboxInputType (line 11520) | function checkboxInputType(scope, element, attr, ctrl) {
  function toggleValidCss (line 11825) | function toggleValidCss(isValid, validationErrorKey) {
  function classDirective (line 12318) | function classDirective(name, selector) {
  function destroyLastScope (line 13932) | function destroyLastScope() {
  function clearContent (line 13939) | function clearContent() {
  function update (line 13944) | function update() {
  function Single (line 14258) | function Single(scope, selectElement, ngModelCtrl, selectCtrl) {
  function Multiple (line 14283) | function Multiple(scope, selectElement, ctrl) {
  function Options (line 14314) | function Options(scope, selectElement, ctrl) {

FILE: chapter3/recipe2/js/angular.js
  function fromCharCode (line 55) | function fromCharCode(code) {return String.fromCharCode(code);}
  function forEach (line 100) | function forEach(obj, iterator, context) {
  function sortedKeys (line 125) | function sortedKeys(obj) {
  function forEachSorted (line 135) | function forEachSorted(obj, iterator, context) {
  function reverseParams (line 149) | function reverseParams(iteratorFn) {
  function nextUid (line 161) | function nextUid() {
  function extend (line 195) | function extend(dst) {
  function int (line 206) | function int(str) {
  function inherit (line 211) | function inherit(parent, extra) {
  function noop (line 231) | function noop() {}
  function identity (line 250) | function identity($) {return $;}
  function valueFn (line 254) | function valueFn(value) {return function() {return value;};}
  function isUndefined (line 267) | function isUndefined(value){return typeof value == 'undefined';}
  function isDefined (line 281) | function isDefined(value){return typeof value != 'undefined';}
  function isObject (line 296) | function isObject(value){return value != null && typeof value == 'object';}
  function isString (line 310) | function isString(value){return typeof value == 'string';}
  function isNumber (line 324) | function isNumber(value){return typeof value == 'number';}
  function isDate (line 338) | function isDate(value){
  function isArray (line 354) | function isArray(value) {
  function isFunction (line 370) | function isFunction(value){return typeof value == 'function';}
  function isWindow (line 380) | function isWindow(obj) {
  function isScope (line 385) | function isScope(obj) {
  function isFile (line 390) | function isFile(obj) {
  function isBoolean (line 395) | function isBoolean(value) {
  function trim (line 400) | function trim(value) {
  function isElement (line 415) | function isElement(node) {
  function makeMap (line 425) | function makeMap(str){
  function map (line 446) | function map(obj, iterator, context) {
  function size (line 467) | function size(obj, ownPropsOnly) {
  function includes (line 482) | function includes(array, obj) {
  function indexOf (line 486) | function indexOf(array, obj) {
  function arrayRemove (line 495) | function arrayRemove(array, value) {
  function isLeafNode (line 502) | function isLeafNode (node) {
  function copy (line 536) | function copy(source, destination){
  function shallowCopy (line 573) | function shallowCopy(src, dst) {
  function equals (line 610) | function equals(o1, o2) {
  function concat (line 648) | function concat(array1, array2, index) {
  function sliceArgs (line 652) | function sliceArgs(args, startIndex) {
  function bind (line 672) | function bind(self, fn) {
  function toJsonReplacer (line 693) | function toJsonReplacer(key, value) {
  function toJson (line 722) | function toJson(obj, pretty) {
  function fromJson (line 738) | function fromJson(json) {
  function toBoolean (line 745) | function toBoolean(value) {
  function startingTag (line 758) | function startingTag(element) {
  function parseKeyValue (line 777) | function parseKeyValue(/**string*/keyValue) {
  function toKeyValue (line 789) | function toKeyValue(obj) {
  function encodeUriSegment (line 809) | function encodeUriSegment(val) {
  function encodeUriQuery (line 828) | function encodeUriQuery(val, pctEncodeSpaces) {
  function angularInit (line 866) | function angularInit(element, bootstrap) {
  function bootstrap (line 922) | function bootstrap(element, modules) {
  function snake_case (line 942) | function snake_case(name, separator){
  function bindJQuery (line 949) | function bindJQuery() {
  function assertArg (line 973) | function assertArg(arg, name, reason) {
  function assertArgFn (line 980) | function assertArgFn(arg, name, acceptArrayAnnotation) {
  function setupModuleLoader (line 998) | function setupModuleLoader(window) {
  function publishExternalAPI (line 1260) | function publishExternalAPI(angular){
  function jqNextId (line 1454) | function jqNextId() { return ++jqId; }
  function camelCase (line 1465) | function camelCase(name) {
  function JQLitePatchJQueryRemove (line 1481) | function JQLitePatchJQueryRemove(name, dispatchThis) {
  function JQLite (line 1515) | function JQLite(element) {
  function JQLiteClone (line 1539) | function JQLiteClone(element) {
  function JQLiteDealoc (line 1543) | function JQLiteDealoc(element){
  function JQLiteUnbind (line 1550) | function JQLiteUnbind(element, type, fn) {
  function JQLiteRemoveData (line 1571) | function JQLiteRemoveData(element) {
  function JQLiteExpandoStore (line 1585) | function JQLiteExpandoStore(element, key, value) {
  function JQLiteData (line 1600) | function JQLiteData(element, key, value) {
  function JQLiteHasClass (line 1626) | function JQLiteHasClass(element, selector) {
  function JQLiteRemoveClass (line 1631) | function JQLiteRemoveClass(element, cssClasses) {
  function JQLiteAddClass (line 1643) | function JQLiteAddClass(element, cssClasses) {
  function JQLiteAddNodes (line 1653) | function JQLiteAddNodes(root, elements) {
  function JQLiteController (line 1664) | function JQLiteController(element, name) {
  function JQLiteInheritedData (line 1668) | function JQLiteInheritedData(element, name, value) {
  function trigger (line 1690) | function trigger() {
  function getBooleanAttrName (line 1730) | function getBooleanAttrName(element, name) {
  function createEventHandler (line 1896) | function createEventHandler(element, events) {
  function hashKey (line 2144) | function hashKey(obj) {
  function HashMap (line 2165) | function HashMap(array){
  function HashQueueMap (line 2201) | function HashQueueMap() {}
  function annotate (line 2283) | function annotate(fn) {
  function createInjector (line 2636) | function createInjector(modulesToLoad) {
  function $AnchorScrollProvider (line 2858) | function $AnchorScrollProvider() {
  function Browser (line 2932) | function Browser(window, 
Copy disabled (too large) Download .json
Condensed preview — 584 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (39,989K chars).
[
  {
    "path": "README.md",
    "chars": 391,
    "preview": "# Recipes with Angular.js Example\n\nExamples to accompany the book\n[Recipes with Angular.js](http://leanpub.com/recipes-w"
  },
  {
    "path": "chapter1/recipe1/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter1/recipe1/index.html",
    "chars": 214,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <link rel=\"stylesheet\" href=\"css/bootstrap.css\">\n  </head>"
  },
  {
    "path": "chapter1/recipe1/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter1/recipe2/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter1/recipe2/index.html",
    "chars": 239,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <link rel=\"stylesheet\" href=\"css/bootstrap.css\">\n  </head>"
  },
  {
    "path": "chapter1/recipe2/jquery_example.html",
    "chars": 415,
    "preview": "<html>\n  <head>\n    <script src=\"http://code.jquery.com/jquery.min.js\"></script>\n    <link rel=\"stylesheet\" href=\"css/bo"
  },
  {
    "path": "chapter1/recipe2/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter1/recipe3/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter1/recipe3/index.html",
    "chars": 343,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter1/recipe3/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter1/recipe3/js/app.js",
    "chars": 127,
    "preview": "function MyCtrl($scope) {\n  $scope.visible = true;\n\n  $scope.toggle = function() {\n    $scope.visible = !$scope.visible;"
  },
  {
    "path": "chapter1/recipe4/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter1/recipe4/index.html",
    "chars": 264,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <link rel=\"stylesheet\" href=\"css/bootstrap.css\">\n  </head>"
  },
  {
    "path": "chapter1/recipe4/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter1/recipe5/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter1/recipe5/index.html",
    "chars": 362,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter1/recipe5/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter1/recipe5/js/app.js",
    "chars": 256,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"show\", function() {\n  return {\n    link: function(scope, element,"
  },
  {
    "path": "chapter10/recipe1/contacts/README.md",
    "chars": 2896,
    "preview": "# Angular Express Seed\n\nStart an awesome app with AngularJS on the front, Express + Node on the back. This project is an"
  },
  {
    "path": "chapter10/recipe1/contacts/app.js",
    "chars": 1063,
    "preview": "var express = require('express'),\n  routes = require('./routes'),\n  api = require('./routes/api');\n\nvar app = module.exp"
  },
  {
    "path": "chapter10/recipe1/contacts/package.json",
    "chars": 178,
    "preview": "{\n    \"name\": \"contacts\"\n  , \"version\": \"0.0.1\"\n  , \"private\": true\n  , \"dependencies\": {\n      \"express\": \">= 3.1.0\"\n  "
  },
  {
    "path": "chapter10/recipe1/contacts/public/css/app.css",
    "chars": 61,
    "preview": "body {\n  padding-top: 50px;\n}\n\nfooter {\n  margin-top: 20px;\n}"
  },
  {
    "path": "chapter10/recipe1/contacts/public/css/bootstrap.css",
    "chars": 127247,
    "preview": "/*!\n * Bootstrap v2.3.0\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/app.js",
    "chars": 742,
    "preview": "'use strict';\n\n// Declare app level module which depends on filters, and services\nvar app = angular.module('myApp', [\"ng"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/controllers/ContactsEditCtrl.js",
    "chars": 1319,
    "preview": "app.controller(\"ContactsEditCtrl\", function($scope, $routeParams, $location, Contact) {\n\n  if ($routeParams.id) {\n    $s"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/controllers/ContactsIndexCtrl.js",
    "chars": 186,
    "preview": "app.controller(\"ContactsIndexCtrl\", function($scope, $location, Contact) {\n  $scope.contacts = Contact.index();\n\n  $scop"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/controllers/ContactsShowCtrl.js",
    "chars": 138,
    "preview": "app.controller(\"ContactsShowCtrl\", function($scope, $routeParams, Contact) {\n  $scope.contact = Contact.show({ id: $rout"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/controllers/MainCtrl.js",
    "chars": 49,
    "preview": "app.controller(\"MainCtrl\", function($scope) {\n});"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/controllers.js",
    "chars": 13,
    "preview": "'use strict';"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/directives.js",
    "chars": 212,
    "preview": "'use strict';\n\n/* Directives */\n\n\nangular.module('myApp.directives', []).\n  directive('appVersion', ['version', function"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/filters.js",
    "chars": 225,
    "preview": "'use strict';\n\n/* Filters */\n\nangular.module('myApp.filters', []).\n  filter('interpolate', ['version', function(version)"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/lib/angular/angular-cookies.js",
    "chars": 4842,
    "preview": "/**\n * @license AngularJS v1.0.3\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/lib/angular/angular-loader.js",
    "chars": 9096,
    "preview": "/**\n * @license AngularJS v1.0.3\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n\n(\n\n/**\n * @ngdo"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/lib/angular/angular-resource.js",
    "chars": 16188,
    "preview": "/**\n * @license AngularJS v1.0.3\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/lib/angular/angular-sanitize.js",
    "chars": 17442,
    "preview": "/**\n * @license AngularJS v1.0.3\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/lib/angular/angular.js",
    "chars": 481187,
    "preview": "/**\n * @license AngularJS v1.0.3\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/lib/angular/version.txt",
    "chars": 6,
    "preview": "1.0.3\n"
  },
  {
    "path": "chapter10/recipe1/contacts/public/js/services.js",
    "chars": 385,
    "preview": "'use strict';\n\napp.factory(\"Contact\", function($resource, $http) {\n  var resource = $resource(\"/api/contacts/:id\", { id:"
  },
  {
    "path": "chapter10/recipe1/contacts/routes/api.js",
    "chars": 1013,
    "preview": "var mongoose = require('mongoose');\nmongoose.connect('mongodb://localhost/contacts_database');\n\nvar contactSchema = mong"
  },
  {
    "path": "chapter10/recipe1/contacts/routes/index.js",
    "chars": 171,
    "preview": "exports.index = function(req, res){\n  res.render('layout');\n};\n\nexports.partials = function (req, res) {\n  var name = re"
  },
  {
    "path": "chapter10/recipe1/contacts/views/layout.jade",
    "chars": 925,
    "preview": "!!!\nhtml(ng-app=\"myApp\")\n  head\n    meta(charset='utf8')\n    base(href='/')\n    title Angular Express Seed App\n    link("
  },
  {
    "path": "chapter10/recipe1/contacts/views/partials/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter10/recipe1/contacts/views/partials/edit.jade",
    "chars": 904,
    "preview": "h3 Contact Details\n\nform.form-horizontal(name=\"form\", ng-submit=\"submit()\", novalidate)\n  .control-group(ng-class=\"error"
  },
  {
    "path": "chapter10/recipe1/contacts/views/partials/index.jade",
    "chars": 454,
    "preview": "h3 Contacts\n\ntable.table.table-striped\n  thead\n    td Id\n    td First Name\n    td Last Name\n    td Age\n    td Actions\n  "
  },
  {
    "path": "chapter10/recipe1/contacts/views/partials/show.jade",
    "chars": 218,
    "preview": "h3 Contact Details\n\ndiv\n  h5 First Name\n  {{contact.firstname}}\n\n  h5 Last Name\n  {{contact.lastname}}\n\n  h5 Age\n  {{con"
  },
  {
    "path": "chapter2/recipe1/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter2/recipe1/index.html",
    "chars": 260,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter2/recipe1/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe1/js/app.js",
    "chars": 58,
    "preview": "function MyCtrl($scope) {\n  $scope.value = \"some value\";\n}"
  },
  {
    "path": "chapter2/recipe2/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter2/recipe2/index.html",
    "chars": 288,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter2/recipe2/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe2/js/app.js",
    "chars": 120,
    "preview": "function MyCtrl($scope) {\n  $scope.value = 1;\n\n  $scope.incrementValue = function(value) {\n    $scope.value += 1;\n  };\n}"
  },
  {
    "path": "chapter2/recipe3/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter2/recipe3/index.html",
    "chars": 276,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter2/recipe3/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe3/js/app.js",
    "chars": 126,
    "preview": "function MyCtrl($scope) {\n  $scope.value = 1;\n\n  $scope.getIncrementedValue = function() {\n    return $scope.value + 1;\n"
  },
  {
    "path": "chapter2/recipe4/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter2/recipe4/index.html",
    "chars": 335,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter2/recipe4/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe4/js/app.js",
    "chars": 195,
    "preview": "function MyCtrl($scope) {\n  $scope.name = \"\";\n\n  $scope.$watch(\"name\", function(newValue, oldValue) {\n    if (newValue.l"
  },
  {
    "path": "chapter2/recipe5/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter2/recipe5/index.html",
    "chars": 867,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter2/recipe5/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe5/js/app.js",
    "chars": 209,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.controller(\"MyCtrl\", function($scope) {\n  $scope.name = \"Peter\";\n  $scope.us"
  },
  {
    "path": "chapter2/recipe6/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter2/recipe6/index.html",
    "chars": 550,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></script>\n    <link rel=\"styleshee"
  },
  {
    "path": "chapter2/recipe6/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe6/js/app.js",
    "chars": 452,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.factory(\"UserService\", function() {\n  var users = [\"Peter\", \"Daniel\", \"Nina\""
  },
  {
    "path": "chapter2/recipe7/README.md",
    "chars": 6660,
    "preview": "# angular-seed — the seed for AngularJS apps\n\nThis project is an application skeleton for a typical [AngularJS](http://a"
  },
  {
    "path": "chapter2/recipe7/app/css/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter2/recipe7/app/css/app.css",
    "chars": 366,
    "preview": "/* app css stylesheet */\n\n.menu {\n  list-style: none;\n  border-bottom: 0.1em solid black;\n  margin-bottom: 2em;\n  paddin"
  },
  {
    "path": "chapter2/recipe7/app/img/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter2/recipe7/app/index-async.html",
    "chars": 3325,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <style>\n    [ng-cloak] {\n      display: none;\n    }\n "
  },
  {
    "path": "chapter2/recipe7/app/index.html",
    "chars": 411,
    "preview": "<!doctype html>\n<html lang=\"en\" ng-app>\n<head>\n  <meta charset=\"utf-8\">\n  <title>My AngularJS App</title>\n  <link rel=\"s"
  },
  {
    "path": "chapter2/recipe7/app/js/controllers.js",
    "chars": 200,
    "preview": "'use strict';\n\nfunction MyCtrl($scope) {\n  $scope.name = \"\";\n\n  $scope.$watch(\"name\", function() {\n    if ($scope.name.l"
  },
  {
    "path": "chapter2/recipe7/app/lib/angular/angular-cookies.js",
    "chars": 4842,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe7/app/lib/angular/angular-loader.js",
    "chars": 9096,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n\n(\n\n/**\n * @ngdo"
  },
  {
    "path": "chapter2/recipe7/app/lib/angular/angular-resource.js",
    "chars": 16752,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe7/app/lib/angular/angular-sanitize.js",
    "chars": 17442,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe7/app/lib/angular/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter2/recipe7/app/lib/angular/version.txt",
    "chars": 6,
    "preview": "1.0.4\n"
  },
  {
    "path": "chapter2/recipe7/app/partials/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter2/recipe7/app/partials/partial1.html",
    "chars": 39,
    "preview": "<p>This is the partial for view 1.</p>\n"
  },
  {
    "path": "chapter2/recipe7/app/partials/partial2.html",
    "chars": 138,
    "preview": "<p>This is the partial for view 2.</p>\n<p>\n  Showing of 'interpolate' filter:\n  {{ 'Current version is v%VERSION%.' | in"
  },
  {
    "path": "chapter2/recipe7/config/testacular-e2e.conf.js",
    "chars": 283,
    "preview": "basePath = '../';\n\nfiles = [\n  ANGULAR_SCENARIO,\n  ANGULAR_SCENARIO_ADAPTER,\n  'test/e2e/**/*.js'\n];\n\nautoWatch = false;"
  },
  {
    "path": "chapter2/recipe7/config/testacular.conf.js",
    "chars": 325,
    "preview": "basePath = '../';\n\nfiles = [\n  JASMINE,\n  JASMINE_ADAPTER,\n  'app/lib/angular/angular.js',\n  'app/lib/angular/angular-*."
  },
  {
    "path": "chapter2/recipe7/logs/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "chapter2/recipe7/scripts/e2e-test.bat",
    "chars": 297,
    "preview": "@echo off\n\nREM Windows script for running e2e tests\nREM You have to run server and capture some browser first\nREM\nREM Re"
  },
  {
    "path": "chapter2/recipe7/scripts/e2e-test.sh",
    "chars": 258,
    "preview": "#!/bin/bash\n\nBASE_DIR=`dirname $0`\n\necho \"\"\necho \"Starting Testacular Server (http://vojtajina.github.com/testacular)\"\ne"
  },
  {
    "path": "chapter2/recipe7/scripts/test.bat",
    "chars": 305,
    "preview": "@echo off\r\n\r\nREM Windows script for running unit tests\r\nREM You have to run server and capture some browser first\r\nREM\r\n"
  },
  {
    "path": "chapter2/recipe7/scripts/test.sh",
    "chars": 254,
    "preview": "#!/bin/bash\n\nBASE_DIR=`dirname $0`\n\necho \"\"\necho \"Starting Testacular Server (http://vojtajina.github.com/testacular)\"\ne"
  },
  {
    "path": "chapter2/recipe7/scripts/watchr.rb",
    "chars": 503,
    "preview": "#!/usr/bin/env watchr\n\n# config file for watchr http://github.com/mynyml/watchr\n# install: gem install watchr\n# run: wat"
  },
  {
    "path": "chapter2/recipe7/scripts/web-server.js",
    "chars": 6555,
    "preview": "#!/usr/bin/env node\n\nvar util = require('util'),\n    http = require('http'),\n    fs = require('fs'),\n    url = require('"
  },
  {
    "path": "chapter2/recipe7/test/e2e/runner.html",
    "chars": 234,
    "preview": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <title>End2end Test Runner</title>\n    <script src=\"../lib/angular/angular"
  },
  {
    "path": "chapter2/recipe7/test/e2e/scenarios.js",
    "chars": 938,
    "preview": "'use strict';\n\n/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */\n\ndescribe('my app', function() {\n\n  beforeEac"
  },
  {
    "path": "chapter2/recipe7/test/lib/angular/angular-mocks.js",
    "chars": 56096,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n *\n * TODO(vojta): w"
  },
  {
    "path": "chapter2/recipe7/test/lib/angular/angular-scenario.js",
    "chars": 800738,
    "preview": "/*!\n * jQuery JavaScript Library v1.7.2\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under th"
  },
  {
    "path": "chapter2/recipe7/test/lib/angular/version.txt",
    "chars": 6,
    "preview": "1.0.4\n"
  },
  {
    "path": "chapter2/recipe7/test/unit/controllersSpec.js",
    "chars": 459,
    "preview": "'use strict';\n\n/* jasmine specs for controllers go here */\n\ndescribe('MyCtrl', function(){\n  var scope, ctrl;\n\n  beforeE"
  },
  {
    "path": "chapter3/recipe1/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter3/recipe1/index.html",
    "chars": 283,
    "preview": "<html>\n  <head>\n    <script src=\"js/angular.js\"></script>\n    <link rel=\"stylesheet\" href=\"css/bootstrap.css\">\n  </head>"
  },
  {
    "path": "chapter3/recipe1/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe2/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter3/recipe2/index.html",
    "chars": 324,
    "preview": "<html>\n  <head>\n    <script src=\"http://code.jquery.com/jquery.min.js\"></script>\n    <script src=\"js/angular.js\"></scrip"
  },
  {
    "path": "chapter3/recipe2/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe2/js/app.js",
    "chars": 349,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"myWidget\", function() {\n  var linkFunction = function(scope, elem"
  },
  {
    "path": "chapter3/recipe3/README.md",
    "chars": 6660,
    "preview": "# angular-seed — the seed for AngularJS apps\n\nThis project is an application skeleton for a typical [AngularJS](http://a"
  },
  {
    "path": "chapter3/recipe3/app/css/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter3/recipe3/app/css/app.css",
    "chars": 366,
    "preview": "/* app css stylesheet */\n\n.menu {\n  list-style: none;\n  border-bottom: 0.1em solid black;\n  margin-bottom: 2em;\n  paddin"
  },
  {
    "path": "chapter3/recipe3/app/img/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter3/recipe3/app/index-async.html",
    "chars": 3325,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <style>\n    [ng-cloak] {\n      display: none;\n    }\n "
  },
  {
    "path": "chapter3/recipe3/app/index.html",
    "chars": 390,
    "preview": "<!doctype html>\n<html lang=\"en\" ng-app=\"MyApp\">\n<head>\n  <meta charset=\"utf-8\">\n  <title>My AngularJS App</title>\n  <lin"
  },
  {
    "path": "chapter3/recipe3/app/js/app.js",
    "chars": 429,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"myWidget\", function() {\n  return {\n    restrict: \"E\",\n    templat"
  },
  {
    "path": "chapter3/recipe3/app/lib/angular/angular-cookies.js",
    "chars": 4842,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe3/app/lib/angular/angular-loader.js",
    "chars": 9096,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n\n(\n\n/**\n * @ngdo"
  },
  {
    "path": "chapter3/recipe3/app/lib/angular/angular-resource.js",
    "chars": 16752,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe3/app/lib/angular/angular-sanitize.js",
    "chars": 17442,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe3/app/lib/angular/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe3/app/lib/angular/version.txt",
    "chars": 6,
    "preview": "1.0.4\n"
  },
  {
    "path": "chapter3/recipe3/app/partials/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter3/recipe3/app/partials/partial1.html",
    "chars": 39,
    "preview": "<p>This is the partial for view 1.</p>\n"
  },
  {
    "path": "chapter3/recipe3/app/partials/partial2.html",
    "chars": 138,
    "preview": "<p>This is the partial for view 2.</p>\n<p>\n  Showing of 'interpolate' filter:\n  {{ 'Current version is v%VERSION%.' | in"
  },
  {
    "path": "chapter3/recipe3/app/widget.html",
    "chars": 37,
    "preview": "<p>This is the external template!</p>"
  },
  {
    "path": "chapter3/recipe3/config/testacular-e2e.conf.js",
    "chars": 283,
    "preview": "basePath = '../';\n\nfiles = [\n  ANGULAR_SCENARIO,\n  ANGULAR_SCENARIO_ADAPTER,\n  'test/e2e/**/*.js'\n];\n\nautoWatch = false;"
  },
  {
    "path": "chapter3/recipe3/config/testacular.conf.js",
    "chars": 325,
    "preview": "basePath = '../';\n\nfiles = [\n  JASMINE,\n  JASMINE_ADAPTER,\n  'app/lib/angular/angular.js',\n  'app/lib/angular/angular-*."
  },
  {
    "path": "chapter3/recipe3/logs/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "chapter3/recipe3/scripts/e2e-test.bat",
    "chars": 297,
    "preview": "@echo off\n\nREM Windows script for running e2e tests\nREM You have to run server and capture some browser first\nREM\nREM Re"
  },
  {
    "path": "chapter3/recipe3/scripts/e2e-test.sh",
    "chars": 258,
    "preview": "#!/bin/bash\n\nBASE_DIR=`dirname $0`\n\necho \"\"\necho \"Starting Testacular Server (http://vojtajina.github.com/testacular)\"\ne"
  },
  {
    "path": "chapter3/recipe3/scripts/test.bat",
    "chars": 305,
    "preview": "@echo off\r\n\r\nREM Windows script for running unit tests\r\nREM You have to run server and capture some browser first\r\nREM\r\n"
  },
  {
    "path": "chapter3/recipe3/scripts/test.sh",
    "chars": 254,
    "preview": "#!/bin/bash\n\nBASE_DIR=`dirname $0`\n\necho \"\"\necho \"Starting Testacular Server (http://vojtajina.github.com/testacular)\"\ne"
  },
  {
    "path": "chapter3/recipe3/scripts/watchr.rb",
    "chars": 503,
    "preview": "#!/usr/bin/env watchr\n\n# config file for watchr http://github.com/mynyml/watchr\n# install: gem install watchr\n# run: wat"
  },
  {
    "path": "chapter3/recipe3/scripts/web-server.js",
    "chars": 6555,
    "preview": "#!/usr/bin/env node\n\nvar util = require('util'),\n    http = require('http'),\n    fs = require('fs'),\n    url = require('"
  },
  {
    "path": "chapter3/recipe3/test/e2e/runner.html",
    "chars": 234,
    "preview": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <title>End2end Test Runner</title>\n    <script src=\"../lib/angular/angular"
  },
  {
    "path": "chapter3/recipe3/test/e2e/scenarios.js",
    "chars": 938,
    "preview": "'use strict';\n\n/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */\n\ndescribe('my app', function() {\n\n  beforeEac"
  },
  {
    "path": "chapter3/recipe3/test/lib/angular/angular-mocks.js",
    "chars": 56096,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n *\n * TODO(vojta): w"
  },
  {
    "path": "chapter3/recipe3/test/lib/angular/angular-scenario.js",
    "chars": 800738,
    "preview": "/*!\n * jQuery JavaScript Library v1.7.2\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under th"
  },
  {
    "path": "chapter3/recipe3/test/lib/angular/version.txt",
    "chars": 6,
    "preview": "1.0.4\n"
  },
  {
    "path": "chapter3/recipe4/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter3/recipe4/index.html",
    "chars": 339,
    "preview": "<html>\n  <head>\n    <script src=\"http://code.jquery.com/jquery.min.js\"></script>\n    <script src=\"js/angular.js\"></scrip"
  },
  {
    "path": "chapter3/recipe4/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe4/js/app.js",
    "chars": 197,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"myWidget\", function() {\n  return {\n    restrict: \"E\",\n    transcl"
  },
  {
    "path": "chapter3/recipe5/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter3/recipe5/index.html",
    "chars": 422,
    "preview": "<html>\n  <head>\n    <script src=\"http://code.jquery.com/jquery.min.js\"></script>\n    <script src=\"js/angular.js\"></scrip"
  },
  {
    "path": "chapter3/recipe5/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe5/js/app.js",
    "chars": 730,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"myWidget\", function() {\n  var linkFunction = function(scope, elem"
  },
  {
    "path": "chapter3/recipe6/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter3/recipe6/index.html",
    "chars": 380,
    "preview": "<html>\n  <head>\n    <script src=\"http://code.jquery.com/jquery.min.js\"></script>\n    <script src=\"js/angular.js\"></scrip"
  },
  {
    "path": "chapter3/recipe6/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe6/js/app.js",
    "chars": 473,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"repeatNtimes\", function() {\n  return {\n    restrict: \"E\",\n    com"
  },
  {
    "path": "chapter3/recipe7/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter3/recipe7/index.html",
    "chars": 336,
    "preview": "<html>\n  <head>\n    <script src=\"http://code.jquery.com/jquery.min.js\"></script>\n    <script src=\"js/angular.js\"></scrip"
  },
  {
    "path": "chapter3/recipe7/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe7/js/app.js",
    "chars": 849,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"basket\", function() {\n  return {\n    restrict: \"E\",\n    controlle"
  },
  {
    "path": "chapter3/recipe8/README.md",
    "chars": 6660,
    "preview": "# angular-seed — the seed for AngularJS apps\n\nThis project is an application skeleton for a typical [AngularJS](http://a"
  },
  {
    "path": "chapter3/recipe8/app/css/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter3/recipe8/app/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter3/recipe8/app/img/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter3/recipe8/app/index-async.html",
    "chars": 3325,
    "preview": "<!doctype html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"utf-8\">\n  <style>\n    [ng-cloak] {\n      display: none;\n    }\n "
  },
  {
    "path": "chapter3/recipe8/app/index.html",
    "chars": 442,
    "preview": "<!doctype html>\n<html lang=\"en\" ng-app=\"MyApp\">\n<head>\n  <meta charset=\"utf-8\">\n  <title>My AngularJS App</title>\n  <lin"
  },
  {
    "path": "chapter3/recipe8/app/js/app.js",
    "chars": 1304,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.directive(\"tabs\", function() {\n  return {\n    restrict: \"E\",\n    transclude:"
  },
  {
    "path": "chapter3/recipe8/app/lib/angular/angular-cookies.js",
    "chars": 4842,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe8/app/lib/angular/angular-loader.js",
    "chars": 9096,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n\n(\n\n/**\n * @ngdo"
  },
  {
    "path": "chapter3/recipe8/app/lib/angular/angular-resource.js",
    "chars": 16752,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe8/app/lib/angular/angular-sanitize.js",
    "chars": 17442,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe8/app/lib/angular/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter3/recipe8/app/lib/angular/version.txt",
    "chars": 6,
    "preview": "1.0.4\n"
  },
  {
    "path": "chapter3/recipe8/app/partials/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "chapter3/recipe8/app/partials/partial1.html",
    "chars": 39,
    "preview": "<p>This is the partial for view 1.</p>\n"
  },
  {
    "path": "chapter3/recipe8/app/partials/partial2.html",
    "chars": 138,
    "preview": "<p>This is the partial for view 2.</p>\n<p>\n  Showing of 'interpolate' filter:\n  {{ 'Current version is v%VERSION%.' | in"
  },
  {
    "path": "chapter3/recipe8/config/testacular-e2e.conf.js",
    "chars": 283,
    "preview": "basePath = '../';\n\nfiles = [\n  ANGULAR_SCENARIO,\n  ANGULAR_SCENARIO_ADAPTER,\n  'test/e2e/**/*.js'\n];\n\nautoWatch = false;"
  },
  {
    "path": "chapter3/recipe8/config/testacular.conf.js",
    "chars": 384,
    "preview": "basePath = '../';\n\nfiles = [\n  JASMINE,\n  JASMINE_ADAPTER,\n  'app/lib/jquery.min.js',\n  'app/lib/angular/angular.js',\n  "
  },
  {
    "path": "chapter3/recipe8/logs/.gitignore",
    "chars": 14,
    "preview": "*\n!.gitignore\n"
  },
  {
    "path": "chapter3/recipe8/scripts/e2e-test.bat",
    "chars": 297,
    "preview": "@echo off\n\nREM Windows script for running e2e tests\nREM You have to run server and capture some browser first\nREM\nREM Re"
  },
  {
    "path": "chapter3/recipe8/scripts/e2e-test.sh",
    "chars": 258,
    "preview": "#!/bin/bash\n\nBASE_DIR=`dirname $0`\n\necho \"\"\necho \"Starting Testacular Server (http://vojtajina.github.com/testacular)\"\ne"
  },
  {
    "path": "chapter3/recipe8/scripts/test.bat",
    "chars": 305,
    "preview": "@echo off\r\n\r\nREM Windows script for running unit tests\r\nREM You have to run server and capture some browser first\r\nREM\r\n"
  },
  {
    "path": "chapter3/recipe8/scripts/test.sh",
    "chars": 254,
    "preview": "#!/bin/bash\n\nBASE_DIR=`dirname $0`\n\necho \"\"\necho \"Starting Testacular Server (http://vojtajina.github.com/testacular)\"\ne"
  },
  {
    "path": "chapter3/recipe8/scripts/watchr.rb",
    "chars": 503,
    "preview": "#!/usr/bin/env watchr\n\n# config file for watchr http://github.com/mynyml/watchr\n# install: gem install watchr\n# run: wat"
  },
  {
    "path": "chapter3/recipe8/scripts/web-server.js",
    "chars": 6555,
    "preview": "#!/usr/bin/env node\n\nvar util = require('util'),\n    http = require('http'),\n    fs = require('fs'),\n    url = require('"
  },
  {
    "path": "chapter3/recipe8/test/e2e/runner.html",
    "chars": 234,
    "preview": "<!doctype html>\n<html lang=\"en\">\n  <head>\n    <title>End2end Test Runner</title>\n    <script src=\"../lib/angular/angular"
  },
  {
    "path": "chapter3/recipe8/test/e2e/scenarios.js",
    "chars": 938,
    "preview": "'use strict';\n\n/* http://docs.angularjs.org/guide/dev_guide.e2e-testing */\n\ndescribe('my app', function() {\n\n  beforeEac"
  },
  {
    "path": "chapter3/recipe8/test/lib/angular/angular-mocks.js",
    "chars": 56096,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n *\n * TODO(vojta): w"
  },
  {
    "path": "chapter3/recipe8/test/lib/angular/angular-scenario.js",
    "chars": 800738,
    "preview": "/*!\n * jQuery JavaScript Library v1.7.2\n * http://jquery.com/\n *\n * Copyright 2011, John Resig\n * Dual licensed under th"
  },
  {
    "path": "chapter3/recipe8/test/lib/angular/version.txt",
    "chars": 6,
    "preview": "1.0.4\n"
  },
  {
    "path": "chapter3/recipe8/test/lib/jasmine-jquery.js",
    "chars": 15641,
    "preview": "var readFixtures = function() {\n  return jasmine.getFixtures().proxyCallTo_('read', arguments)\n}\n\nvar preloadFixtures = "
  },
  {
    "path": "chapter3/recipe8/test/unit/directivesSpec.js",
    "chars": 1449,
    "preview": "describe('MyApp Tabs', function() {\n  var elm, scope;\n\n  beforeEach(module('MyApp'));\n\n  beforeEach(inject(function($roo"
  },
  {
    "path": "chapter4/recipe1/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter4/recipe1/index.html",
    "chars": 419,
    "preview": "<html>\n  <head>\n    <meta charset='utf-8'>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/angular-locale_"
  },
  {
    "path": "chapter4/recipe1/js/angular-locale_de.js",
    "chars": 1248,
    "preview": "angular.module(\"ngLocale\", [], [\"$provide\", function($provide) {\nvar PLURAL_CATEGORY = {ZERO: \"zero\", ONE: \"one\", TWO: \""
  },
  {
    "path": "chapter4/recipe1/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter4/recipe2/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter4/recipe2/index.html",
    "chars": 371,
    "preview": "<html>\n  <head>\n    <meta charset='utf-8'>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></scrip"
  },
  {
    "path": "chapter4/recipe2/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter4/recipe2/js/app.js",
    "chars": 263,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.filter(\"reverse\", function() {\n  return function(input) {\n    var result = \""
  },
  {
    "path": "chapter4/recipe3/css/bootstrap.css",
    "chars": 124223,
    "preview": "/*!\n * Bootstrap v2.2.2\n *\n * Copyright 2012 Twitter, Inc\n * Licensed under the Apache License v2.0\n * http://www.apache"
  },
  {
    "path": "chapter4/recipe3/index.html",
    "chars": 389,
    "preview": "<html>\n  <head>\n    <meta charset='utf-8'>\n    <script src=\"js/angular.js\"></script>\n    <script src=\"js/app.js\"></scrip"
  },
  {
    "path": "chapter4/recipe3/js/angular.js",
    "chars": 483771,
    "preview": "/**\n * @license AngularJS v1.0.4\n * (c) 2010-2012 Google, Inc. http://angularjs.org\n * License: MIT\n */\n(function(window"
  },
  {
    "path": "chapter4/recipe3/js/app.js",
    "chars": 280,
    "preview": "var app = angular.module(\"MyApp\", []);\n\napp.filter(\"exclude\", function() {\n  return function(input, exclude) {\n    var r"
  },
  {
    "path": "chapter4/recipe4/README.md",
    "chars": 6660,
    "preview": "# angular-seed — the seed for AngularJS apps\n\nThis project is an application skeleton for a typical [AngularJS](http://a"
  }
]

// ... and 384 more files (download for full content)

About this extraction

This page contains the full source code of the fdietz/recipes-with-angular-js-examples GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 584 files (36.5 MB), approximately 9.6M tokens, and a symbol index with 10408 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!